diff --git a/caffe2/contrib/aten/aten_test.py b/caffe2/contrib/aten/aten_test.py index 4a025c3b18021..278243a0fd3ee 100644 --- a/caffe2/contrib/aten/aten_test.py +++ b/caffe2/contrib/aten/aten_test.py @@ -25,7 +25,7 @@ def ref(X, Y): return [X + Y] self.assertReferenceChecks(gc, op, inputs, ref) - @given(inputs=hu.tensors(n=2, dtype=np.float16), **hu.gcs_gpu_only) + @given(inputs=hu.tensors(n=2, dtype=np.float16), **hu.gcs_gpu_only) # type: ignore[arg-type] def test_add_half(self, inputs, gc, dc): op = core.CreateOperator( "ATen", diff --git a/caffe2/contrib/gloo/gloo_test.py b/caffe2/contrib/gloo/gloo_test.py index 5ae066f5e3ca2..deafbdc2308b3 100644 --- a/caffe2/contrib/gloo/gloo_test.py +++ b/caffe2/contrib/gloo/gloo_test.py @@ -17,7 +17,7 @@ from caffe2.python import core, workspace, dyndep import caffe2.python.hypothesis_test_util as hu -from gloo.python import IoError +from gloo.python import IoError # type: ignore[import] dyndep.InitOpsLibrary("@/caffe2/caffe2/distributed:file_store_handler_ops") dyndep.InitOpsLibrary("@/caffe2/caffe2/distributed:redis_store_handler_ops") @@ -42,7 +42,7 @@ class TestCase(hu.HypothesisTestCase): def run_test_locally(self, fn, device_option=None, **kwargs): # Queue for assertion errors on subprocesses - queue = Queue() + queue = Queue() # type: ignore[var-annotated] # Capture any exception thrown by the subprocess def run_fn(*args, **kwargs): @@ -87,8 +87,8 @@ def run_test_distributed(self, fn, device_option=None, **kwargs): self.assertIsNotNone(comm_rank) comm_size = os.getenv('COMM_SIZE') self.assertIsNotNone(comm_size) - kwargs['comm_rank'] = int(comm_rank) - kwargs['comm_size'] = int(comm_size) + kwargs['comm_rank'] = int(comm_rank) # type: ignore[arg-type] + kwargs['comm_size'] = int(comm_size) # type: ignore[arg-type] with core.DeviceScope(device_option): fn(**kwargs) workspace.ResetWorkspace() diff --git a/caffe2/contrib/nccl/nccl_ops_test.py b/caffe2/contrib/nccl/nccl_ops_test.py index 2d4e9b518b9bb..60e7c02744b91 100644 --- a/caffe2/contrib/nccl/nccl_ops_test.py +++ b/caffe2/contrib/nccl/nccl_ops_test.py @@ -61,7 +61,7 @@ def allreduce(*args): allreduce, input_device_options) for output in outputs: np.testing.assert_array_equal(outputs[0], output) - self.assertEqual(outputs[0].tobytes(), output.tobytes()) + self.assertEqual(outputs[0].tobytes(), output.tobytes()) # type: ignore[attr-defined] @given(n=st.integers(min_value=2, max_value=workspace.NumGpuDevices()), m=st.integers(min_value=1, max_value=1000), @@ -122,7 +122,7 @@ def allgather(*args): allgather, input_device_options) for output in outputs: np.testing.assert_array_equal(outputs[0], output) - self.assertEqual(outputs[0].tobytes(), output.tobytes()) + self.assertEqual(outputs[0].tobytes(), output.tobytes()) # type: ignore[attr-defined] @given(n=st.integers(min_value=2, max_value=workspace.NumGpuDevices()), m=st.integers(min_value=1, max_value=1000)) @@ -136,8 +136,8 @@ def test_nccl_reduce_scatter(self, n, m): def reduce_scatter(*args): assert len(args) == n reduced = sum(args) - assert len(reduced.shape) > 1 - ref = [reduced[i, :] for i in range(n)] + assert len(reduced.shape) > 1 # type: ignore[union-attr] + ref = [reduced[i, :] for i in range(n)] # type: ignore[index] return ref self.assertReferenceChecks( diff --git a/caffe2/contrib/playground/AnyExp.py b/caffe2/contrib/playground/AnyExp.py index b8e2f8b37b2a1..002fa9b7b6076 100644 --- a/caffe2/contrib/playground/AnyExp.py +++ b/caffe2/contrib/playground/AnyExp.py @@ -209,7 +209,7 @@ def fun_per_epoch_aftRunNet(self, epoch): def checkpoint(self, epoch): self.model_path = checkpoint.save_model_params( - True, self.train_model, self.gen_checkpoint_path(True, epoch + 1), + True, self.train_model, self.gen_checkpoint_path(True, epoch + 1), # type: ignore[attr-defined] epoch + 1, self.opts, float('-inf')) def gen_checkpoint_path(self, is_checkpoint, epoch): @@ -273,11 +273,11 @@ def run_training_net(self): @abstractmethod def run_testing_net(self): - if self.test_model is None: + if self.test_model is None: # type: ignore[attr-defined] return timeout = 2000.0 with timeout_guard.CompleteInTimeOrDie(timeout): - workspace.RunNet(self.test_model.net.Proto().name) + workspace.RunNet(self.test_model.net.Proto().name) # type: ignore[attr-defined] # @abstractmethod def planning_output(self): @@ -286,9 +286,9 @@ def planning_output(self): self.init_logs() def prep_data_parallel_models(self): - self.prep_a_data_parallel_model(self.train_model, + self.prep_a_data_parallel_model(self.train_model, # type: ignore[attr-defined] self.train_dataset, True) - self.prep_a_data_parallel_model(self.test_model, + self.prep_a_data_parallel_model(self.test_model, # type: ignore[attr-defined] self.test_dataset, False) def prep_a_data_parallel_model(self, model, dataset, is_train): @@ -359,7 +359,7 @@ def loadCheckpoint(self): )) start_epoch, prev_checkpointed_lr, _best_metric = \ checkpoint.initialize_params_from_file( - model=self.train_model, + model=self.train_model, # type: ignore[attr-defined] weights_file=previous_checkpoint, num_xpus=num_xpus, opts=opts, @@ -370,7 +370,7 @@ def loadCheckpoint(self): log.info("Load pretrained model: {}".format(pretrained_model)) start_epoch, prev_checkpointed_lr, best_metric = \ checkpoint.initialize_params_from_file( - model=self.train_model, + model=self.train_model, # type: ignore[attr-defined] weights_file=pretrained_model, num_xpus=num_xpus, opts=opts, @@ -378,7 +378,7 @@ def loadCheckpoint(self): reset_epoch=opts['model_param']['reset_epoch'], ) - data_parallel_model.FinalizeAfterCheckpoint(self.train_model) + data_parallel_model.FinalizeAfterCheckpoint(self.train_model) # type: ignore[attr-defined] def buildModelAndTrain(self, opts): log.info('in buildModelAndTrain, trainer_input: {}'.format(str(opts))) @@ -424,7 +424,7 @@ def buildModelAndTrain(self, opts): self.fun_per_iter_b4RunNet(epoch, epoch_iter) - if self.train_model is not None: + if self.train_model is not None: # type: ignore[attr-defined] self.run_training_net() self.fun_per_iter_aftRunNetB4Test(epoch, epoch_iter) @@ -484,7 +484,7 @@ def buildModelAndTrain(self, opts): self.fun_per_epoch_aftRunNet(epoch) - self.fun_conclude_operator() + self.fun_conclude_operator() # type: ignore[call-arg] self.createMetricsPlotsModelsOutputs() diff --git a/caffe2/contrib/playground/AnyExpOnTerm.py b/caffe2/contrib/playground/AnyExpOnTerm.py index dcfe61f145458..25202ea00bd75 100644 --- a/caffe2/contrib/playground/AnyExpOnTerm.py +++ b/caffe2/contrib/playground/AnyExpOnTerm.py @@ -35,14 +35,14 @@ def runShardedTrainLoop(opts, myTrainFun): ret = None pretrained_model = "" - shard_results = [] + shard_results = [] # type: ignore[var-annotated] for epoch in range(start_epoch, opts['epoch_iter']['num_epochs'], opts['epoch_iter']['num_epochs_per_flow_schedule']): # must support checkpoint or the multiple schedule will always # start from initial state - checkpoint_model = None if epoch == start_epoch else ret['model'] + checkpoint_model = None if epoch == start_epoch else ret['model'] # type: ignore[index] pretrained_model = None if epoch > start_epoch else pretrained_model shard_results = [] # with LexicalContext('epoch{}_gang'.format(epoch),gang_schedule=False): diff --git a/caffe2/contrib/playground/checkpoint.py b/caffe2/contrib/playground/checkpoint.py index 5ea3d2a9035c5..6b03c55a88164 100644 --- a/caffe2/contrib/playground/checkpoint.py +++ b/caffe2/contrib/playground/checkpoint.py @@ -29,7 +29,7 @@ def initialize_params_from_file( def initialize_master_xpu_model_params(model, weights_file, opts, reset_epoch): log.info("Initializing model params from file: {}".format(weights_file)) with open(weights_file, 'r') as fopen: - blobs = pickle.load(fopen) + blobs = pickle.load(fopen) # type: ignore[arg-type] if 'blobs' in blobs: blobs = blobs['blobs'] @@ -161,7 +161,7 @@ def save_model_params_blob(model, params_file, epoch, opts, best_metric): log.info('to weights file {}'.format(params_file)) try: with open(params_file, 'w') as fwrite: - pickle.dump(dict(blobs=save_blobs), fwrite, pickle.HIGHEST_PROTOCOL) + pickle.dump(dict(blobs=save_blobs), fwrite, pickle.HIGHEST_PROTOCOL) # type: ignore[arg-type] except IOError as e: log.error('I/O error({0}): {1}'.format(e.errno, e.strerror)) diff --git a/caffe2/contrib/tensorboard/tensorboard_exporter.py b/caffe2/contrib/tensorboard/tensorboard_exporter.py index a9a1651a9b99d..3a491835ebe88 100644 --- a/caffe2/contrib/tensorboard/tensorboard_exporter.py +++ b/caffe2/contrib/tensorboard/tensorboard_exporter.py @@ -44,8 +44,8 @@ def _convert_to_ssa(shapes, track_blob_names, ops): I.e. blobs will be renamed so that each blob is produced only once. """ ir = core.IR(ops) - seen = set() - versioned = {} + seen = set() # type: ignore[var-annotated] + versioned = {} # type: ignore[var-annotated] shapes2 = {} track_blob_names2 = {} @@ -98,8 +98,8 @@ def _remap_keys(m, f): def _rename_all(shapes, track_blob_names, ops, f): - seen = set() - renamed = {} + seen = set() # type: ignore[var-annotated] + renamed = {} # type: ignore[var-annotated] def g(name): """ Collision-free version of f. @@ -288,7 +288,7 @@ def _operators_to_graph_def( _add_gradient_scope(shapes, track_blob_names, ops) _fill_missing_operator_names(ops) g = GraphDef() - producing_ops = {} + producing_ops = {} # type: ignore[var-annotated] blobs = set() for op in ops: g.node.extend([_operator_to_node(shapes, op)]) diff --git a/caffe2/contrib/tensorboard/tensorboard_exporter_test.py b/caffe2/contrib/tensorboard/tensorboard_exporter_test.py index 31ef8180fb57f..d015f8e794b25 100644 --- a/caffe2/contrib/tensorboard/tensorboard_exporter_test.py +++ b/caffe2/contrib/tensorboard/tensorboard_exporter_test.py @@ -674,7 +674,7 @@ def test_simple_cnnmodel(self): model.net.RunAllOnGPU() model.param_init_net.RunAllOnGPU() model.AddGradientOperators([loss], skip=1) - track_blob_names = {} + track_blob_names = {} # type: ignore[var-annotated] graph = tb.cnn_to_graph_def( model, track_blob_names=track_blob_names, diff --git a/caffe2/core/nomnigraph/op_gen.py b/caffe2/core/nomnigraph/op_gen.py index fbe1c8da377e5..64989bbcdc122 100755 --- a/caffe2/core/nomnigraph/op_gen.py +++ b/caffe2/core/nomnigraph/op_gen.py @@ -19,7 +19,7 @@ def parse_lines(lines): # Preprocess the macros curr_macro = "" - macros = {} + macros = {} # type: ignore[var-annotated] index = 0 while index < len(lines): @@ -60,7 +60,7 @@ def parse_lines(lines): curr_op = "" # dict of the form # opName : { attributes: [], ... } - ops = {} + ops = {} # type: ignore[var-annotated] # To preserve parsing order for dependencies (for things like init_from) op_list = [] diff --git a/caffe2/distributed/store_ops_test_util.py b/caffe2/distributed/store_ops_test_util.py index 05245be9b2105..7625a32d31466 100644 --- a/caffe2/distributed/store_ops_test_util.py +++ b/caffe2/distributed/store_ops_test_util.py @@ -48,7 +48,7 @@ def _test_set_get(cls, queue, create_store_handler_fn, index, num_procs): @classmethod def test_set_get(cls, create_store_handler_fn): # Queue for assertion errors on subprocesses - queue = Queue() + queue = Queue() # type: ignore[var-annotated] # Start N processes in the background num_procs = 4 diff --git a/caffe2/experiments/python/SparseTransformer.py b/caffe2/experiments/python/SparseTransformer.py index d97f076a7bb3d..e1b09518efe2f 100644 --- a/caffe2/experiments/python/SparseTransformer.py +++ b/caffe2/experiments/python/SparseTransformer.py @@ -175,7 +175,7 @@ def net2list(net_root): def netbuilder(model): print("Welcome to model checker") proto = model.net.Proto() - net_name2id = {} + net_name2id = {} # type: ignore[var-annotated] net_id2node = {} net_root = NetDefNode("net_root", "root", None) diff --git a/caffe2/experiments/python/device_reduce_sum_bench.py b/caffe2/experiments/python/device_reduce_sum_bench.py index 1a795e2fcf0e1..e2113abfca9f2 100644 --- a/caffe2/experiments/python/device_reduce_sum_bench.py +++ b/caffe2/experiments/python/device_reduce_sum_bench.py @@ -68,7 +68,7 @@ def run(self): ["y"] ) - for n in itertools.imap(pow, itertools.cycle([10]), range(10)): + for n in itertools.imap(pow, itertools.cycle([10]), range(10)): # type: ignore[attr-defined] X = np.random.rand(n).astype(np.float32) logger.info('Running benchmark for n = {}'.format(n)) ret = runOpBenchmark(gpu_do, op, inputs=[X]) @@ -83,7 +83,7 @@ def run(self): ["y"] ) - for n in itertools.imap(pow, itertools.cycle([10]), range(10)): + for n in itertools.imap(pow, itertools.cycle([10]), range(10)): # type: ignore[attr-defined] X = np.random.rand(n).astype(np.float32) logger.info('Running benchmark for n = {}'.format(n)) ret = runOpBenchmark(gpu_do, op, inputs=[X]) @@ -98,8 +98,8 @@ def run(self): ["probs", "avgloss"], ) - for n in itertools.imap(pow, itertools.cycle([10]), range(8)): - for D in itertools.imap(pow, itertools.cycle([10]), range(3)): + for n in itertools.imap(pow, itertools.cycle([10]), range(8)): # type: ignore[attr-defined] + for D in itertools.imap(pow, itertools.cycle([10]), range(3)): # type: ignore[attr-defined] X = np.random.rand(n, D).astype(np.float32) label = (np.random.rand(n) * D).astype(np.int32) logger.info('Running benchmark for n = {}, D= {}'.format(n, D)) diff --git a/caffe2/proto/__init__.py b/caffe2/proto/__init__.py index a753f26c53806..cd800e4352bfe 100644 --- a/caffe2/proto/__init__.py +++ b/caffe2/proto/__init__.py @@ -10,6 +10,6 @@ # This has to be done for all python targets, so listing them here from caffe2.proto import caffe2_pb2, metanet_pb2, torch_pb2 try: - from caffe2.caffe2.fb.session.proto import session_pb2 + from caffe2.caffe2.fb.session.proto import session_pb2 # type: ignore[import] except ImportError: pass diff --git a/caffe2/proto/caffe2_legacy_pb2.pyi b/caffe2/proto/caffe2_legacy_pb2.pyi index eaee65471eef0..49f9c741a826d 100644 --- a/caffe2/proto/caffe2_legacy_pb2.pyi +++ b/caffe2/proto/caffe2_legacy_pb2.pyi @@ -13,7 +13,7 @@ import typing_extensions DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ... global___LegacyPadding = LegacyPadding -class _LegacyPadding(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[LegacyPadding], type): +class _LegacyPadding(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[LegacyPadding], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... NOTSET = LegacyPadding.V(0) VALID = LegacyPadding.V(1) diff --git a/caffe2/proto/caffe2_pb2.pyi b/caffe2/proto/caffe2_pb2.pyi index 1258664bee165..f53b75b0c8e8b 100644 --- a/caffe2/proto/caffe2_pb2.pyi +++ b/caffe2/proto/caffe2_pb2.pyi @@ -13,7 +13,7 @@ import typing_extensions DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ... global___DeviceTypeProto = DeviceTypeProto -class _DeviceTypeProto(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DeviceTypeProto], type): +class _DeviceTypeProto(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DeviceTypeProto], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... PROTO_CPU = DeviceTypeProto.V(0) PROTO_CUDA = DeviceTypeProto.V(1) @@ -44,7 +44,7 @@ PROTO_COMPILE_TIME_MAX_DEVICE_TYPES = DeviceTypeProto.V(11) class TensorProto(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor = ... - class _DataType(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DataType], type): + class _DataType(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DataType], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... UNDEFINED = TensorProto.DataType.V(0) FLOAT = TensorProto.DataType.V(1) @@ -79,7 +79,7 @@ class TensorProto(google.protobuf.message.Message): ZERO_COLLISION_HASH = TensorProto.DataType.V(14) REBATCHING_BUFFER = TensorProto.DataType.V(15) - class _SerializationFormat(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SerializationFormat], type): + class _SerializationFormat(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SerializationFormat], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... FMT_PROTOBUF = TensorProto.SerializationFormat.V(0) FMT_BFLOAT16 = TensorProto.SerializationFormat.V(1) @@ -255,7 +255,7 @@ global___TensorShapes = TensorShapes class TensorBoundShape(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor = ... - class _DimType(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DimType], type): + class _DimType(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DimType], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... UNKNOWN = TensorBoundShape.DimType.V(0) CONSTANT = TensorBoundShape.DimType.V(1) @@ -712,7 +712,7 @@ global___DBReaderProto = DBReaderProto class BlobSerializationOptions(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor = ... - class _FloatFormat(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[FloatFormat], type): + class _FloatFormat(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[FloatFormat], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... FLOAT_DEFAULT = BlobSerializationOptions.FloatFormat.V(0) FLOAT_PROTOBUF = BlobSerializationOptions.FloatFormat.V(1) @@ -757,11 +757,11 @@ global___SerializationOptions = SerializationOptions DeviceType = int # These are freedom-patched into caffe2_pb2 in caffe2/proto/__init__.py -CPU: int = DeviceType.PROTO_CPU -CUDA: int = DeviceType.PROTO_CUDA -MKLDNN: int = DeviceType.PROTO_MKLDNN -OPENGL: int = DeviceType.PROTO_OPENGL -OPENCL: int = DeviceType.PROTO_OPENCL -IDEEP: int = DeviceType.PROTO_IDEEP -HIP: int = DeviceType.PROTO_HIP -COMPILE_TIME_MAX_DEVICE_TYPES: int = DeviceType.PROTO_COMPILE_TIME_MAX_DEVICE_TYPES +CPU: int = DeviceType.PROTO_CPU # type: ignore[attr-defined] +CUDA: int = DeviceType.PROTO_CUDA # type: ignore[attr-defined] +MKLDNN: int = DeviceType.PROTO_MKLDNN # type: ignore[attr-defined] +OPENGL: int = DeviceType.PROTO_OPENGL # type: ignore[attr-defined] +OPENCL: int = DeviceType.PROTO_OPENCL # type: ignore[attr-defined] +IDEEP: int = DeviceType.PROTO_IDEEP # type: ignore[attr-defined] +HIP: int = DeviceType.PROTO_HIP # type: ignore[attr-defined] +COMPILE_TIME_MAX_DEVICE_TYPES: int = DeviceType.PROTO_COMPILE_TIME_MAX_DEVICE_TYPES # type: ignore[attr-defined] diff --git a/caffe2/proto/torch_pb2.pyi b/caffe2/proto/torch_pb2.pyi index 33826e2aff5df..4cef07152b5d0 100644 --- a/caffe2/proto/torch_pb2.pyi +++ b/caffe2/proto/torch_pb2.pyi @@ -14,7 +14,7 @@ import typing_extensions DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ... global___ProtoVersion = ProtoVersion -class _ProtoVersion(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ProtoVersion], type): +class _ProtoVersion(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ProtoVersion], type): # type: ignore[type-var] DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ... PROTO_VERSION_NEWEST = ProtoVersion.V(6) class ProtoVersion(metaclass=_ProtoVersion): diff --git a/caffe2/python/allcompare_test.py b/caffe2/python/allcompare_test.py index 22038715f2890..5b18b892510eb 100644 --- a/caffe2/python/allcompare_test.py +++ b/caffe2/python/allcompare_test.py @@ -47,7 +47,7 @@ def allcompare_process(filestore_dir, process_id, data, num_procs): ) model = ModelHelper() - model._rendezvous = rendezvous + model._rendezvous = rendezvous # type: ignore[attr-defined] workspace.FeedBlob("test_data", data) diff --git a/caffe2/python/benchmark_generator.py b/caffe2/python/benchmark_generator.py index 84d0d46490b0f..4127164f41f7c 100644 --- a/caffe2/python/benchmark_generator.py +++ b/caffe2/python/benchmark_generator.py @@ -16,7 +16,7 @@ def parse_kwarg(kwarg_str): - key, value = map(string.strip, kwarg_str.split("=", 1)) + key, value = map(string.strip, kwarg_str.split("=", 1)) # type: ignore[attr-defined] try: value = int(value) except ValueError: diff --git a/caffe2/python/binarysize.py b/caffe2/python/binarysize.py index 39dba40df8a0d..0032cc7b8258c 100644 --- a/caffe2/python/binarysize.py +++ b/caffe2/python/binarysize.py @@ -62,21 +62,21 @@ def GetSymbolTrie(target, nm_command, max_depth): sys.exit(1) # Splits the output to size and function name. data = [] - for line in out.split('\n'): + for line in out.split('\n'): # type: ignore[arg-type] if line: - content = line.split(' ') + content = line.split(' ') # type: ignore[arg-type] if len(content) < 4: # This is a line not representing symbol sizes. skip. continue - data.append([int(content[1]), ' '.join(content[3:])]) + data.append([int(content[1]), ' '.join(content[3:])]) # type: ignore[arg-type] symbol_trie = Trie('') for size, name in data: curr = symbol_trie - for c in name: + for c in name: # type: ignore[attr-defined] if c not in curr.dictionary: curr.dictionary[c] = Trie(curr.name + c) curr = curr.dictionary[c] - curr.size += size + curr.size += size # type: ignore[operator] if len(curr.name) > max_depth: break symbol_trie.size = sum(t.size for t in symbol_trie.dictionary.values()) diff --git a/caffe2/python/brew.py b/caffe2/python/brew.py index f78b885150dd9..af1376dc491e8 100644 --- a/caffe2/python/brew.py +++ b/caffe2/python/brew.py @@ -112,7 +112,7 @@ def scope_wrapper(*args, **kwargs): cur_scope = get_current_scope() new_kwargs.update(cur_scope.get(helper_name, {})) new_kwargs.update(kwargs) - return func(*args, **new_kwargs) + return func(*args, **new_kwargs) # type: ignore[operator] scope_wrapper.__name__ = helper_name return scope_wrapper @@ -136,4 +136,4 @@ def has_helper(self, helper_or_helper_name): # pyre-fixme[6]: incompatible parameter type: expected ModuleType, got HelperWrapper -sys.modules[__name__] = HelperWrapper(sys.modules[__name__]) +sys.modules[__name__] = HelperWrapper(sys.modules[__name__]) # type: ignore[assignment] diff --git a/caffe2/python/brew_test.py b/caffe2/python/brew_test.py index 4973876a80083..7f4849b3d3c62 100644 --- a/caffe2/python/brew_test.py +++ b/caffe2/python/brew_test.py @@ -18,15 +18,15 @@ def setUp(self): def myhelper(model, val=-1): return val - if not brew.has_helper(myhelper): - brew.Register(myhelper) + if not brew.has_helper(myhelper): # type: ignore[attr-defined] + brew.Register(myhelper) # type: ignore[attr-defined] self.myhelper = myhelper def myhelper2(model, val=-1): return val - if not brew.has_helper(myhelper2): - brew.Register(myhelper2) + if not brew.has_helper(myhelper2): # type: ignore[attr-defined] + brew.Register(myhelper2) # type: ignore[attr-defined] self.myhelper2 = myhelper2 self.model = ModelHelper(name="test_model") @@ -98,12 +98,12 @@ def test_arg_scope(self): myhelper2 = self.myhelper2 n = 15 with brew.arg_scope([myhelper], val=n): - res = brew.myhelper(self.model) + res = brew.myhelper(self.model) # type: ignore[attr-defined] self.assertEqual(n, res) with brew.arg_scope([myhelper, myhelper2], val=n): - res1 = brew.myhelper(self.model) - res2 = brew.myhelper2(self.model) + res1 = brew.myhelper(self.model) # type: ignore[attr-defined] + res2 = brew.myhelper2(self.model) # type: ignore[attr-defined] self.assertEqual([n, n], [res1, res2]) def test_arg_scope_single(self): @@ -138,28 +138,28 @@ def test_arg_scope_nested(self): with brew.arg_scope([myhelper], val=-3), \ brew.arg_scope([myhelper], val=-2): with brew.arg_scope([myhelper], val=n): - res = brew.myhelper(self.model) + res = brew.myhelper(self.model) # type: ignore[attr-defined] self.assertEqual(n, res) - res = brew.myhelper(self.model) + res = brew.myhelper(self.model) # type: ignore[attr-defined] self.assertEqual(res, -2) - res = brew.myhelper(self.model, val=15) + res = brew.myhelper(self.model, val=15) # type: ignore[attr-defined] self.model.Validate() self.assertEqual(res, 15) def test_double_register(self): myhelper = self.myhelper with self.assertRaises(AttributeError): - brew.Register(myhelper) + brew.Register(myhelper) # type: ignore[attr-defined] def test_has_helper(self): - self.assertTrue(brew.has_helper(brew.conv)) - self.assertTrue(brew.has_helper("conv")) + self.assertTrue(brew.has_helper(brew.conv)) # type: ignore[attr-defined] + self.assertTrue(brew.has_helper("conv")) # type: ignore[attr-defined] def myhelper3(): pass - self.assertFalse(brew.has_helper(myhelper3)) + self.assertFalse(brew.has_helper(myhelper3)) # type: ignore[attr-defined] def test_model_helper(self): X = np.random.rand(64, 32, 32, 3).astype(np.float32) - 0.5 diff --git a/caffe2/python/cached_reader.py b/caffe2/python/cached_reader.py index 980c4fe40e08e..ee178b9821675 100644 --- a/caffe2/python/cached_reader.py +++ b/caffe2/python/cached_reader.py @@ -113,7 +113,7 @@ def build_cache_step(self, overwrite=False): init_net = core.Net('init') self._init_field_blobs_as_empty(init_net) - with Cluster(), core.NameScope(self.name), TaskGroup() as copy_tg: + with Cluster(), core.NameScope(self.name), TaskGroup() as copy_tg: # type: ignore[attr-defined] pipe(self.original_reader, self.ds.writer(), num_threads=16) copy_step = copy_tg.to_task().get_step() save_net = core.Net('save') diff --git a/caffe2/python/caffe_translator.py b/caffe2/python/caffe_translator.py index 63392c73e3c5e..f1a7b727cb9bd 100644 --- a/caffe2/python/caffe_translator.py +++ b/caffe2/python/caffe_translator.py @@ -9,7 +9,7 @@ import numpy as np # noqa from caffe2.proto import caffe2_pb2, caffe2_legacy_pb2 -from caffe.proto import caffe_pb2 +from caffe.proto import caffe_pb2 # type: ignore[import] from caffe2.python import core, utils, workspace from google.protobuf import text_format @@ -128,7 +128,7 @@ def _RemoveLegacyPad(net, net_params, input_dims): ws = workspace.C.Workspace() external_input = net.op[0].input[0] - ws.create_blob(external_input).feed_blob(dummy_input) + ws.create_blob(external_input).feed_blob(dummy_input) # type: ignore[attr-defined] for param in net_params.protos: ws.create_blob(param.name) \ .feed_blob(utils.Caffe2TensorToNumpyArray(param)) @@ -194,7 +194,7 @@ def _GetInputDims(caffe_net): class TranslatorRegistry(object): - registry_ = {} + registry_ = {} # type: ignore[var-annotated] @classmethod def Register(cls, op_name): @@ -913,7 +913,7 @@ def TranslateReduction(layer, pretrained_blobs, is_test, **kwargs): with open(input_proto) as f: text_format.Merge(f.read(), caffenet) - with open(input_caffemodel, 'rb') as f: + with open(input_caffemodel, 'rb') as f: # type: ignore[assignment] caffenet_pretrained.ParseFromString(f.read()) net, pretrained_params = TranslateModel( caffenet, caffenet_pretrained, is_test=True, @@ -930,9 +930,9 @@ def TranslateReduction(layer, pretrained_blobs, is_test, **kwargs): net.external_output.extend([external_output]) init_net = ConvertTensorProtosToInitNet(pretrained_params, external_input) - with open(output_predict_net, 'wb') as f: + with open(output_predict_net, 'wb') as f: # type: ignore[assignment] f.write(net.SerializeToString()) with open(output_predict_net + 'txt', 'w') as f: f.write(str(net)) - with open(output_init_net, 'wb') as f: + with open(output_init_net, 'wb') as f: # type: ignore[assignment] f.write(init_net.SerializeToString()) diff --git a/caffe2/python/caffe_translator_test.py b/caffe2/python/caffe_translator_test.py index ff24afe975f2a..a9389d495cef8 100644 --- a/caffe2/python/caffe_translator_test.py +++ b/caffe2/python/caffe_translator_test.py @@ -10,7 +10,7 @@ CAFFE_FOUND = False try: - from caffe.proto import caffe_pb2 + from caffe.proto import caffe_pb2 # type: ignore[import] from caffe2.python import caffe_translator CAFFE_FOUND = True except Exception as e: diff --git a/caffe2/python/checkpoint.py b/caffe2/python/checkpoint.py index 872a66c7bd1f7..dc52671ff7a20 100644 --- a/caffe2/python/checkpoint.py +++ b/caffe2/python/checkpoint.py @@ -101,8 +101,8 @@ def __enter__(self): return self def __exit__(self, *args): - self.epoch_group.__exit__() - super(Job, self).__exit__(*args) + self.epoch_group.__exit__() # type: ignore[union-attr] + super(Job, self).__exit__(*args) # type: ignore[misc] def add_stop_condition(self, output): if isinstance(output, core.BlobReference): @@ -342,7 +342,7 @@ def report_checkpoint_stats(self, action_name): Args: action_name: A string of the name of checkpoint operation. """ - all_stats = {} + all_stats = {} # type: ignore[var-annotated] self.collect_checkpoint_stats(all_stats) if self._metadata_handler: self._metadata_handler.report(action_name, all_stats) @@ -452,9 +452,9 @@ def __init__(self, db_prefix, db_type, metadata_handler=None): def _task_group(self, func, *args, **kw): assert self._node_managers is not None, 'init must be called first.' - with TaskGroup(WorkspaceType.GLOBAL) as task_group: + with TaskGroup(WorkspaceType.GLOBAL) as task_group: # type: ignore[attr-defined] for node, manager in self._node_managers: - with Node(node): + with Node(node): # type: ignore[attr-defined] func(manager, *args, **kw) return task_group @@ -474,7 +474,7 @@ def init( return TaskGroup(WorkspaceType.GLOBAL) self._node_managers = [] for node in nodes: - with Node(node): + with Node(node): # type: ignore[attr-defined] manager = CheckpointManager( db_prefix=self._db_prefix, node_name=str(node), @@ -508,7 +508,7 @@ def load_blobs_locally(self, nodes, blob_names, epoch, session): else: self._node_managers = [] for node in nodes: - with Node(node): + with Node(node): # type: ignore[attr-defined] manager = CheckpointManager( db_prefix=self._db_prefix, node_name=str(node), @@ -542,7 +542,7 @@ def get_ckpt_db_name(self, node_name, epoch): checkpoint_db_name: A string. The checkpoint path of the given node and the given epoch. """ - for node, manager in self._node_managers: + for node, manager in self._node_managers: # type: ignore[union-attr] if str(node) == node_name: return db_name(epoch, manager._node_name, manager._db_prefix) @@ -555,8 +555,8 @@ def report_checkpoint_stats(self, action_name): Args: action_name: A string of the name of checkpoint operation. """ - all_stats = {} - for _, manager in self._node_managers: + all_stats = {} # type: ignore[var-annotated] + for _, manager in self._node_managers: # type: ignore[union-attr] manager.collect_checkpoint_stats(all_stats) logger.debug("checkpoint stats: {}".format(all_stats)) if self._metadata_handler: diff --git a/caffe2/python/checkpoint_test.py b/caffe2/python/checkpoint_test.py index 90746747dd981..181e7ea31f443 100644 --- a/caffe2/python/checkpoint_test.py +++ b/caffe2/python/checkpoint_test.py @@ -23,8 +23,8 @@ def build_pipeline(node_id): - with Node('trainer_%d' % node_id): - with Job.current().init_group, Task(): + with Node('trainer_%d' % node_id): # type: ignore[attr-defined] + with Job.current().init_group, Task(): # type: ignore[union-attr] data_arr = Struct(('val', np.array(list(range(10))))) data = ConstRecord(ops, data_arr) ds = Dataset(data, name='dataset:%d' % node_id) @@ -54,9 +54,9 @@ def __init__(self, dest_dir): self.dest_dir = dest_dir def build(self, epoch, checkpoint_manager): - with TaskGroup(WorkspaceType.GLOBAL) as upload_task_group: + with TaskGroup(WorkspaceType.GLOBAL) as upload_task_group: # type: ignore[attr-defined] for node, manager in checkpoint_manager._node_managers: - with Node(str(node)), Task(): + with Node(str(node)), Task(): # type: ignore[attr-defined] src_path = db_name(epoch, manager._node_name, manager._db_prefix) dest_path = os.path.join(self.dest_dir, str(node)) ops.Python((local_copy_op, @@ -66,7 +66,7 @@ def build(self, epoch, checkpoint_manager): class TestCheckpoint(TestCase): def run_with(self, builder): - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: outputs = build_pipeline(node_id=0) output_fetcher = Task(step=core.Net('empty'), outputs=outputs) @@ -130,7 +130,7 @@ def test_ckpt_name_and_load_model_from_ckpts(self): # First, check if the checkpoint name generation mechanism is # correct. checkpoint = MultiNodeCheckpointManager(tmpdir, 'minidb') - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: for node_id in range(num_nodes): build_pipeline(node_id) @@ -153,7 +153,7 @@ def test_ckpt_name_and_load_model_from_ckpts(self): ws = workspace.C.Workspace() session = LocalSession(ws) checkpoint = MultiNodeCheckpointManager(tmpdir, 'minidb') - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: build_pipeline(node_id) job.compile(LocalSession) @@ -171,7 +171,7 @@ def test_ckpt_name_and_load_model_from_ckpts(self): model_blob_names = ['trainer_1/task_2/GivenTensorInt64Fill:0', 'trainer_2/task_2/GivenTensorInt64Fill:0'] checkpoint = MultiNodeCheckpointManager(tmpdir, 'minidb') - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: for node_id in range(num_nodes): build_pipeline(node_id) @@ -189,7 +189,7 @@ def test_ckpt_name_and_load_model_from_ckpts(self): session=session)) # Check that all the model blobs are loaded. for blob_name in model_blob_names: - self.assertTrue(ws.has_blob(blob_name)) + self.assertTrue(ws.has_blob(blob_name)) # type: ignore[attr-defined] self.assertEquals( ws.fetch_blob(blob_name), np.array([EXPECTED_TOTALS[epoch - 1]])) @@ -218,7 +218,7 @@ def test_upload_checkpoint(self): ws = workspace.C.Workspace() session = LocalSession(ws) checkpoint = MultiNodeCheckpointManager(tmpdir, 'minidb') - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: build_pipeline(node_id) job.compile(LocalSession) @@ -252,7 +252,7 @@ def test_ckpt_save_failure(self): ws = workspace.C.Workspace() session = LocalSession(ws) checkpoint = MultiNodeCheckpointManager(tmpdir, 'minidb') - with Cluster(): + with Cluster(): # type: ignore[attr-defined] with Job() as job: build_pipeline(node_id) job.compile(LocalSession) @@ -282,7 +282,7 @@ def test_download_group_simple(self): # All blob values are initialized as 1.0, after download_net executed # we expect to see download result is the same as training result. with Job() as job: - with Node("trainer:0"): + with Node("trainer:0"): # type: ignore[attr-defined] with job.init_group: Task(step=model.param_init_net) with job.epoch_group: diff --git a/caffe2/python/cnn.py b/caffe2/python/cnn.py index a0fd52e1fdbc3..75f642513b0bb 100644 --- a/caffe2/python/cnn.py +++ b/caffe2/python/cnn.py @@ -76,7 +76,7 @@ def PadImage(self, blob_in, blob_out, **kwargs): self.net.PadImage(blob_in, blob_out, **kwargs) def ConvNd(self, *args, **kwargs): - return brew.conv_nd( + return brew.conv_nd( # type: ignore[misc] self, *args, use_cudnn=self.use_cudnn, @@ -98,7 +98,7 @@ def Conv(self, *args, **kwargs): ) def ConvTranspose(self, *args, **kwargs): - return brew.conv_transpose( + return brew.conv_transpose( # type: ignore[misc] self, *args, use_cudnn=self.use_cudnn, @@ -120,7 +120,7 @@ def GroupConv(self, *args, **kwargs): ) def GroupConv_Deprecated(self, *args, **kwargs): - return brew.group_conv_deprecated( + return brew.group_conv_deprecated( # type: ignore[misc] self, *args, use_cudnn=self.use_cudnn, @@ -146,29 +146,29 @@ def FC_Sparse(self, *args, **kwargs): return brew.fc_sparse(self, *args, **kwargs) def Dropout(self, *args, **kwargs): - return brew.dropout( + return brew.dropout( # type: ignore[misc] self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs ) def LRN(self, *args, **kwargs): - return brew.lrn( + return brew.lrn( # type: ignore[misc] self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs ) def Softmax(self, *args, **kwargs): - return brew.softmax(self, *args, use_cudnn=self.use_cudnn, **kwargs) + return brew.softmax(self, *args, use_cudnn=self.use_cudnn, **kwargs) # type: ignore[misc] def SpatialBN(self, *args, **kwargs): - return brew.spatial_bn(self, *args, order=self.order, **kwargs) + return brew.spatial_bn(self, *args, order=self.order, **kwargs) # type: ignore[misc] def SpatialGN(self, *args, **kwargs): - return brew.spatial_gn(self, *args, order=self.order, **kwargs) + return brew.spatial_gn(self, *args, order=self.order, **kwargs) # type: ignore[misc] def InstanceNorm(self, *args, **kwargs): - return brew.instance_norm(self, *args, order=self.order, **kwargs) + return brew.instance_norm(self, *args, order=self.order, **kwargs) # type: ignore[misc] def Relu(self, *args, **kwargs): - return brew.relu( + return brew.relu( # type: ignore[misc] self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs ) @@ -187,7 +187,7 @@ def Sum(self, *args, **kwargs): return brew.sum(self, *args, **kwargs) def Transpose(self, *args, **kwargs): - return brew.transpose(self, *args, use_cudnn=self.use_cudnn, **kwargs) + return brew.transpose(self, *args, use_cudnn=self.use_cudnn, **kwargs) # type: ignore[misc] def Iter(self, *args, **kwargs): return brew.iter(self, *args, **kwargs) @@ -196,15 +196,15 @@ def Accuracy(self, *args, **kwargs): return brew.accuracy(self, *args, **kwargs) def MaxPool(self, *args, **kwargs): - return brew.max_pool( + return brew.max_pool( # type: ignore[misc] self, *args, use_cudnn=self.use_cudnn, order=self.order, **kwargs ) def MaxPoolWithIndex(self, *args, **kwargs): - return brew.max_pool_with_index(self, *args, order=self.order, **kwargs) + return brew.max_pool_with_index(self, *args, order=self.order, **kwargs) # type: ignore[misc] def AveragePool(self, *args, **kwargs): - return brew.average_pool( + return brew.average_pool( # type: ignore[misc] self, *args, use_cudnn=self.use_cudnn, order=self.order, **kwargs ) @@ -233,7 +233,7 @@ def CPU(self): return device_option @property - def GPU(self, gpu_id=0): + def GPU(self, gpu_id=0): # type: ignore[misc] device_option = caffe2_pb2.DeviceOption() device_option.device_type = workspace.GpuDeviceType device_option.device_id = gpu_id diff --git a/caffe2/python/context_test.py b/caffe2/python/context_test.py index 0ca36e49ac807..3cedbc70a3317 100644 --- a/caffe2/python/context_test.py +++ b/caffe2/python/context_test.py @@ -21,7 +21,7 @@ class TestContext(test_util.TestCase): def use_my_context(self): try: for _ in range(100): - with MyContext() as a: + with MyContext() as a: # type: ignore[attr-defined] for _ in range(100): self.assertTrue(MyContext.current() == a) except Exception as e: @@ -29,7 +29,7 @@ def use_my_context(self): def testMultiThreaded(self): threads = [] - self._exceptions = [] + self._exceptions = [] # type: ignore[var-annotated] for _ in range(8): thread = Thread(target=self.use_my_context) thread.start() @@ -56,12 +56,12 @@ def testDefaultCurrent(self): self.assertIsInstance(DefaultMyContext.current(), DefaultMyContext) def testNestedContexts(self): - with MyContext() as ctx1: - with DefaultMyContext() as ctx2: + with MyContext() as ctx1: # type: ignore[attr-defined] + with DefaultMyContext() as ctx2: # type: ignore[attr-defined] self.assertEqual(DefaultMyContext.current(), ctx2) self.assertEqual(MyContext.current(), ctx1) def testChildClasses(self): - with ChildMyContext() as ctx: + with ChildMyContext() as ctx: # type: ignore[attr-defined] self.assertEqual(ChildMyContext.current(), ctx) self.assertEqual(MyContext.current(), ctx) diff --git a/caffe2/python/control_ops_grad.py b/caffe2/python/control_ops_grad.py index a0e85f4d0bc15..a071cb4701a7e 100644 --- a/caffe2/python/control_ops_grad.py +++ b/caffe2/python/control_ops_grad.py @@ -119,7 +119,7 @@ def gen_do_gradient(op, g_output): new_op_outputs.append(outer_grad_input_name) g_input.append(outer_grad_input_name) else: - g_input.append(None) + g_input.append(None) # type: ignore[arg-type] new_op_inputs = [] overwritten_names = set() @@ -173,7 +173,7 @@ def dedupe_g_output(op, g_output): # deduplication grad_ops = [] deduped_g_output = [] - init_grad_map = {} + init_grad_map = {} # type: ignore[var-annotated] for output_name, grad_name in zip(op.output, g_output): if not grad_name: deduped_g_output.append(grad_name) @@ -297,7 +297,7 @@ def _prepare_gradient_while_ops( del gradient_while_def.control_input[:] del gradient_while_def.input[:] gradient_while_def.input.extend( - [str(cond_blob).encode('utf-8')] + list(input_names)) + [str(cond_blob).encode('utf-8')] + list(input_names)) # type: ignore[arg-type] del gradient_while_def.output[:] gradient_while_def.output.extend(output_names) gradient_while_def.is_gradient_op = True diff --git a/caffe2/python/control_ops_util.py b/caffe2/python/control_ops_util.py index cfff82de318bd..0b0a2b9bf41ae 100644 --- a/caffe2/python/control_ops_util.py +++ b/caffe2/python/control_ops_util.py @@ -164,7 +164,7 @@ def add_while_op( loop_outputs = [core.BlobReference(name=b, net=None) for b in output_blob_names] while_inputs = [cond_blob] + loop_inputs - while_outputs = [] + loop_outputs + while_outputs = [] + loop_outputs # type: ignore[operator] do_loop_body_net = core.Net('do_loop_body_net') diff --git a/caffe2/python/convnet_benchmarks.py b/caffe2/python/convnet_benchmarks.py index 3aac78c18df16..004ec834f1d33 100644 --- a/caffe2/python/convnet_benchmarks.py +++ b/caffe2/python/convnet_benchmarks.py @@ -630,7 +630,7 @@ def Benchmark(model_gen, arg): "{0}_init_batch_{1}.pbtxt".format(arg.model, arg.batch_size), "w" ) as fid: fid.write(str(model.param_init_net.Proto())) - with open("{0}.pbtxt".format(arg.model, arg.batch_size), "w") as fid: + with open("{0}.pbtxt".format(arg.model, arg.batch_size), "w") as fid: # type: ignore[str-format] fid.write(str(model.net.Proto())) workspace.RunNetOnce(model.param_init_net) diff --git a/caffe2/python/core.py b/caffe2/python/core.py index 5e574b9ec7d3d..6ae35ad89296c 100644 --- a/caffe2/python/core.py +++ b/caffe2/python/core.py @@ -157,7 +157,7 @@ def InferBlobDevices(net): for op in net.Proto().op: op_device = op.device_option if op_device is None: - op_device = caffe2_pb2.DeviceOption(caffe2_pb2.CPU) + op_device = caffe2_pb2.DeviceOption(caffe2_pb2.CPU) # type: ignore[misc] # TODO: T18892922, use device annotations for b in op.output: mapping[b] = op_device @@ -178,7 +178,7 @@ def InferOpBlobDevicesAsDict(op): def InferOpBlobDevices(op): - device_info = C.infer_op_input_output_device(op.SerializeToString()) + device_info = C.infer_op_input_output_device(op.SerializeToString()) # type: ignore[attr-defined] input_info = [] output_info = [] for dev_str in device_info[0]: @@ -298,7 +298,7 @@ def __getattr__(self, op_type): raise AttributeError( 'Method ' + op_type + ' is not a registered operator.' + ' Did you mean: [' + - ",".join(workspace.C.nearby_opnames(op_type)) + ']' + ",".join(workspace.C.nearby_opnames(op_type)) + ']' # type: ignore[attr-defined] ) return lambda *args, **kwargs: self._CreateAndAddToNet( op_type, *args, **kwargs) @@ -436,9 +436,9 @@ def _RegisterPythonImpl( if isinstance(grad_f, tuple): grad_f = grad_f[0](*grad_f[1], **grad_f[2]) - token = C.register_python_op(f, pass_workspace, '') + token = C.register_python_op(f, pass_workspace, '') # type: ignore[attr-defined] if grad_f: - C.register_python_gradient_op(token, grad_f) + C.register_python_gradient_op(token, grad_f) # type: ignore[attr-defined] return token @@ -511,10 +511,10 @@ def __init__(self, operators): # a list of operators that generates its gradient together with the # gradient name. self.ssa = [] - self.input_usages = defaultdict(lambda: defaultdict(list)) + self.input_usages = defaultdict(lambda: defaultdict(list)) # type: ignore[var-annotated] self.frontier = defaultdict(int) self.gradient_frontier = {} - self.gradient_generators = defaultdict(lambda: defaultdict(list)) + self.gradient_generators = defaultdict(lambda: defaultdict(list)) # type: ignore[var-annotated] self.out_version_history = defaultdict(list) self.in_version_history = defaultdict(list) @@ -640,7 +640,7 @@ def AppendSparseGenerators(self, sparse_generators): assert(g1 == g2) assert dev_1 == dev_2, ( "Unequal devices for sparse generators: " - "{} and {}".format(dev1, dev2) + "{} and {}".format(dev1, dev2) # type: ignore[name-defined] ) assert(op1_i is None or op2_i is None) assert(op1_v is None or op2_v is None) @@ -656,8 +656,8 @@ def BuildGradientGenerators( # NOQA self, fwd_op_idx, gradient_ops, g_output, g_input): """Updates gradient_generators and gradient_frontier""" forward_op, in_versions, out_versions = self.ssa[fwd_op_idx] - locally_generated_blobs = [] - sparse_generators = defaultdict(lambda: defaultdict(list)) + locally_generated_blobs = [] # type: ignore[var-annotated] + sparse_generators = defaultdict(lambda: defaultdict(list)) # type: ignore[var-annotated] for grad_op in gradient_ops: # (1) check that inputs are valid @@ -1100,7 +1100,7 @@ def GetBackwardPass(self, ys): isinstance(val, binary_type)): grad_out = BlobReference(val) else: - grad_out = GradientSlice(BlobReference(val[0]), + grad_out = GradientSlice(BlobReference(val[0]), # type: ignore[assignment] BlobReference(val[1])) all_input_to_grad_out[BlobReference(key)] = grad_out return all_gradient_ops, all_input_to_grad_out @@ -1108,7 +1108,7 @@ def GetBackwardPass(self, ys): class GradientRegistry(object): """GradientRegistry holds the mapping from operators to their gradients.""" - gradient_registry_ = {} + gradient_registry_ = {} # type: ignore[var-annotated] @classmethod def RegisterGradient(cls, op_type): @@ -1125,24 +1125,24 @@ def _GetGradientForOpCC(cls, op_def, g_output): # TODO(tulloch) - Propagate GradientWrapper up through the stack. def from_untyped(grad): if grad is None: - w = C.GradientWrapper() + w = C.GradientWrapper() # type: ignore[attr-defined] assert w.is_empty() return w try: (indices, values) = grad - w = C.GradientWrapper() + w = C.GradientWrapper() # type: ignore[attr-defined] w.indices = indices w.values = values assert w.is_sparse() return w except ValueError: - w = C.GradientWrapper() + w = C.GradientWrapper() # type: ignore[attr-defined] w.dense = grad assert w.is_dense() return w g_output = [from_untyped(grad) for grad in g_output] - grad_defs_str, g_input = C.get_gradient_defs( + grad_defs_str, g_input = C.get_gradient_defs( # type: ignore[attr-defined] op_def.SerializeToString(), g_output) def to_untyped(grad_wrapper): @@ -1448,14 +1448,14 @@ def _recover_record_by_prefix(names, prefix=''): class Net(object): - _net_names_used = set() - operator_registry_ = {} + _net_names_used = set() # type: ignore[var-annotated] + operator_registry_ = {} # type: ignore[var-annotated] @staticmethod def current_prefix(): from caffe2.python.net_builder import NetBuilder builder = NetBuilder.current(required=False) - return builder.name if builder else '' + return builder.name if builder else '' # type: ignore[has-type] @staticmethod def _get_next_net_name(basename): @@ -1633,9 +1633,9 @@ def do_set(operator): return do_set(self.GivenTensorIntFill) elif array.dtype == np.int64: return do_set(self.GivenTensorInt64Fill) - elif array.dtype == np.str: + elif array.dtype == np.str: # type: ignore[attr-defined] return do_set(self.GivenTensorStringFill) - elif array.dtype == np.bool: + elif array.dtype == np.bool: # type: ignore[attr-defined] return do_set(self.GivenTensorBoolFill) else: return do_set(self.GivenTensorFill) @@ -2090,13 +2090,13 @@ def AddScopedExternalOutputs(self, *outputs): # This returns a reference to the observer def AddObserver(self, observer_type): - return C.add_observer_to_net(self._net.name, observer_type) + return C.add_observer_to_net(self._net.name, observer_type) # type: ignore[attr-defined] def RemoveObserver(self, observer): - C.remove_observer_from_net(self._net.name, observer) + C.remove_observer_from_net(self._net.name, observer) # type: ignore[attr-defined] def NumObservers(self): - return C.num_observers_on_net(self._net.name) + return C.num_observers_on_net(self._net.name) # type: ignore[attr-defined] @property def external_inputs(self): @@ -2266,7 +2266,7 @@ def __getattr__(self, op_type): raise AttributeError( 'Method ' + op_type + ' is not a registered operator.' + ' Did you mean: [' + - ",".join(workspace.C.nearby_opnames(op_type)) + ']' + ",".join(workspace.C.nearby_opnames(op_type)) + ']' # type: ignore[attr-defined] ) return lambda *args, **kwargs: self._CreateAndAddToSelf( op_type, *args, **kwargs) @@ -2479,7 +2479,7 @@ def InjectCrossDeviceCopies(net, blob_to_device=None, blob_remap=None, # remapping of input blobs for each op. if blob_remap is None: blob_remap = {} - temp_remap = {} + temp_remap = {} # type: ignore[var-annotated] net_option = net._net.device_option or caffe2_pb2.DeviceOption() # if external_inputs have device remappings generated by previous nets, @@ -2606,7 +2606,7 @@ def InjectDeviceCopiesAmongNets(nets, blob_to_device_init=None): "nets {} should be a list of nets.".format(str(nets)) # A holistic blob to device mapping. blob_to_device = blob_to_device_init or {} - blob_remap = {} + blob_remap = {} # type: ignore[var-annotated] new_nets = [] for net in nets: @@ -2664,7 +2664,7 @@ def _add_net_to_dict(net_dict, net): class ExecutionStep(object): - _step_names_used = set() + _step_names_used = set() # type: ignore[var-annotated] @staticmethod def _get_next_step_name(basename): @@ -2679,7 +2679,7 @@ def _get_next_step_name(basename): def __init__(self, name, nets=None, num_iter=None): self._step = caffe2_pb2.ExecutionStep() self._step.name = name or ExecutionStep._get_next_step_name('step') - self._net_dict = OrderedDict() + self._net_dict = OrderedDict() # type: ignore[var-annotated] self._is_used = False self._substeps = [] if nets is not None: @@ -2906,7 +2906,7 @@ def AddStep(self, step): self._plan.execution_step.add().CopyFrom(step.Proto()) self._steps.append(step) # nets need to be added to the plan in order of usage - net_list = [] + net_list = [] # type: ignore[var-annotated] add_nets_in_order(step, net_list) self.AddNets([step.get_net(n) for n in net_list]) @@ -2932,7 +2932,7 @@ def create_from_proto(cls, plan_proto): del plan._plan.network[:] del plan._plan.execution_step[:] - net_obj_dict = {} + net_obj_dict = {} # type: ignore[var-annotated] net_proto_dict = {} for net_proto in plan_proto.network: assert net_proto.name not in net_proto_dict @@ -2955,7 +2955,7 @@ def to_execution_step(step_or_nets, default_name=None): if not default_name and hasattr(step_or_nets, 'name'): default_name = step_or_nets.name if isinstance(step_or_nets, NetBuilder): - stop_blob = step_or_nets._stop_blob + stop_blob = step_or_nets._stop_blob # type: ignore[has-type] step_or_nets = step_or_nets.get() return execution_step( default_name, step_or_nets, should_stop_blob=stop_blob) @@ -3057,7 +3057,7 @@ def _extract_stacktrace(): # Its important to extract information from the frame here # as frame's current line most probably will change later. result.append((frame.f_code.co_filename, frame.f_lineno, frame.f_code.co_name)) - frame = frame.f_back + frame = frame.f_back # type: ignore[assignment] return result diff --git a/caffe2/python/core_test.py b/caffe2/python/core_test.py index 523f14c6135f5..a12022a2e3bb2 100644 --- a/caffe2/python/core_test.py +++ b/caffe2/python/core_test.py @@ -255,25 +255,25 @@ class TestExternalInputs(test_util.TestCase): def testAddExternalInputShouldRaiseIfDuplicate(self): net = core.Net("test") net.AddExternalInput( - schema.Struct(("x", schema.Scalar(np.float))), + schema.Struct(("x", schema.Scalar(np.float))), # type: ignore[attr-defined] ) with self.assertRaises(AssertionError): net.AddExternalInput( - schema.Struct(("x", schema.Scalar(np.float))), + schema.Struct(("x", schema.Scalar(np.float))), # type: ignore[attr-defined] ) def testAddExternalInputShouldRaiseIfDuplicateInSameCall(self): net = core.Net("test") with self.assertRaises(AssertionError): net.AddExternalInput( - schema.Struct(("x", schema.Scalar(np.float))), - schema.Struct(("x", schema.Scalar(np.float))), + schema.Struct(("x", schema.Scalar(np.float))), # type: ignore[attr-defined] + schema.Struct(("x", schema.Scalar(np.float))), # type: ignore[attr-defined] ) def testSetInputRecordWithBlobs(self): net = core.Net("test") record = schema.NewRecord(net, schema.Struct( - ("x", schema.Scalar(np.float)), + ("x", schema.Scalar(np.float)), # type: ignore[attr-defined] )) input_record = net.set_input_record(record) self.assertTrue(net.BlobIsDefined(input_record.x())) @@ -281,7 +281,7 @@ def testSetInputRecordWithBlobs(self): def testSetInputRecordWithoutBlobs(self): net = core.Net("test") - record = schema.Struct(("x", schema.Scalar(np.float))) + record = schema.Struct(("x", schema.Scalar(np.float))) # type: ignore[attr-defined] input_record = net.set_input_record(record) self.assertTrue(net.BlobIsDefined(input_record.x())) self.assertIn(input_record.x(), net.external_inputs) @@ -491,8 +491,8 @@ def op_name_check(self, net, cf, line, func): def test_operator_constructor_traceback(self): net = core.Net("test") a, b = net.AddExternalInput("a", "b") - net.Mul([a, b], "c"); cf = currentframe(); line = cf.f_lineno - func = cf.f_code.co_name + net.Mul([a, b], "c"); cf = currentframe(); line = cf.f_lineno # type: ignore[union-attr] + func = cf.f_code.co_name # type: ignore[union-attr] with self.assertRaises(Exception): workspace.RunNetOnce(net) with self.assertRaises(Exception): @@ -503,8 +503,8 @@ def test_operator_runtime_traceback(self): net = core.Net("test") a = net.AddExternalInput("a") workspace.blobs[a] = np.array([1, 2, 3], dtype=np.float32) - net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno - func = cf.f_code.co_name + net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno # type: ignore[union-attr] + func = cf.f_code.co_name # type: ignore[union-attr] with self.assertRaises(Exception): workspace.RunNetOnce(net) workspace.CreateNet(net) @@ -515,8 +515,8 @@ def test_operator_runtime_traceback(self): def test_c_workspace_constructor(self): net = core.Net("test") a, b = net.AddExternalInput("a", "b") - net.Mul([a, b], "c"); cf = currentframe(); line = cf.f_lineno - func = cf.f_code.co_name + net.Mul([a, b], "c"); cf = currentframe(); line = cf.f_lineno # type: ignore[union-attr] + func = cf.f_code.co_name # type: ignore[union-attr] ws = workspace.C.Workspace() with self.assertRaises(Exception): ws.run(net) @@ -527,8 +527,8 @@ def test_c_workspace_constructor(self): def test_c_workspace_runtime(self): net = core.Net("test") a = net.AddExternalInput("a") - net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno - func = cf.f_code.co_name + net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno # type: ignore[union-attr] + func = cf.f_code.co_name # type: ignore[union-attr] ws = workspace.C.Workspace() ws.create_blob(str(a)).feed(np.array([1, 2, 3], dtype=np.float32)) ws.create_net(net) @@ -540,8 +540,8 @@ def test_async_exception_handling(self): net = core.Net("test") net.Proto().type = 'dag' # this runs operators on background threads a = net.AddExternalInput("a") - net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno - func = cf.f_code.co_name + net.Split(a, ["b", "c"], axis=0); cf = currentframe(); line = cf.f_lineno # type: ignore[union-attr] + func = cf.f_code.co_name # type: ignore[union-attr] workspace.FeedBlob(a, np.array([1, 2, 3], dtype=np.float32)) with self.assertRaises(Exception) as enforceNotMet: workspace.RunNetOnce(net) @@ -553,7 +553,7 @@ class TestCreatePlan(test_util.TestCase): def test_create_plan_from_proto_correctly(self): from caffe2.python.net_builder import ops - with Node('trainer'), Task(name='my_task', num_instances=2) as task: + with Node('trainer'), Task(name='my_task', num_instances=2) as task: # type: ignore[attr-defined] with ops.task_init(): globl = ops.Const(0) with ops.task_instance_init(): diff --git a/caffe2/python/data_parallel_model.py b/caffe2/python/data_parallel_model.py index 8537e1ee3cf19..277fb48356504 100644 --- a/caffe2/python/data_parallel_model.py +++ b/caffe2/python/data_parallel_model.py @@ -305,8 +305,8 @@ def Parallelize( non_datapar_grads ) model_helper_obj._device_grouped_blobs.update(gradients_grouped) - model_helper_obj._grad_names = list(viewkeys(gradients_grouped)) - model_helper_obj._losses_by_gpu = losses_by_gpu + model_helper_obj._grad_names = list(viewkeys(gradients_grouped)) # type: ignore[attr-defined] + model_helper_obj._losses_by_gpu = losses_by_gpu # type: ignore[attr-defined] _InferBlobDevice(model_helper_obj) @@ -348,7 +348,7 @@ def Parallelize( else: log.info("Calling optimizer builder function") optimizer = optimizer_builder_fun(model_helper_obj) - model_helper_obj._optimizer = optimizer + model_helper_obj._optimizer = optimizer # type: ignore[attr-defined] (sync_blobs, sync_names) = _ComputeBlobsToSync(model_helper_obj) sync_blobs_grouped = _GroupByDevice( @@ -402,11 +402,11 @@ def Parallelize( _AddDynamicMemoryOptimization(model_helper_obj, blobs_to_keep, devices) - model_helper_obj._data_parallel_model_init_nets = [ + model_helper_obj._data_parallel_model_init_nets = [ # type: ignore[attr-defined] model_helper_obj.param_init_net, ] - model_helper_obj._data_parallel_model_nets = [ + model_helper_obj._data_parallel_model_nets = [ # type: ignore[attr-defined] model_helper_obj.net ] _AddBarrierToModelNets(model_helper_obj, barrier_net_timeout_sec) @@ -474,17 +474,17 @@ def Parallelize_BMUF( log.warning("** Only {} GPUs available, GPUs {} requested".format( workspace.NumGpuDevices(), devices)) break - model_helper_obj._device_type = workspace.GpuDeviceType - model_helper_obj._device_prefix = "gpu" + model_helper_obj._device_type = workspace.GpuDeviceType # type: ignore[attr-defined] + model_helper_obj._device_prefix = "gpu" # type: ignore[attr-defined] else: - model_helper_obj._device_type = caffe2_pb2.CPU - model_helper_obj._device_prefix = "cpu" + model_helper_obj._device_type = caffe2_pb2.CPU # type: ignore[attr-defined] + model_helper_obj._device_prefix = "cpu" # type: ignore[attr-defined] model_helper_obj._devices = devices - model_helper_obj._rendezvous = rendezvous - model_helper_obj._sync_barrier_net = None - model_helper_obj._broadcast_context = None - model_helper_obj._shared_model = False + model_helper_obj._rendezvous = rendezvous # type: ignore[attr-defined] + model_helper_obj._sync_barrier_net = None # type: ignore[attr-defined] + model_helper_obj._broadcast_context = None # type: ignore[attr-defined] + model_helper_obj._shared_model = False # type: ignore[attr-defined] master_dev_opt = core.DeviceOption(model_helper_obj._device_type, master_device) # question: rendezvous structure @@ -510,14 +510,14 @@ def Parallelize_BMUF( # A net for initializing global model parameters. Its called once in the # same step as net parameters initialization. - model_helper_obj._global_model_init_net = core.Net('global_model_init') + model_helper_obj._global_model_init_net = core.Net('global_model_init') # type: ignore[attr-defined] model_helper_obj._global_model_init_net.Proto().type = net_type model_helper_obj._global_model_init_net.Proto().num_workers = \ num_workers # A net for computing final parameter updates. Its will run once after # running net (local models updates) for `num_local_iterations` times. - model_helper_obj._global_model_param_updates_net = core.Net('global_model') + model_helper_obj._global_model_param_updates_net = core.Net('global_model') # type: ignore[attr-defined] model_helper_obj._global_model_param_updates_net.Proto().type = net_type model_helper_obj._global_model_param_updates_net.Proto().num_workers = \ num_workers @@ -534,7 +534,7 @@ def _v_prev(param): # Keep track of params that were in the model before: they are not # data parallel, so we need to handle them separately non_datapar_params = copy.copy(model_helper_obj.params) - model_helper_obj._losses_by_gpu = {} + model_helper_obj._losses_by_gpu = {} # type: ignore[attr-defined] def _InitializeModels(gpu_id): input_builder_fun(model_helper_obj) @@ -577,10 +577,10 @@ def _InitializeParamUpdate(gpu_id): viewkeys(model_helper_obj._device_grouped_blobs) ) if warmup_iterations is not None: - model_helper_obj._warmup_iterations = warmup_iterations + model_helper_obj._warmup_iterations = warmup_iterations # type: ignore[attr-defined] # A net for broadcasting gpu-0 (master shard) parameters after # running net for `warmup_iterartions`. - model_helper_obj._warmup_broadcast = core.Net('warmup-broadcast') + model_helper_obj._warmup_broadcast = core.Net('warmup-broadcast') # type: ignore[attr-defined] model_helper_obj._warmup_broadcast.Proto().type = net_type model_helper_obj._warmup_broadcast.Proto().num_workers = \ num_workers @@ -708,12 +708,12 @@ def _InitializeParamUpdate(gpu_id): model_helper_obj, model_helper_obj._losses_by_gpu, devices ) - model_helper_obj._data_parallel_model_init_nets = [ + model_helper_obj._data_parallel_model_init_nets = [ # type: ignore[attr-defined] model_helper_obj.param_init_net, model_helper_obj._global_model_init_net ] - model_helper_obj._data_parallel_model_nets = [ + model_helper_obj._data_parallel_model_nets = [ # type: ignore[attr-defined] model_helper_obj.net, (model_helper_obj._global_model_param_updates_net, 1) ] @@ -1646,7 +1646,7 @@ def _GroupByDevice(model, devices, params, non_data_params): Groups blobs by device, returning a map of [blobname] = {0: BlobRef, 1: ..}. Returns ordered dictionary, ensuring the original order. ''' - grouped = OrderedDict() + grouped = OrderedDict() # type: ignore[var-annotated] # Only consider params that were created to be "data parallel" params = params[len(non_data_params):] @@ -1694,12 +1694,12 @@ def _ComputeBlobsToSync(model): We sync all blobs that are generated by param init net and are 'data parallel', i.e assigned to a device ''' - sync_names = set() + sync_names = set() # type: ignore[var-annotated] # We don't sync params if the model is shared if model._shared_model: blobs_to_sync = [str(p) for p in model.GetComputedParams('')] - sync_names = [stripBlobName(p) for p in blobs_to_sync] + sync_names = [stripBlobName(p) for p in blobs_to_sync] # type: ignore[assignment] else: blobs_to_sync = [] @@ -1728,7 +1728,7 @@ def extract_sort_key(b): list(set(blobs_to_sync)), key=extract_sort_key) - blobs_to_sync = [core.BlobReference(b) for b in blobs_to_sync] + blobs_to_sync = [core.BlobReference(b) for b in blobs_to_sync] # type: ignore[misc] return (blobs_to_sync, sync_names) @@ -1947,7 +1947,7 @@ def _InterleaveOps(model): assert num_devices * num_ops_per_dev == len(orig_ops), \ 'Number of ops per device in original net is not uniform' new_ops = [] - ops = {d: [] for d in range(num_devices)} + ops = {d: [] for d in range(num_devices)} # type: ignore[var-annotated] for op in orig_ops: ops[op.device_option.device_id].append(op) @@ -1969,18 +1969,18 @@ def _CPUInterDeviceBatchNormalization(model): orig_ops = list(model.net.Proto().op) new_ops = [] num_devices = len(model._devices) - batch_norm_ops = [] - injected_ops = [] + batch_norm_ops = [] # type: ignore[var-annotated] + injected_ops = [] # type: ignore[var-annotated] spatial_bn_phase = False - sums_blobs = [] - sumsq_blobs = [] + sums_blobs = [] # type: ignore[var-annotated] + sumsq_blobs = [] # type: ignore[var-annotated] name = [] input_blob_name = None spatial_bn_gradient_phase = False - scale_grad_blobs = [] - bias_grad_blobs = [] + scale_grad_blobs = [] # type: ignore[var-annotated] + bias_grad_blobs = [] # type: ignore[var-annotated] def _cpuReduce(param, input_blobs, destination_blobs): """ @@ -2006,11 +2006,11 @@ def _cpuReduce(param, input_blobs, destination_blobs): new_ops.append( core.CreateOperator("Sum", sums_blobs, - input_blob_name + "_sums_combined")) + input_blob_name + "_sums_combined")) # type: ignore[operator] new_ops.append( core.CreateOperator("Sum", sumsq_blobs, - input_blob_name + "_sumsq_combined")) + input_blob_name + "_sumsq_combined")) # type: ignore[operator] new_ops.extend(batch_norm_ops) injected_ops = [] batch_norm_ops = [] @@ -2044,9 +2044,9 @@ def _cpuReduce(param, input_blobs, destination_blobs): core.CreateOperator( "ChannelStats", name, - [name + "_sums", name + "_sumsq"])) - sums_blobs.append(name + "_sums") - sumsq_blobs.append(name + "_sumsq") + [name + "_sums", name + "_sumsq"])) # type: ignore[operator] + sums_blobs.append(name + "_sums") # type: ignore[operator] + sumsq_blobs.append(name + "_sumsq") # type: ignore[operator] op.input.append(input_blob_name + "_sums_combined") op.input.append(input_blob_name + "_sumsq_combined") op.arg.extend([utils.MakeArgument("num_batches", num_devices)]) @@ -2074,18 +2074,18 @@ def _GPUInterDeviceBatchNormalization(model): orig_ops = list(model.net.Proto().op) new_ops = [] num_devices = len(model._devices) - batch_norm_ops = [] - injected_ops = [] + batch_norm_ops = [] # type: ignore[var-annotated] + injected_ops = [] # type: ignore[var-annotated] spatial_bn_phase = False - sums_blobs = [] - sumsq_blobs = [] + sums_blobs = [] # type: ignore[var-annotated] + sumsq_blobs = [] # type: ignore[var-annotated] name = [] input_blob_name = None spatial_bn_gradient_phase = False - scale_grad_blobs = [] - bias_grad_blobs = [] + scale_grad_blobs = [] # type: ignore[var-annotated] + bias_grad_blobs = [] # type: ignore[var-annotated] master_device = "cpu_0" master_device_option = core.DeviceOption(caffe2_pb2.CPU) @@ -2190,12 +2190,12 @@ def _gpuReduce(param, num_devices, master_device, result_blobs=None): core.CreateOperator( "ChannelStats", name, - [name + "_sums", name + "_sumsq"], + [name + "_sums", name + "_sumsq"], # type: ignore[operator] device_option=device_option)) - sums_blobs.append(name + "_sums") - sumsq_blobs.append(name + "_sumsq") - op.input.append(name + "_sums_combined") - op.input.append(name + "_sumsq_combined") + sums_blobs.append(name + "_sums") # type: ignore[operator] + sumsq_blobs.append(name + "_sumsq") # type: ignore[operator] + op.input.append(name + "_sums_combined") # type: ignore[operator] + op.input.append(name + "_sumsq_combined") # type: ignore[operator] op.arg.extend([utils.MakeArgument("num_batches", num_devices)]) batch_norm_ops.append(op) elif op.type == 'SpatialBNGradient': diff --git a/caffe2/python/data_parallel_model_test.py b/caffe2/python/data_parallel_model_test.py index bf5b94b30ca80..0be2147e2fc8f 100644 --- a/caffe2/python/data_parallel_model_test.py +++ b/caffe2/python/data_parallel_model_test.py @@ -131,7 +131,7 @@ def add_optimizer(model): def run_test_locally(self, fn, device_option=None, **kwargs): # Queue for assertion errors on subprocesses - queue = Queue() + queue = Queue() # type: ignore[var-annotated] # Capture any exception thrown by the subprocess def run_fn(*args, **kwargs): @@ -504,12 +504,12 @@ def _test_backward_pass(x, devices, device_type, scale, tolerance): dY = np.array(dY_blob, dtype=np.float32) dY_arr.append(dY) dBias_arr.append(np.array(np.sum(dY, axis=0), dtype=np.float32)) - dBias = np.sum(dBias_arr, dtype=np.float32) + dBias = np.sum(dBias_arr, dtype=np.float32) # type: ignore[arg-type] dBias_avg = dBias / num_devices for device in devices: dBiasActual = np.sum(workspace.FetchBlob("{}_{}/bn_out_b_grad" .format(device_type, device)), dtype=np.float32) - self.assertTrue(np.isclose([dBiasActual], [dBias], atol=tolerance)) + self.assertTrue(np.isclose([dBiasActual], [dBias], atol=tolerance)) # type: ignore[arg-type] # dGamma # Sum dGamma values over all devices to find the average gradient @@ -717,7 +717,7 @@ def add_optimizer(model): workspace.RunNetOnce(model_combine.param_init_net) workspace.RunNetOnce(model_combine.net) two_device_bn_out_vals = [] - two_device_grads = {} + two_device_grads = {} # type: ignore[var-annotated] for device in devices: bn_out_blob = "{}_{}/bn_out".format(device_type, device) two_device_bn_out_vals.append(workspace.FetchBlob(bn_out_blob)) diff --git a/caffe2/python/data_workers.py b/caffe2/python/data_workers.py index acdd8cfbb24bb..57a71823d6070 100644 --- a/caffe2/python/data_workers.py +++ b/caffe2/python/data_workers.py @@ -176,7 +176,7 @@ def __init__(self, net, input_blob_names, batch_size, def start(self): self._inputs = 0 - self._prev_seconds = time.time() + self._prev_seconds = time.time() # type: ignore[assignment] def stop(self): try: @@ -406,7 +406,7 @@ def _log_inputs_per_interval(self, inputs, force=False): self._metrics.log_metrics() self._metrics.reset_metrics() self._inputs = 0 - self._prev_seconds = current_seconds + self._prev_seconds = current_seconds # type: ignore[assignment] class GlobalCoordinator(GlobalWorkerCoordinator): diff --git a/caffe2/python/dataio.py b/caffe2/python/dataio.py index ff6e9c6860f6f..5cd759d38aa1c 100644 --- a/caffe2/python/dataio.py +++ b/caffe2/python/dataio.py @@ -596,7 +596,7 @@ def schema(self): return self._schema def setup(self, **kwargs): - data_finished_blobs = {} + data_finished_blobs = {} # type: ignore[var-annotated] # limiter is stateful; it can only be used once. Since # CompositeReader stops when one of the reader stops, # this is fine. diff --git a/caffe2/python/dataio_test.py b/caffe2/python/dataio_test.py index ac1c72284fbfd..d55c82e2102e7 100644 --- a/caffe2/python/dataio_test.py +++ b/caffe2/python/dataio_test.py @@ -100,7 +100,7 @@ def test_composite_reader(self): ) dst_ds = make_destination_dataset(ws, dst_ds_schema) - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] reader = CompositeReader(names, [src_ds.reader() for src_ds in src_dses]) pipe(reader, dst_ds.writer(), num_runtime_threads=3) @@ -133,7 +133,7 @@ def test_composite_reader_builder(self): ) dst_ds = make_destination_dataset(ws, dst_ds_schema) - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] reader_builder = CompositeReaderBuilder( names, src_ds_builders) reader_builder.setup(ws=ws) @@ -180,24 +180,24 @@ def proc(rec): return rec # Read full data set from original reader - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] pipe(src_ds.reader(), num_runtime_threads=8, processor=proc) session.run(tg) - self.assertEqual(totals[0].fetch(), 100) - self.assertEqual(totals[1].fetch(), 100) - self.assertEqual(totals[2].fetch(), 8) + self.assertEqual(totals[0].fetch(), 100) # type: ignore[attr-defined] + self.assertEqual(totals[1].fetch(), 100) # type: ignore[attr-defined] + self.assertEqual(totals[2].fetch(), 8) # type: ignore[attr-defined] # Read with a count-limited reader - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] q1 = pipe(src_ds.reader(), num_runtime_threads=2) q2 = pipe( ReaderWithLimit(q1.reader(), num_iter=25), num_runtime_threads=3) pipe(q2, processor=proc, num_runtime_threads=6) session.run(tg) - self.assertEqual(totals[0].fetch(), 25) - self.assertEqual(totals[1].fetch(), 25) - self.assertEqual(totals[2].fetch(), 6) + self.assertEqual(totals[0].fetch(), 25) # type: ignore[attr-defined] + self.assertEqual(totals[1].fetch(), 25) # type: ignore[attr-defined] + self.assertEqual(totals[2].fetch(), 6) # type: ignore[attr-defined] def _test_limit_reader_init_shared(self, size): ws = workspace.C.Workspace() @@ -221,7 +221,7 @@ def _test_limit_reader_shared(self, reader_class, size, expected_read_len, # Read without limiter # WorkspaceType.GLOBAL is required because we are fetching # reader.data_finished() after the TaskGroup finishes. - with TaskGroup(workspace_type=WorkspaceType.GLOBAL) as tg: + with TaskGroup(workspace_type=WorkspaceType.GLOBAL) as tg: # type: ignore[attr-defined] if read_delay > 0: reader = reader_class(ReaderWithDelay(src_ds.reader(), read_delay), @@ -311,7 +311,7 @@ def test_time_limit_reader_with_short_limit(self): expected_read_len = int(round(num_threads * duration / sleep_duration)) # Because the time limit check happens before the delay + read op, # subtract a little bit of time to ensure we don't get in an extra read - duration = duration - 0.25 * sleep_duration + duration = duration - 0.25 * sleep_duration # type: ignore[assignment] # NOTE: `expected_read_len_threshold` was added because this test case # has significant execution variation under stress. Under stress, we may @@ -373,7 +373,7 @@ def _build_source_reader(ws, size): def _read_all_data(ws, reader, session): dst_ds = make_destination_dataset(ws, reader.schema().clone_schema()) - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] pipe(reader, dst_ds.writer(), num_runtime_threads=8) session.run(tg) diff --git a/caffe2/python/dataset.py b/caffe2/python/dataset.py index 4c2d4c806476e..7c36bdb2b2676 100644 --- a/caffe2/python/dataset.py +++ b/caffe2/python/dataset.py @@ -210,7 +210,7 @@ def __init__(self, fields, name=None): fields = from_column_list(fields) self.schema = fields self.fields = fields.field_names() - self.field_types = fields.field_types() + self.field_types = fields.field_types() # type: ignore[assignment] self.name = name or 'dataset' self.field_blobs = fields.field_blobs() if fields.has_blobs() else None diff --git a/caffe2/python/db_test.py b/caffe2/python/db_test.py index f0f5d2770dc0d..076395451fafd 100644 --- a/caffe2/python/db_test.py +++ b/caffe2/python/db_test.py @@ -23,8 +23,8 @@ def setUp(self): ] def testSimple(self): - db = workspace.C.create_db( - "minidb", self.file_name, workspace.C.Mode.write) + db = workspace.C.create_db( # type: ignore[attr-defined] + "minidb", self.file_name, workspace.C.Mode.write) # type: ignore[attr-defined] for key, value in self.data: transaction = db.new_transaction() @@ -33,8 +33,8 @@ def testSimple(self): del db # should close DB - db = workspace.C.create_db( - "minidb", self.file_name, workspace.C.Mode.read) + db = workspace.C.create_db( # type: ignore[attr-defined] + "minidb", self.file_name, workspace.C.Mode.read) # type: ignore[attr-defined] cursor = db.new_cursor() data = [] while cursor.valid(): diff --git a/caffe2/python/device_checker.py b/caffe2/python/device_checker.py index d4eb6a1ad22a3..9ad4a226aad38 100644 --- a/caffe2/python/device_checker.py +++ b/caffe2/python/device_checker.py @@ -70,7 +70,7 @@ def CheckSimple(self, op, inputs, outputs_to_check, # else: # print ('Passed device pair (0, %d), %s %s' % # (i, outputs_to_check[j], y.shape)) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] return success def CheckNet(self, net, inputs=None, blobs_to_check=None, ignore=None): @@ -116,5 +116,5 @@ def CheckNet(self, net, inputs=None, blobs_to_check=None, ignore=None): # print ('Passed device pair (%d, %d), %s %s: %s' % # (i, j, blobs_to_check[j], y.shape, # str(y.flatten()))) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] return success diff --git a/caffe2/python/docs/generator.py b/caffe2/python/docs/generator.py index c5a7df369bc27..570caec17d052 100644 --- a/caffe2/python/docs/generator.py +++ b/caffe2/python/docs/generator.py @@ -45,7 +45,7 @@ def getOperators(self): # map: op_name -> operator self.operators = {} # map: op_name -> [engine, engine] - self.engines = {} + self.engines = {} # type: ignore[var-annotated] def filePriority(x): if x == "caffe2/caffe2/operators": @@ -59,7 +59,7 @@ def filePriority(x): for name in core._GetRegisteredOperators(): schema = OpSchema.get(name) if schema: - priority = filePriority(os.path.dirname(schema.file)) + priority = filePriority(os.path.dirname(schema.file)) # type: ignore[attr-defined] operator = self.getOperatorDoc(name, schema, priority) self.operators[name] = operator @@ -102,8 +102,8 @@ def __init__(self, name): def getDeviceImpl(self): deviceImplList = [] - for device, impl in [('CPU', OpSchema.get_cpu_impl(self.op_name)), - ('CUDA', OpSchema.get_cuda_impl(self.op_name))]: + for device, impl in [('CPU', OpSchema.get_cpu_impl(self.op_name)), # type: ignore[attr-defined] + ('CUDA', OpSchema.get_cuda_impl(self.op_name))]: # type: ignore[attr-defined] if not impl: continue deviceImplList.append((device, impl)) @@ -192,9 +192,9 @@ def generateDevices(self, formatter): formatter.addHeader("Devices", 3) devices = [ self.getInfo(formatter, - 'CPU', OpSchema.get_cpu_impl(self.name)), + 'CPU', OpSchema.get_cpu_impl(self.name)), # type: ignore[attr-defined] self.getInfo(formatter, - 'GPU', OpSchema.get_cuda_impl(self.name)), + 'GPU', OpSchema.get_cuda_impl(self.name)), # type: ignore[attr-defined] ] formatter.addList([i for i in devices if i]) diff --git a/caffe2/python/dyndep.py b/caffe2/python/dyndep.py index 0382cc3a8212f..bd24c568af330 100644 --- a/caffe2/python/dyndep.py +++ b/caffe2/python/dyndep.py @@ -35,7 +35,7 @@ def InitOpsLibrary(name, trigger_lazy=True): _init_impl(name, trigger_lazy=trigger_lazy) -_IMPORTED_DYNDEPS = set() +_IMPORTED_DYNDEPS = set() # type: ignore[var-annotated] dll_lock = Lock() diff --git a/caffe2/python/examples/imagenet_trainer.py b/caffe2/python/examples/imagenet_trainer.py index 414079507ec04..c0049b4df60b1 100644 --- a/caffe2/python/examples/imagenet_trainer.py +++ b/caffe2/python/examples/imagenet_trainer.py @@ -104,7 +104,7 @@ def AddNullInput(model, reader, batch_size, img_size, dtype): def SaveModel(args, train_model, epoch, use_ideep): - prefix = "[]_{}".format(train_model._device_prefix, train_model._devices[0]) + prefix = "[]_{}".format(train_model._device_prefix, train_model._devices[0]) # type: ignore[str-format] predictor_export_meta = pred_exp.PredictorExportMeta( predict_net=train_model.net.Proto(), parameters=data_parallel_model.GetCheckpointParams(train_model), @@ -226,8 +226,8 @@ def RunEpoch( "{}_{}".format(test_model._device_prefix, g) + '/accuracy_top5' )) ntests += 1 - test_accuracy /= ntests - test_accuracy_top5 /= ntests + test_accuracy /= ntests # type: ignore[assignment] + test_accuracy_top5 /= ntests # type: ignore[assignment] else: test_accuracy = (-1) test_accuracy_top5 = (-1) @@ -304,7 +304,7 @@ def Train(args): } else: train_arg_scope = { - 'order': 'NCHW', + 'order': 'NCHW', # type: ignore[dict-item] 'use_cudnn': True, 'cudnn_exhaustive_search': True, 'ws_nbytes_limit': (args.cudnn_workspace_limit_mb * 1024 * 1024), @@ -369,7 +369,7 @@ def Train(args): exit_nets=None) else: - rendezvous = None + rendezvous = None # type: ignore[assignment] # Model building functions def create_resnext_model_ops(model, loss_scale): @@ -533,7 +533,7 @@ def add_post_sync_ops(model): } else: test_arg_scope = { - 'order': "NCHW", + 'order': "NCHW", # type: ignore[dict-item] 'use_cudnn': True, 'cudnn_exhaustive_search': True, } diff --git a/caffe2/python/examples/lmdb_create_example.py b/caffe2/python/examples/lmdb_create_example.py index af56069a7be03..bcf1776f32ff0 100644 --- a/caffe2/python/examples/lmdb_create_example.py +++ b/caffe2/python/examples/lmdb_create_example.py @@ -41,13 +41,13 @@ def create_db(output_file): tensor_protos = caffe2_pb2.TensorProtos() img_tensor = tensor_protos.protos.add() img_tensor.dims.extend(img_data.shape) - img_tensor.data_type = 1 + img_tensor.data_type = 1 # type: ignore[assignment] flatten_img = img_data.reshape(np.prod(img_data.shape)) img_tensor.float_data.extend(flatten_img) label_tensor = tensor_protos.protos.add() - label_tensor.data_type = 2 + label_tensor.data_type = 2 # type: ignore[assignment] label_tensor.int32_data.append(label) txn.put( '{}'.format(j).encode('ascii'), diff --git a/caffe2/python/experiment_util.py b/caffe2/python/experiment_util.py index ac020cc6c6b03..fad92d89c8233 100644 --- a/caffe2/python/experiment_util.py +++ b/caffe2/python/experiment_util.py @@ -106,7 +106,7 @@ def log(self, input_count, batch_count, additional_values): self.logstr(",".join(str(v) for v in viewvalues(logdict))) - for logger in self.external_loggers: + for logger in self.external_loggers: # type: ignore[union-attr] try: logger.log(logdict) except Exception as e: diff --git a/caffe2/python/fakelowp/init_shared_libs.py b/caffe2/python/fakelowp/init_shared_libs.py index 889b2bcab5205..5787d65b85934 100644 --- a/caffe2/python/fakelowp/init_shared_libs.py +++ b/caffe2/python/fakelowp/init_shared_libs.py @@ -5,5 +5,5 @@ if 'OSS_ONNXIFI_LIB' in os.environ: lib = os.environ['OSS_ONNXIFI_LIB'] - print("Loading ONNXIFI lib: ".format(lib)) + print("Loading ONNXIFI lib: ".format(lib)) # type: ignore[str-format] ctypes.CDLL(lib, ctypes.RTLD_GLOBAL) diff --git a/caffe2/python/functional.py b/caffe2/python/functional.py index d32acb3d8a909..3f56188e11bb1 100644 --- a/caffe2/python/functional.py +++ b/caffe2/python/functional.py @@ -16,14 +16,14 @@ def namedtupledict(typename, field_names, *args, **kwargs): field_names_map = {n: i for i, n in enumerate(field_names)} # Some output names are invalid python identifier, e.g. "0" kwargs.setdefault('rename', True) - data = namedtuple(typename, field_names, *args, **kwargs) + data = namedtuple(typename, field_names, *args, **kwargs) # type: ignore[misc] def getitem(self, key): if isinstance(key, string_types): key = field_names_map[key] return super(type(self), self).__getitem__(key) - data.__getitem__ = getitem + data.__getitem__ = getitem # type: ignore[assignment] return data @@ -46,7 +46,7 @@ def get_name_list(prefix, num, max_num): # of schema num_input = len(input_names) if num_input > schema.max_input or num_input < \ - schema.min_input or not schema.num_inputs_allowed(num_input): + schema.min_input or not schema.num_inputs_allowed(num_input): # type: ignore[attr-defined] raise ValueError( "Functional C2: Number of inputs not in \ range: {} - {} or not allowed." @@ -58,7 +58,7 @@ def get_name_list(prefix, num, max_num): if num_output > schema.max_output or \ num_output < schema.min_output or \ not schema.num_outputs_allowed(num_output) or \ - not schema.num_inputs_outputs_allowed(num_input, + not schema.num_inputs_outputs_allowed(num_input, # type: ignore[attr-defined] num_output): raise ValueError( "Functional C2: Number of output \ @@ -69,7 +69,7 @@ def get_name_list(prefix, num, max_num): output_prefix, num_output, schema.max_output ) args.pop('num_output') - calculated = schema.CalculateOutput(num_input) + calculated = schema.CalculateOutput(num_input) # type: ignore[attr-defined] if not output_names and calculated != -1: output_names = get_name_list( output_prefix, calculated, schema.max_output @@ -80,7 +80,7 @@ def get_name_list(prefix, num, max_num): # For an op with max_output == inf # and no Output defined in schema # user should pass output_size explicitly - if schema.inf == max_output: + if schema.inf == max_output: # type: ignore[attr-defined] raise ValueError( "For operators with max_output == inf,\ user should pass num_output explicitly." diff --git a/caffe2/python/gradient_check_test.py b/caffe2/python/gradient_check_test.py index 318c4ad33bc9a..f470710fc714f 100644 --- a/caffe2/python/gradient_check_test.py +++ b/caffe2/python/gradient_check_test.py @@ -31,7 +31,7 @@ gpu_device_checker = device_checker.DeviceChecker( 0.01, [_gpu_dev_option] ) - device_checker = device_checker.DeviceChecker( + device_checker = device_checker.DeviceChecker( # type: ignore[assignment] 0.01, [_gpu_dev_option, cpu_device_option] ) gpu_gradient_checkers = [ @@ -54,7 +54,7 @@ gpu_device_checker = device_checker.DeviceChecker( 0.01, [] ) - device_checker = device_checker.DeviceChecker(0.01, [cpu_device_option]) + device_checker = device_checker.DeviceChecker(0.01, [cpu_device_option]) # type: ignore[assignment] gradient_checkers = [ gradient_checker.GradientChecker( @@ -82,7 +82,7 @@ def testLRN(self): ) X = np.random.rand(2, input_size, input_size, depth).astype(np.float32) - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -94,7 +94,7 @@ class TestFlatten(test_util.TestCase): def testFlatten(self): op = core.CreateOperator("Flatten", ["X"], ["Y"]) X = np.random.rand(2, 3, 4, 5).astype(np.float32) - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -127,7 +127,7 @@ def testConcatNHWC(self): np.random.rand(2, input_size, input_size, d4).astype(np.float32) ] for i in range(4): - res = device_checker.CheckSimple(op, Xs, [0]) + res = device_checker.CheckSimple(op, Xs, [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, Xs, i, @@ -151,7 +151,7 @@ def testConcatNCHW(self): np.random.rand(2, d4, input_size, input_size).astype(np.float32) ] for i in range(4): - res = device_checker.CheckSimple(op, Xs, [0]) + res = device_checker.CheckSimple(op, Xs, [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, Xs, i, @@ -180,7 +180,7 @@ def testRelu(self): # go away from the origin point to avoid kink problems X += 0.01 * np.sign(X) X[X == 0] = 0.01 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -201,7 +201,7 @@ def testTanh(self): for input_size in self.test_configs: op = core.CreateOperator("Tanh", ["X"], ["Y"]) X = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -225,7 +225,7 @@ def testAbs(self): # go away from the origin point to avoid kink problems X += 0.01 * np.sign(X) X[X == 0] = 0.01 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -245,7 +245,7 @@ def testExp(self): for input_size in self.test_configs: op = core.CreateOperator("Exp", ["X"], ["Y"]) X = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -265,7 +265,7 @@ def testCos(self): for input_size in self.test_configs: op = core.CreateOperator("Cos", ["X"], ["Y"]) X = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -285,7 +285,7 @@ def testSin(self): for input_size in self.test_configs: op = core.CreateOperator("Sin", ["X"], ["Y"]) X = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -305,7 +305,7 @@ def testSigmoid(self): for input_size in self.test_configs: op = core.CreateOperator("Sigmoid", ["X"], ["Y"]) X = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) @@ -326,7 +326,7 @@ def testSum(self): ["Y" if not in_place else "X1"]) X1 = np.random.rand(*input_size).astype(np.float32) - 0.5 X2 = np.random.rand(*input_size).astype(np.float32) - 0.5 - res = device_checker.CheckSimple(op, [X1, X2], [0]) + res = device_checker.CheckSimple(op, [X1, X2], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple( @@ -356,7 +356,7 @@ def testMakeTwoClass(self): # step a little to avoid gradient problems X[X < 0.01] += 0.01 X[X > 0.99] -= 0.01 - res = device_checker.CheckSimple(op, [X], [0]) + res = device_checker.CheckSimple(op, [X], [0]) # type: ignore[attr-defined] self.assertTrue(res) for checker in gradient_checkers: res, grad, grad_estimated = checker.CheckSimple(op, [X], 0, [0]) diff --git a/caffe2/python/gradient_checker.py b/caffe2/python/gradient_checker.py index 5f116bd6107c4..b6b8431ddd889 100644 --- a/caffe2/python/gradient_checker.py +++ b/caffe2/python/gradient_checker.py @@ -129,7 +129,7 @@ def Check(net, outputs_with_grad, input_values, def GetLoss(new_value): workspace.blobs[input_to_check] = new_value workspace.RunNetOnce(full_net) - return sum([ + return sum([ # type: ignore[union-attr] workspace.blobs[output] for output in outputs_with_grad ]).sum() @@ -339,7 +339,7 @@ def CheckSimple( # cleaned up. Note that there is no need to delete a workspace - # when empty it takes a very limited amount of memory. workspace.ResetWorkspace() - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] return ret, grad, grad_estimate def _assertInferTensorChecks(self, op, grad_ops): @@ -377,9 +377,9 @@ def _assertInferTensorChecks(self, op, grad_ops): elif blob.dtype == np.dtype('int64'): correct_type = caffe2_pb2.TensorProto.INT64 else: - correct_type = "unknown {}".format(np.dtype) + correct_type = "unknown {}".format(np.dtype) # type: ignore[assignment] else: - correct_type = str(type(blob)) + correct_type = str(type(blob)) # type: ignore[assignment] inferred_type = inferred_types[output] if correct_type != inferred_type: raise Exception( diff --git a/caffe2/python/hsm_util.py b/caffe2/python/hsm_util.py index ec465c12240eb..423459798c1b6 100644 --- a/caffe2/python/hsm_util.py +++ b/caffe2/python/hsm_util.py @@ -65,6 +65,6 @@ def recursive_path_builder(node_proto, path, hierarchy_proto, max_index): node = tree_proto.root_node hierarchy_proto = hsm_pb2.HierarchyProto() - path = [] + path = [] # type: ignore[var-annotated] max_index = recursive_path_builder(node, path, hierarchy_proto, max_index) return hierarchy_proto diff --git a/caffe2/python/hypothesis_test.py b/caffe2/python/hypothesis_test.py index fa8f7fb19f740..cf58c778f5575 100644 --- a/caffe2/python/hypothesis_test.py +++ b/caffe2/python/hypothesis_test.py @@ -20,7 +20,7 @@ # result, deadlines are not enforced on CUDA runs. _hypothesis_settings = settings - def settings(**kwargs): + def settings(**kwargs): # type: ignore[no-redef] if 'deadline' in kwargs: kwargs['deadline'] = None kwargs.setdefault('max_examples', 50) @@ -61,7 +61,7 @@ def _tensor_and_indices(min_dim=1, max_dim=4, dtype=np.float32, _NUMPY_TYPE_TO_ENUM = { np.float32: core.DataType.FLOAT, np.int32: core.DataType.INT32, - np.bool: core.DataType.BOOL, + np.bool: core.DataType.BOOL, # type: ignore[attr-defined] np.uint8: core.DataType.UINT8, np.int8: core.DataType.INT8, np.uint16: core.DataType.UINT16, @@ -143,7 +143,7 @@ def test_sum(self, inputs, in_place, gc, dc): self.assertDeviceChecks(dc, op, [X1, X2], [0]) self.assertGradientChecks(gc, op, [X1, X2], 0, [0]) - @given(inputs=hu.tensors(n=2, min_dim=2, max_dim=2), **hu.gcs_cpu_only) + @given(inputs=hu.tensors(n=2, min_dim=2, max_dim=2), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_row_mul(self, inputs, gc, dc): op = core.CreateOperator("RowMul", ["X1", "X2"], ["Y"]) @@ -161,7 +161,7 @@ def ref(x, y): self.assertGradientChecks(gc, op, [X1, X2], i, [0]) self.assertReferenceChecks(gc, op, [X1, X2], ref) - @given(inputs=hu.tensors(n=2), **hu.gcs_cpu_only) + @given(inputs=hu.tensors(n=2), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_max(self, inputs, gc, dc): op = core.CreateOperator("Max", ["X1", "X2"], ["Y"]) @@ -441,10 +441,10 @@ def test_depth_concat(self, ndim, axis, add_axis, num_inputs, gc, dc): # Reference def depth_concat(*inputs): - inputs = list(inputs) + inputs = list(inputs) # type: ignore[assignment] if add_axis: for i in range(len(inputs)): - inputs[i] = np.expand_dims(inputs[i], axis) + inputs[i] = np.expand_dims(inputs[i], axis) # type: ignore[index] input_dims = np.array([np.shape(x)[axis] for x in inputs]) return [np.concatenate(inputs, axis=axis), input_dims] @@ -471,7 +471,7 @@ def test_depth_concat_with_order(self, num_inputs, order, gc, dc): # Reference def depth_concat_with_order(*inputs): - inputs = list(inputs) + inputs = list(inputs) # type: ignore[assignment] axis = order[1] input_dims = np.array([np.shape(x)[axis] for x in inputs]) return [np.concatenate(inputs, axis=axis), input_dims] @@ -483,7 +483,7 @@ def depth_concat_with_order(*inputs): min_value=1.0, max_value=10.0) ), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_last_n_windows(self, X, gc, dc): workspace.FeedBlob('input', X) @@ -507,7 +507,7 @@ def test_last_n_windows(self, X, gc, dc): import numpy.testing as npt npt.assert_almost_equal(output, new_output, decimal=5) - @given(dtype=st.sampled_from([np.float32, np.float64, np.int32, np.bool])) + @given(dtype=st.sampled_from([np.float32, np.float64, np.int32, np.bool])) # type: ignore[attr-defined] @settings(deadline=1000) def test_print(self, dtype): data = np.random.permutation(6).astype(dtype) @@ -603,7 +603,7 @@ def _dense_ftrl(alpha, beta, lambda1, lambda2, w, nz, g): lambda1=hu.floats(min_value=0.001, max_value=0.1), lambda2=hu.floats(min_value=0.001, max_value=0.1), engine=st.sampled_from([None, "SIMD"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_ftrl_sgd(self, inputs, in_place, alpha, beta, lambda1, lambda2, engine, gc, dc): @@ -672,7 +672,7 @@ def _dense_gftrl(alpha, beta, lambda1, lambda2, w, nz, g): lambda1=hu.floats(min_value=0.001, max_value=0.1), lambda2=hu.floats(min_value=0.001, max_value=0.1), engine=st.sampled_from([None, "SIMD"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_gftrl_sgd(self, inputs, in_place, alpha, beta, lambda1, lambda2, engine, gc, dc): @@ -700,7 +700,7 @@ def test_gftrl_sgd(self, inputs, in_place, alpha, beta, lambda1, lambda2, lambda1=hu.floats(min_value=0.001, max_value=0.1), lambda2=hu.floats(min_value=0.001, max_value=0.1), engine=st.sampled_from([None, "SIMD"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_sparse_ftrl_sgd(self, inputs, alpha, beta, lambda1, lambda2, engine, gc, dc): @@ -744,7 +744,7 @@ def _dense_ftrl_send_alpha_by_input(beta, lambda1, lambda2, w, nz, g, alpha): lambda1=hu.floats(min_value=0.001, max_value=0.1), lambda2=hu.floats(min_value=0.001, max_value=0.1), engine=st.sampled_from([None, "SIMD"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_ftrl_sgd_send_alpha_by_input(self, inputs, in_place, alpha, beta, lambda1, lambda2, engine, gc, dc): @@ -773,7 +773,7 @@ def test_ftrl_sgd_send_alpha_by_input(self, inputs, in_place, alpha, beta, lambda1=hu.floats(min_value=0.001, max_value=0.1), lambda2=hu.floats(min_value=0.001, max_value=0.1), engine=st.sampled_from([None, "SIMD"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_sparse_ftrl_sgd_send_alpha_by_input(self, inputs, alpha, beta, lambda1, lambda2, engine, gc, @@ -813,7 +813,7 @@ def ftrl(w, nz, i, g, alpha): dtype=np.int32, elements=st.integers(min_value=0, max_value=10)), with_remapping=st.booleans(), - **hu.gcs_no_hip) + **hu.gcs_no_hip) # type: ignore[arg-type] @settings(deadline=10000) def test_unique(self, input, with_remapping, gc, dc): op = core.CreateOperator( @@ -909,7 +909,7 @@ def op_ref(target_probabilities): @given(lengths=st.lists(st.integers(min_value=0, max_value=10), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lengths_to_segment_ids(self, lengths, gc, dc): op = core.CreateOperator( @@ -932,7 +932,7 @@ def op_ref(lengths): @given(lengths=st.lists(st.integers(min_value=0, max_value=10), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lengths_range_fill(self, lengths, gc, dc): op = core.CreateOperator( @@ -952,7 +952,7 @@ def op_ref(lengths): inputs=[np.array(lengths, dtype=np.int32)], reference=op_ref) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_segment_ids_to_ranges(self, gc, dc): lengths = [4, 6, 3, 2, 0, 4] @@ -986,7 +986,7 @@ def lengths_to_segment_ids(lengths): @given(lengths=st.lists(st.integers(min_value=0, max_value=10), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lengths_to_ranges(self, lengths, gc, dc): op = core.CreateOperator( @@ -1011,7 +1011,7 @@ def op_ref(x): st.integers(min_value=0, max_value=10), min_size=0, max_size=10 ), include_last_offset=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None) def test_lengths_to_offsets(self, lengths, include_last_offset, gc, dc): @@ -1085,7 +1085,7 @@ def op_ref(prediction, labels): @given(lengths=st.lists(st.integers(min_value=0, max_value=10), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_segment_ids_to_lengths(self, lengths, gc, dc): op = core.CreateOperator( @@ -1134,7 +1134,7 @@ def ids_to_lengths(ids): min_size=0, max_size=10), power=st.sampled_from([0.5, 1.0, 1.5, 2.0]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lengths_to_weights(self, lengths, power, gc, dc): op = core.CreateOperator( @@ -1243,7 +1243,7 @@ def exp_ref(input_tensor): @given(input_tensor=hu.arrays( dims=[10], elements=hu.floats(min_value=1, max_value=10000)), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_log(self, input_tensor, gc, dc): op = core.CreateOperator( @@ -1309,7 +1309,7 @@ def test_blobs_queue_threading(self, num_threads, num_elements, xs = [np.random.randn(num_elements, 5).astype(np.float32) for _ in range(num_blobs)] - q = queue.Queue() + q = queue.Queue() # type: ignore[var-annotated] for i in range(num_elements): q.put([x[i] for x in xs]) @@ -1523,7 +1523,7 @@ def append(ins, outs): @given( data=hu.tensor(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_squeeze_expand_dims(self, data, gc, dc): dims = [0, 0] @@ -1559,7 +1559,7 @@ def squeeze_ref(data, *args, **kw): output_to_grad='expanded', grad_reference=squeeze_ref) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_tt_layer(self, gc, dc): seed = 1234 @@ -1604,7 +1604,7 @@ def test_tt_layer(self, gc, dc): # tt_ranks, and seed. Changing these will cause the test to fail. self.assertAlmostEqual(np.linalg.norm(golden - Y), 0, delta=1e-10) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_tt_sls_layer(self, gc, dc): seed = 1234 np.random.seed(seed) @@ -1644,7 +1644,7 @@ def test_tt_sls_layer(self, gc, dc): self.assertAlmostEqual(np.linalg.norm(golden - Y), 0, delta=0) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_tt_sls_gradientop(self, gc, dc): op = core.CreateOperator( @@ -1688,7 +1688,7 @@ def test_tt_sls_gradientop(self, gc, dc): self.assertEqual(list(dCore2.shape), list(c2.shape)) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_tt_sls_gradientop1(self, gc, dc): op = core.CreateOperator( @@ -1731,7 +1731,7 @@ def test_tt_sls_gradientop1(self, gc, dc): self.assertEqual(list(dCore1.shape), list(c1.shape)) self.assertEqual(list(dCore2.shape), list(c2.shape)) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_tt_sls(self, gc, dc): factor_voc = [10, 10, 10] @@ -1754,7 +1754,7 @@ def test_tt_sls(self, gc, dc): self.assertGradientChecks(gc, op, [c0, c1, c2, index, lengths], 0, [0]) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_tt_sls_repro(self, gc, dc): factor_voc = [125, 160, 200] factor_width = [4, 4, 4] @@ -1789,7 +1789,7 @@ def test_tt_sls_repro(self, gc, dc): self.assertAlmostEqual(np.linalg.norm(golden - Y), 0, delta=0) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_tt_sls_gradientop2(self, gc, dc): op = core.CreateOperator( @@ -1909,7 +1909,7 @@ def run(): a=st.integers(), b=st.integers(), is_empty=st.booleans(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None, max_examples=50) def test_slice(self, input, slice_dim, a, b, is_empty, gc, dc): slice_dim = slice_dim % len(input.shape) @@ -1938,13 +1938,13 @@ def slice_ref(x, s, e): slice_ref) self.assertGradientChecks(gc, op, [input, start_vec, end_vec], 0, [0]) - @given(data=hu.tensor(), **hu.gcs_cpu_only) + @given(data=hu.tensor(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_shape(self, data, gc, dc): op = core.CreateOperator("Shape", ["data"], ["shape"]) self.assertReferenceChecks(gc, op, [data], lambda x: (x.shape, )) - @given(data=hu.tensor(), **hu.gcs_cpu_only) + @given(data=hu.tensor(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_shape_with_axes(self, data, gc, dc): def shape_ref(x, y): @@ -1953,7 +1953,7 @@ def shape_ref(x, y): op = core.CreateOperator("Shape", ["data"], ["shape"], axes=axes) self.assertReferenceChecks(gc, op, [data, axes], shape_ref) - @given(x=hu.tensor(), y=hu.tensor(), **hu.gcs_cpu_only) + @given(x=hu.tensor(), y=hu.tensor(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_has_elements(self, x, y, gc, dc): op = core.CreateOperator("HasElements", ["x", "y"], ["has_elements"]) @@ -2127,7 +2127,7 @@ def test_cast(self, a, src, dst, use_name, gc, dc): # Casting from a float type outside the range of the integral # type is UB. ftypes = [np.float32, np.float64] - if src in ftypes and dst not in ftypes and dst is not np.bool: + if src in ftypes and dst not in ftypes and dst is not np.bool: # type: ignore[attr-defined] info = np.iinfo(dst) a = np.clip(a, info.min, info.max) @@ -2136,7 +2136,7 @@ def ref(data): to = _NUMPY_TYPE_TO_ENUM[dst] if use_name: - to = caffe2_pb2.TensorProto.DataType.Name(to).lower() + to = caffe2_pb2.TensorProto.DataType.Name(to).lower() # type: ignore[assignment, arg-type] op = core.CreateOperator('Cast', ["X"], ["Y"], to=to) self.assertDeviceChecks(dc, op, [a], [0]) out, = self.assertReferenceChecks(gc, op, [a], ref) @@ -2182,7 +2182,7 @@ def ref(data): self.assertDeviceChecks(dc, op, [a], [0]) self.assertReferenceChecks(gc, op, [a], ref) - @given(data=_dtypes(dtypes=[np.int32, np.int64, np.float32, np.bool]). + @given(data=_dtypes(dtypes=[np.int32, np.int64, np.float32, np.bool]). # type: ignore[attr-defined] flatmap(lambda dtype: hu.tensor( min_dim=1, dtype=dtype, elements=hu.elements_of_type(dtype))), has_input=st.booleans(), @@ -2195,8 +2195,8 @@ def test_constant_fill(self, data, has_input, has_extra_shape, extra_shape, gc, dc): dtype = data.dtype.type # in opt mode, np.bool is converted into np.bool_ - if data.dtype == np.dtype(np.bool): - dtype = np.bool + if data.dtype == np.dtype(np.bool): # type: ignore[attr-defined] + dtype = np.bool # type: ignore[attr-defined] value = data.item(0) gt_shape = data.shape @@ -2229,15 +2229,15 @@ def ref(inputs=None): out, = self.assertReferenceChecks(gc, op, inputs, ref) self.assertEqual(dtype, out.dtype) - @given(data=_dtypes(dtypes=[np.int32, np.int64, np.float32, np.bool]). + @given(data=_dtypes(dtypes=[np.int32, np.int64, np.float32, np.bool]). # type: ignore[attr-defined] flatmap(lambda dtype: hu.tensor( min_dim=1, dtype=dtype, elements=hu.elements_of_type(dtype))), **hu.gcs) @settings(deadline=1000) def test_constant_fill_from_tensor(self, data, gc, dc): dtype = data.dtype.type - if data.dtype == np.dtype(np.bool): - dtype = np.bool + if data.dtype == np.dtype(np.bool): # type: ignore[attr-defined] + dtype = np.bool # type: ignore[attr-defined] value = np.array([data.item(0)], dtype=dtype) inputs = [data, value] @@ -2430,8 +2430,8 @@ def test_scale(self, X, in_place, scale, gc, dc): def test_string_serde(self, s): s = s.encode('ascii', 'ignore') self.ws.create_blob("a").feed(s) - serialized = self.ws.blobs["a"].serialize("a") - self.ws.create_blob("b").deserialize(serialized) + serialized = self.ws.blobs["a"].serialize("a") # type: ignore[attr-defined] + self.ws.create_blob("b").deserialize(serialized) # type: ignore[attr-defined] self.assertEqual(s, self.ws.blobs[("a")].fetch()) self.assertEqual(s, self.ws.blobs[("b")].fetch()) @@ -2528,7 +2528,7 @@ def numpy_pad_ref(x): batch_size=st.integers(1, 3), order=st.sampled_from(["NCHW", "NHWC"]), epsilon=hu.floats(min_value=1e-4, max_value=1e-2), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_instance_norm(self, size, input_channels, batch_size, order, epsilon, gc, dc): @@ -2619,7 +2619,7 @@ def sparse_to_dense_noshapeinfer(I, X): if X.dtype == np.float32: self.assertGradientChecks(gc, op, [I, X, D], 1, [0]) - @given(inputs=hu.tensors(n=2, min_dim=2, max_dim=2), **hu.gcs_cpu_only) + @given(inputs=hu.tensors(n=2, min_dim=2, max_dim=2), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_dot_product(self, inputs, gc, dc): X, Y = inputs @@ -2637,7 +2637,7 @@ def dotproduct(X, Y): M=st.integers(min_value=2, max_value=10), K=st.integers(min_value=2, max_value=10), pad_value=hu.floats(min_value=0.1, max_value=1.0), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_dot_product_with_padding(self, N, M, K, pad_value, gc, dc): X = np.random.rand(N, M).astype(np.float32) - 0.5 @@ -2662,7 +2662,7 @@ def dotproduct(X, Y): @given(N=st.integers(min_value=2, max_value=10), M=st.integers(min_value=2, max_value=10), pad_value=hu.floats(min_value=0.1, max_value=1.0), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_dot_product_with_rep_padding(self, N, M, pad_value, gc, dc): K = 2 * M @@ -2687,7 +2687,7 @@ def dotproduct(X, Y): self.assertGradientChecks(gc, op, [X, Y], 1, [0]) @given(N=st.integers(min_value=2, max_value=10), - M=st.integers(min_value=2, max_value=10), **hu.gcs_cpu_only) + M=st.integers(min_value=2, max_value=10), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_ensure_dense(self, N, M, gc, dc): # in place @@ -2704,7 +2704,7 @@ def test_ensure_dense(self, N, M, gc, dc): @given(N=st.integers(min_value=10, max_value=100), M=st.integers(min_value=2, max_value=10), num_buckets=st.integers(min_value=1, max_value=5), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_accumulate_histogram_op(self, N, M, num_buckets, gc, dc): X = np.random.rand(N, M).astype(np.float32) diff --git a/caffe2/python/hypothesis_test_util.py b/caffe2/python/hypothesis_test_util.py index 0fc489d772731..ae2ed2f446cba 100644 --- a/caffe2/python/hypothesis_test_util.py +++ b/caffe2/python/hypothesis_test_util.py @@ -150,7 +150,7 @@ def elements_of_type(dtype=np.float32, filter_=None): elems = st.integers(min_value=0, max_value=2 ** 31 - 1) elif dtype is np.int64: elems = st.integers(min_value=0, max_value=2 ** 63 - 1) - elif dtype is np.bool: + elif dtype is np.bool: # type: ignore[attr-defined] elems = st.booleans() else: raise ValueError("Unexpected dtype without elements provided") @@ -251,7 +251,7 @@ def segmented_tensor( def lengths_tensor(min_segments=None, max_segments=None, *args, **kwargs): gen = functools.partial( lengths, min_segments=min_segments, max_segments=max_segments) - return segmented_tensor(*args, segment_generator=gen, **kwargs) + return segmented_tensor(*args, segment_generator=gen, **kwargs) # type: ignore[misc] def sparse_segmented_tensor(min_dim=1, max_dim=4, dtype=np.float32, @@ -336,7 +336,7 @@ def temp_workspace(name=b"temp_ws"): workspace.SwitchWorkspace(name, True) yield workspace.ResetWorkspace() - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] def runOpBenchmark( @@ -552,9 +552,9 @@ def _assertInferTensorChecks(self, name, shapes, types, output, elif output.dtype == np.dtype('int64'): correct_type = caffe2_pb2.TensorProto.INT64 else: - correct_type = "unknown {}".format(np.dtype) + correct_type = "unknown {}".format(np.dtype) # type: ignore[assignment] else: - correct_type = str(type(output)) + correct_type = str(type(output)) # type: ignore[assignment] try: np.testing.assert_array_equal( np.array(shapes[name]).astype(np.int32), diff --git a/caffe2/python/ideep/blobs_queue_db_test.py b/caffe2/python/ideep/blobs_queue_db_test.py index 966fcc23d47d9..ea83e8485012b 100644 --- a/caffe2/python/ideep/blobs_queue_db_test.py +++ b/caffe2/python/ideep/blobs_queue_db_test.py @@ -96,10 +96,10 @@ def _add_blob_to_queue(self, queue, data, blob, status): def _create_test_tensor_protos(self, idx): item = caffe2_pb2.TensorProtos() data = item.protos.add() - data.data_type = core.DataType.STRING + data.data_type = core.DataType.STRING # type: ignore[assignment] data.string_data.append("foo{}".format(idx).encode('utf-8')) label = item.protos.add() - label.data_type = core.DataType.INT32 + label.data_type = core.DataType.INT32 # type: ignore[assignment] label.int32_data.append(1) return item.SerializeToString() diff --git a/caffe2/python/ideep/conv_transpose_test.py b/caffe2/python/ideep/conv_transpose_test.py index eeda2ea43a2d5..9b8a57887cd09 100644 --- a/caffe2/python/ideep/conv_transpose_test.py +++ b/caffe2/python/ideep/conv_transpose_test.py @@ -26,7 +26,7 @@ class ConvTransposeTest(hu.HypothesisTestCase): training_mode=st.booleans(), compute_dX=st.booleans(), **mu.gcs) - @settings(max_examples=2, timeout=100) + @settings(max_examples=2, timeout=100) # type: ignore[call-arg] def test_convolution_transpose_gradients(self, stride, pad, kernel, adj, size, input_channels, output_channels, batch_size, diff --git a/caffe2/python/ideep/convfusion_op_test.py b/caffe2/python/ideep/convfusion_op_test.py index a0a782ab8a03e..82f853a9a5658 100644 --- a/caffe2/python/ideep/convfusion_op_test.py +++ b/caffe2/python/ideep/convfusion_op_test.py @@ -114,7 +114,7 @@ def test_convolution_relu_fusion(self, stride, pad, kernel, size, print(np.max(np.abs(Y2 - Y0))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] @given(stride=st.integers(1, 3), pad=st.integers(0, 3), @@ -381,7 +381,7 @@ def test_convolution_sum_fusion(self, stride, pad, kernel, size, input_channels, input_channels, 1, 1).astype(np.float32) - 0.5 b = np.random.rand(input_channels).astype(np.float32) - 0.5 - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] workspace.ResetWorkspace() workspace.FeedBlob('X0', X, dc[0]) workspace.FeedBlob('w0', w, dc[0]) @@ -577,7 +577,7 @@ def test_convolution_sum_relu_fusion(self, stride, pad, kernel, size, print(np.max(np.abs(S2 - S0))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] @given(stride=st.integers(1, 3), pad=st.integers(0, 3), @@ -686,7 +686,7 @@ def test_convolution_grouped_sum_relu_fusion(self, stride, pad, kernel, size, print(np.max(np.abs(S2 - S0))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] @given(stride=st.integers(1, 3), pad=st.integers(0, 3), @@ -774,7 +774,7 @@ def test_convolution_bn_folding( print(np.max(np.abs(Y - Y1))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] @given(stride=st.integers(1, 3), pad=st.integers(0, 3), @@ -855,7 +855,7 @@ def test_convolution_affch_folding( print(np.max(np.abs(Y - Y1))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": unittest.main() diff --git a/caffe2/python/ideep/dropout_op_test.py b/caffe2/python/ideep/dropout_op_test.py index 5b07333758dd9..44352ddca9972 100644 --- a/caffe2/python/ideep/dropout_op_test.py +++ b/caffe2/python/ideep/dropout_op_test.py @@ -29,7 +29,7 @@ def test_dropout_is_test(self, X, in_place, ratio, gc, dc): # No sense in checking gradients for test phase def reference_dropout_test(x): - return x, np.ones(x.shape, dtype=np.bool) + return x, np.ones(x.shape, dtype=np.bool) # type: ignore[attr-defined] self.assertReferenceChecks( gc, op, [X], reference_dropout_test, # The 'mask' output may be uninitialized @@ -51,7 +51,7 @@ def test_dropout_ratio0(self, X, in_place, output_mask, gc, dc): self.assertDeviceChecks(dc, op, [X], [0]) def reference_dropout_ratio0(x): - return (x,) if is_test else (x, np.ones(x.shape, dtype=np.bool)) + return (x,) if is_test else (x, np.ones(x.shape, dtype=np.bool)) # type: ignore[attr-defined] self.assertReferenceChecks( gc, op, [X], reference_dropout_ratio0, outputs_to_check=[0]) diff --git a/caffe2/python/ideep/elementwise_sum_op_test.py b/caffe2/python/ideep/elementwise_sum_op_test.py index 11a35d6b2b286..34db07771ccab 100644 --- a/caffe2/python/ideep/elementwise_sum_op_test.py +++ b/caffe2/python/ideep/elementwise_sum_op_test.py @@ -44,7 +44,7 @@ def test_elementwise_sum(self, batch_size=st.integers(1, 3), inputs=st.integers(2, 7), inplace=st.booleans(), - **mu.gcs_cpu_ideep) + **mu.gcs_cpu_ideep) # type: ignore[arg-type] def test_elementwise_sum_fallback(self, size, input_channels, @@ -84,7 +84,7 @@ def test_elementwise_sum_fallback(self, batch_size=st.integers(1, 3), inputs=st.integers(2, 7), inplace=st.booleans(), - **mu.gcs_cpu_ideep) + **mu.gcs_cpu_ideep) # type: ignore[arg-type] def test_int8_elementwise_sum(self, size, input_channels, @@ -184,7 +184,7 @@ def test_int8_elementwise_sum(self, print("MSE", MSE) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": unittest.main() diff --git a/caffe2/python/ideep/expanddims_squeeze_op_test.py b/caffe2/python/ideep/expanddims_squeeze_op_test.py index 3693a217bb4bb..4f0976fefb534 100644 --- a/caffe2/python/ideep/expanddims_squeeze_op_test.py +++ b/caffe2/python/ideep/expanddims_squeeze_op_test.py @@ -33,7 +33,7 @@ def test_squeeze(self, squeeze_dims, inplace, gc, dc): @given( squeeze_dims=st.lists(st.integers(0, 3), min_size=1, max_size=3), inplace=st.booleans(), - **mu.gcs_cpu_ideep + **mu.gcs_cpu_ideep # type: ignore[arg-type] ) def test_squeeze_fallback(self, squeeze_dims, inplace, gc, dc): shape = [ @@ -92,7 +92,7 @@ def test_expand_dims(self, squeeze_dims, inplace, gc, dc): @given( squeeze_dims=st.lists(st.integers(0, 3), min_size=1, max_size=3), inplace=st.booleans(), - **mu.gcs_cpu_ideep + **mu.gcs_cpu_ideep # type: ignore[arg-type] ) def test_expand_dims_fallback(self, squeeze_dims, inplace, gc, dc): oshape = [ diff --git a/caffe2/python/ideep/fc_op_test.py b/caffe2/python/ideep/fc_op_test.py index 6549bb6ad6bbc..388fb64d562d8 100644 --- a/caffe2/python/ideep/fc_op_test.py +++ b/caffe2/python/ideep/fc_op_test.py @@ -265,7 +265,7 @@ def test_fc_4_dims(self, n, m, k, gc, dc): self.assertGradientChecks(gc, op, [X, W, b], i, [0]) @given(n=st.integers(2, 5), m=st.integers(2, 5), - k=st.integers(2, 5), **mu.gcs_cpu_ideep) + k=st.integers(2, 5), **mu.gcs_cpu_ideep) # type: ignore[arg-type] def test_int8_fc_4_dims(self, n, m, k, gc, dc): X = np.random.rand(m, k, m, m).astype(np.float32) - 0.5 w = np.random.rand(n, k, m, m).astype(np.float32) - 0.5 @@ -375,7 +375,7 @@ def test_int8_fc_4_dims(self, n, m, k, gc, dc): print("MSE", MSE) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": unittest.main() diff --git a/caffe2/python/ideep/operator_fallback_op_test.py b/caffe2/python/ideep/operator_fallback_op_test.py index dc928c264082b..8b840379ff228 100644 --- a/caffe2/python/ideep/operator_fallback_op_test.py +++ b/caffe2/python/ideep/operator_fallback_op_test.py @@ -92,7 +92,7 @@ def test_in_place(self, stride, pad, kernel, size, print(np.max(np.abs(Y1 - Y0))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": diff --git a/caffe2/python/ideep/order_switch_op_test.py b/caffe2/python/ideep/order_switch_op_test.py index 39ede0d214fe9..4041be3f69280 100644 --- a/caffe2/python/ideep/order_switch_op_test.py +++ b/caffe2/python/ideep/order_switch_op_test.py @@ -74,7 +74,7 @@ def test_nhwc2nchw(self, n, c, h, w, gc, dc): print(np.max(np.abs(Z1 - Z0))) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": diff --git a/caffe2/python/ideep/pool_op_test.py b/caffe2/python/ideep/pool_op_test.py index 9ab3fcddbadb1..2a81fee2330c9 100644 --- a/caffe2/python/ideep/pool_op_test.py +++ b/caffe2/python/ideep/pool_op_test.py @@ -52,7 +52,7 @@ def test_pooling(self, stride, pad, kernel, size, input_channels=st.integers(1, 3), batch_size=st.integers(1, 3), method=st.sampled_from(["MaxPool", "AveragePool"]), - **mu.gcs_cpu_ideep) + **mu.gcs_cpu_ideep) # type: ignore[arg-type] def test_int8_pooling(self, stride, pad, kernel, size, input_channels, batch_size, method, gc, dc): @@ -143,7 +143,7 @@ def test_int8_pooling(self, stride, pad, kernel, size, print("MSE", MSE) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] diff --git a/caffe2/python/ideep/pre_convert_test.py b/caffe2/python/ideep/pre_convert_test.py index 6c0b7ca5d7a7b..1e408cb9f676d 100644 --- a/caffe2/python/ideep/pre_convert_test.py +++ b/caffe2/python/ideep/pre_convert_test.py @@ -91,7 +91,7 @@ def AddTrainingOperators(model, softmax, label): self.assertTrue(False) workspace.ResetWorkspace() - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": unittest.main() diff --git a/caffe2/python/ideep/relu_op_test.py b/caffe2/python/ideep/relu_op_test.py index e2fda68aed2b0..95349144b85dd 100644 --- a/caffe2/python/ideep/relu_op_test.py +++ b/caffe2/python/ideep/relu_op_test.py @@ -36,7 +36,7 @@ def test_relu(self, X, inplace, gc, dc): input_channels=st.integers(1, 3), batch_size=st.integers(1, 3), inplace=st.booleans(), - **mu.gcs_cpu_ideep) + **mu.gcs_cpu_ideep) # type: ignore[arg-type] @settings(max_examples=10, deadline=None) def test_int8_relu(self, size, input_channels, batch_size, inplace, gc, dc): relu_fp32 = core.CreateOperator( @@ -123,7 +123,7 @@ def test_int8_relu(self, size, input_channels, batch_size, inplace, gc, dc): print("MSE", MSE) self.assertTrue(False) - workspace.SwitchWorkspace(old_ws_name) + workspace.SwitchWorkspace(old_ws_name) # type: ignore[call-overload] if __name__ == "__main__": unittest.main() diff --git a/caffe2/python/ideep/transform_ideep_net.py b/caffe2/python/ideep/transform_ideep_net.py index 2d0f35a7406f2..9e516e4fd3d7e 100644 --- a/caffe2/python/ideep/transform_ideep_net.py +++ b/caffe2/python/ideep/transform_ideep_net.py @@ -159,7 +159,7 @@ def fuse_first_bn(net, params, removed_tensors): def fuse_bn(net, params, ignore_failure): # Run until we hit a fixed point - removed_tensors = [] + removed_tensors = [] # type: ignore[var-annotated] while True: (next_net, next_params, removed_tensors) = \ fuse_first_bn(net, params, removed_tensors) @@ -188,7 +188,7 @@ def fuse_first_mul_add(net, params, removed_tensors): if len(blob_uses(net, current.output[0])) != 1: raise Exception("Failure to fuse") - log.info("Fusing at index %s", i) + log.info("Fusing at index %s", i) # type: ignore[name-defined] mul_ = current add_ = next_ batch_norm = copy.deepcopy(mul_) @@ -221,7 +221,7 @@ def s(x): def fuse_mul_add(net, params): # Run until we hit a fixed point - removed_tensors = [] + removed_tensors = [] # type: ignore[var-annotated] while True: (next_net, next_params, removed_tensors) = \ fuse_first_mul_add(net, params, removed_tensors) @@ -276,7 +276,7 @@ def fuse_conv_relu(net): op.device_option.CopyFrom(device_option) new_net = caffe2_pb2.NetDef() - new_net.ParseFromString(C.transform_optimizeForMKLDNN(net.SerializeToString())) + new_net.ParseFromString(C.transform_optimizeForMKLDNN(net.SerializeToString())) # type: ignore[attr-defined] return new_net @@ -327,8 +327,8 @@ def Optimize(args): atol=1e-3, rtol=1e-3) - for i, o in enumerate(predict_net.op): - print("op[{}]: {}".format(i, o.type)) + for i, o in enumerate(predict_net.op): # type: ignore[assignment] + print("op[{}]: {}".format(i, o.type)) # type: ignore[attr-defined] init_net = gen_init_net_from_blobs(param_dict) with open('init_net.pb', 'wb') as f: f.write(init_net.SerializeToString()) diff --git a/caffe2/python/ideep/weightedsum_op_test.py b/caffe2/python/ideep/weightedsum_op_test.py index b1e46fca48514..f0158bbc628e6 100644 --- a/caffe2/python/ideep/weightedsum_op_test.py +++ b/caffe2/python/ideep/weightedsum_op_test.py @@ -16,7 +16,7 @@ class TestWeightedSumOp(hu.HypothesisTestCase): @given(n=st.integers(5, 8), m=st.integers(1, 1), d=st.integers(2, 4), grad_on_w=st.booleans(), - **mu.gcs_ideep_only) + **mu.gcs_ideep_only) # type: ignore[arg-type] def test_weighted_sum(self, n, m, d, grad_on_w, gc, dc): input_names = [] input_vars = [] diff --git a/caffe2/python/layer_model_helper.py b/caffe2/python/layer_model_helper.py index 6a5a3c82dd30c..330619061aec2 100644 --- a/caffe2/python/layer_model_helper.py +++ b/caffe2/python/layer_model_helper.py @@ -125,7 +125,7 @@ def add_ad_hoc_plot_blob(self, blob, dtype=None): assert isinstance( blob, (str, core.BlobReference) ), "expect type str or BlobReference, but got {}".format(type(blob)) - dtype = dtype or (np.float, (1, )) + dtype = dtype or (np.float, (1, )) # type: ignore[attr-defined] self.add_metric_field(str(blob), schema.Scalar(dtype, blob)) self.ad_hoc_plot_blobs.append(blob) @@ -149,9 +149,9 @@ def _get_global_constant_initializer_op( op_name = 'GivenTensorIntFill' elif array.dtype == np.int64: op_name = 'GivenTensorInt64Fill' - elif array.dtype == np.str: + elif array.dtype == np.str: # type: ignore[attr-defined] op_name = 'GivenTensorStringFill' - elif array.dtype == np.bool: + elif array.dtype == np.bool: # type: ignore[attr-defined] op_name = 'GivenTensorBoolFill' else: op_name = 'GivenTensorFill' @@ -282,7 +282,7 @@ def _validate_param_optim(self, param_name, optim): ) elif isinstance(optim, Optimizer): assert isinstance(ref_optim, Optimizer), ( - "Optim for {} is an instance of Optimizer. However, the optimizer " + "Optim for {} is an instance of Optimizer. However, the optimizer " # type: ignore[str-format] "for the parameters shared with {} is {} which is not an instance " "of Optimizer. Please check the optimizer specified for other " " parameters in the shared group to ensure consistency.".format( diff --git a/caffe2/python/layer_parameter_sharing_test.py b/caffe2/python/layer_parameter_sharing_test.py index 8e1831a2ff350..b194ec49678d0 100644 --- a/caffe2/python/layer_parameter_sharing_test.py +++ b/caffe2/python/layer_parameter_sharing_test.py @@ -140,7 +140,7 @@ def test_layer_duplicated_parameter_init(self): train_net = core.Net('train_net') for layer in self.model.layers: layer.add_operators(train_net, train_init_net) - op_outputs = [] + op_outputs = [] # type: ignore[var-annotated] for op in train_init_net._net.op: op_outputs.extend(op.output) diff --git a/caffe2/python/layers/__init__.py b/caffe2/python/layers/__init__.py index 487b7751fd081..c5204bafac856 100644 --- a/caffe2/python/layers/__init__.py +++ b/caffe2/python/layers/__init__.py @@ -32,7 +32,7 @@ def find_subclasses_recursively(base_cls, sub_cls): import_recursive(sys.modules[__name__]) -model_layer_subcls = set() +model_layer_subcls = set() # type: ignore[var-annotated] find_subclasses_recursively(layers.ModelLayer, model_layer_subcls) for cls in list(model_layer_subcls): diff --git a/caffe2/python/layers/adaptive_weight.py b/caffe2/python/layers/adaptive_weight.py index 146a0bdb1974b..c9c487452db2a 100644 --- a/caffe2/python/layers/adaptive_weight.py +++ b/caffe2/python/layers/adaptive_weight.py @@ -118,7 +118,7 @@ def inv_var_init(self): if self.pos_optim_method == "log_barrier": regularizer = LogBarrier(reg_lambda=self.reg_lambda) elif self.pos_optim_method == "pos_grad_proj": - regularizer = BoundedGradientProjection(lb=0, left_open=True) + regularizer = BoundedGradientProjection(lb=0, left_open=True) # type: ignore[assignment] else: raise TypeError( "unknown positivity optimization method: {}".format( diff --git a/caffe2/python/layers/concat.py b/caffe2/python/layers/concat.py index fb1dc6ab6dbfd..929fd1c38d144 100644 --- a/caffe2/python/layers/concat.py +++ b/caffe2/python/layers/concat.py @@ -117,8 +117,8 @@ def __init__(self, model, input_record, axis=1, add_axis=0, record_to_concat ) if concated_feature_to_index: - metadata = schema.Metadata( - feature_specs=schema.FeatureSpec( + metadata = schema.Metadata( # type: ignore[call-arg] + feature_specs=schema.FeatureSpec( # type: ignore[call-arg] feature_to_index=concated_feature_to_index ) ) diff --git a/caffe2/python/layers/fc.py b/caffe2/python/layers/fc.py index 9220f22165a31..eaf1beb59f994 100644 --- a/caffe2/python/layers/fc.py +++ b/caffe2/python/layers/fc.py @@ -108,8 +108,8 @@ def __init__(self, model, input_record, output_dims, weight_init=None, if axis == 1: output_shape = (output_dims, ) else: - output_shape = list(input_record.field_types()[0].shape)[0: axis - 1] - output_shape = tuple(output_shape + [output_dims]) + output_shape = list(input_record.field_types()[0].shape)[0: axis - 1] # type: ignore[assignment] + output_shape = tuple(output_shape + [output_dims]) # type: ignore[assignment, operator] self.output_schema = schema.Scalar( (np.float32, output_shape), diff --git a/caffe2/python/layers/fc_with_bootstrap.py b/caffe2/python/layers/fc_with_bootstrap.py index b3c2eb346f969..66634aa3e379a 100644 --- a/caffe2/python/layers/fc_with_bootstrap.py +++ b/caffe2/python/layers/fc_with_bootstrap.py @@ -166,8 +166,8 @@ def __init__( if axis == 1: output_shape = (output_dims,) else: - output_shape = list(input_record.field_types()[0].shape)[0 : axis - 1] - output_shape = tuple(output_shape + [output_dims]) + output_shape = list(input_record.field_types()[0].shape)[0 : axis - 1] # type: ignore[assignment] + output_shape = tuple(output_shape + [output_dims]) # type: ignore[assignment, operator] def _generate_bootstrapped_indices(self, net, copied_cur_layer, iteration): """ diff --git a/caffe2/python/layers/feature_sparse_to_dense.py b/caffe2/python/layers/feature_sparse_to_dense.py index ca004d136ded2..cbd38d31d2f1b 100644 --- a/caffe2/python/layers/feature_sparse_to_dense.py +++ b/caffe2/python/layers/feature_sparse_to_dense.py @@ -57,7 +57,7 @@ def __init__( ) elif feature_specs.feature_type == "ID_LIST": outputs.append( - ( + ( # type: ignore[arg-type] field, schema.Struct( ( @@ -79,7 +79,7 @@ def __init__( ) elif feature_specs.feature_type == "ID_SCORE_LIST": outputs.append( - ( + ( # type: ignore[arg-type] field, schema.Struct( ( @@ -111,7 +111,7 @@ def __init__( # Even though they should match dimensions from feature config, # we keep ranges blob to check input data later. outputs.append( - ( + ( # type: ignore[arg-type] field, schema.Struct( ( @@ -139,7 +139,7 @@ def __init__( # generic type enum 1. If new types are implemented, we need to # modify the ParseGeneric operator, and this part accordingly outputs.append( - ( + ( # type: ignore[arg-type] field, schema.Struct( ( @@ -177,7 +177,7 @@ def __init__( # not worse it? for field, feature_specs in input_specs: schema.attach_metadata_to_scalars( - self.output_schema[field], schema.Metadata(feature_specs=feature_specs) + self.output_schema[field], schema.Metadata(feature_specs=feature_specs) # type: ignore[call-arg] ) # Add operators to all types that need to be densified diff --git a/caffe2/python/layers/functional.py b/caffe2/python/layers/functional.py index bc47c474ac8f6..7e322aff06ca7 100644 --- a/caffe2/python/layers/functional.py +++ b/caffe2/python/layers/functional.py @@ -85,7 +85,7 @@ def __init__(self, model, input_record, output_names_or_num, function, continue if shapes[blob] == []: # Scalar type - shape = tuple() + shape = tuple() # type: ignore[var-annotated] elif shapes[blob][0] == 0: shape = tuple(shapes[blob][1:]) else: diff --git a/caffe2/python/layers/layers.py b/caffe2/python/layers/layers.py index abcdd15962205..e30fa0a73b718 100644 --- a/caffe2/python/layers/layers.py +++ b/caffe2/python/layers/layers.py @@ -88,15 +88,15 @@ def set_request_only(field): for f in field.all_scalars(): categorical_limit, expected_value = None, None if not f.metadata: - feature_specs = schema.FeatureSpec(feature_is_request_only=True) + feature_specs = schema.FeatureSpec(feature_is_request_only=True) # type: ignore[call-arg] elif not f.metadata.feature_specs: categorical_limit = f.metadata.categorical_limit expected_value = f.metadata.expected_value - feature_specs = schema.FeatureSpec(feature_is_request_only=True) + feature_specs = schema.FeatureSpec(feature_is_request_only=True) # type: ignore[call-arg] else: categorical_limit = f.metadata.categorical_limit expected_value = f.metadata.expected_value - feature_specs = schema.FeatureSpec( + feature_specs = schema.FeatureSpec( # type: ignore[call-arg] feature_type=f.metadata.feature_specs.feature_type, feature_names=f.metadata.feature_specs.feature_names, feature_ids=f.metadata.feature_specs.feature_ids, diff --git a/caffe2/python/layers/merge_id_lists.py b/caffe2/python/layers/merge_id_lists.py index b076cd8c5e750..2f13dfeeca0f0 100644 --- a/caffe2/python/layers/merge_id_lists.py +++ b/caffe2/python/layers/merge_id_lists.py @@ -42,7 +42,7 @@ def __init__(self, model, input_record, name='merged'): schema.Scalar( np.int64, blob=model.net.NextBlob(name), - metadata=schema.Metadata(categorical_limit=merge_dim) + metadata=schema.Metadata(categorical_limit=merge_dim) # type: ignore[call-arg] ))) def add_ops(self, net): diff --git a/caffe2/python/layers/pairwise_similarity.py b/caffe2/python/layers/pairwise_similarity.py index 5020e5432c2a5..3ae6754169ed9 100644 --- a/caffe2/python/layers/pairwise_similarity.py +++ b/caffe2/python/layers/pairwise_similarity.py @@ -50,7 +50,7 @@ def __init__(self, model, input_record, output_dim, pairwise_similarity_func='do ) self.indices_to_gather = indices_to_gather else: - self.indices_to_gather = None + self.indices_to_gather = None # type: ignore[assignment] self.x_embeddings = x_embeddings self.y_embeddings = y_embeddings diff --git a/caffe2/python/layers/sampling_trainable_mixin.py b/caffe2/python/layers/sampling_trainable_mixin.py index 79c928d212528..15ebecc235068 100644 --- a/caffe2/python/layers/sampling_trainable_mixin.py +++ b/caffe2/python/layers/sampling_trainable_mixin.py @@ -11,7 +11,7 @@ class SamplingTrainableMixin(metaclass=abc.ABCMeta): def __init__(self, *args, **kwargs): - super(SamplingTrainableMixin, self).__init__(*args, **kwargs) + super(SamplingTrainableMixin, self).__init__(*args, **kwargs) # type: ignore[call-arg] self._train_param_blobs = None self._train_param_blobs_frozen = False diff --git a/caffe2/python/layers/select_record_by_context.py b/caffe2/python/layers/select_record_by_context.py index 49e42ca308d77..1f962eeff1ed9 100644 --- a/caffe2/python/layers/select_record_by_context.py +++ b/caffe2/python/layers/select_record_by_context.py @@ -44,7 +44,7 @@ def __init__( if (default_output_record_field is not None) else None ) ref_record = input_record[0] - for record in input_record: + for record in input_record: # type: ignore[attr-defined] assert schema.equal_schemas(record, ref_record, check_field_metas=check_field_metas) diff --git a/caffe2/python/layers/sparse_lookup.py b/caffe2/python/layers/sparse_lookup.py index dd1c42606063c..fe5039212311b 100644 --- a/caffe2/python/layers/sparse_lookup.py +++ b/caffe2/python/layers/sparse_lookup.py @@ -32,13 +32,13 @@ def get_trainer_version_based_on_optim(optim_def): if isinstance(optim_def, Optimizer) and hasattr(optim_def, "engine"): logger.info( - "Attempting to set trainer version for engine {}".format(optim_def.engine) + "Attempting to set trainer version for engine {}".format(optim_def.engine) # type: ignore[attr-defined] ) - if optim_def.engine in FP16_ENGINES: - logger.info("Setting FP16 trainer for engine {}".format(optim_def.engine)) + if optim_def.engine in FP16_ENGINES: # type: ignore[attr-defined] + logger.info("Setting FP16 trainer for engine {}".format(optim_def.engine)) # type: ignore[attr-defined] return "fp16" else: - logger.info("Setting FP32 trainer for engine {}".format(optim_def.engine)) + logger.info("Setting FP32 trainer for engine {}".format(optim_def.engine)) # type: ignore[attr-defined] return "fp32" else: return "fp32" @@ -181,7 +181,7 @@ def __init__(self, model, input_record, inner_shape, reducer, ) self.input_dim = input_dim - self.shape = [input_dim] + inner_shape + self.shape = [input_dim] + inner_shape # type: ignore[operator] self.trainer_version = get_trainer_version_based_on_optim( weight_optim @@ -282,10 +282,10 @@ def get_8bits_compatible_parameters(self, fused=True): ) return [RowwiseQuantized8BitsWeight(self.w)] else: - RowwiseQuantized8BitsWeight = collections.namedtuple( + RowwiseQuantized8BitsWeight = collections.namedtuple( # type: ignore[no-redef] 'RowwiseQuantized8BitsWeight', 'w, scale_bias' ) - return [RowwiseQuantized8BitsWeight(self.w, self.scale_bias)] + return [RowwiseQuantized8BitsWeight(self.w, self.scale_bias)] # type: ignore[call-arg] def _get_default_init_op(self): scale = math.sqrt(self.uniform_weight_init_scale_numerator / self.input_dim) @@ -297,7 +297,7 @@ def _get_default_init_op(self): else: raise NotImplementedError( "Train version {} is not currently supported for sparse feature {}".format( - trainer_version, self.sparse_key + trainer_version, self.sparse_key # type: ignore[name-defined] ) ) @@ -525,7 +525,7 @@ def _add_ops(self, net, version='fp32', is_train=True): elif _is_id_score_list(self.input_record): self._add_ops_id_score_list(net, version=version) else: - raise "Unsupported input type {0}".format(self.input_record) + raise "Unsupported input type {0}".format(self.input_record) # type: ignore[misc] def add_train_ops(self, net): self._add_ops(net, self.trainer_version, is_train=True) diff --git a/caffe2/python/layers/tags.py b/caffe2/python/layers/tags.py index 1913ef5425bd9..033a1963d3c25 100644 --- a/caffe2/python/layers/tags.py +++ b/caffe2/python/layers/tags.py @@ -112,11 +112,11 @@ def wrapper(*args, **kwargs): # pyre-fixme[16]: Tags has no attribute `TRAIN_ONLY` -Tags.TRAIN_ONLY = [Tags.EXCLUDE_FROM_PREDICTION, Tags.EXCLUDE_FROM_EVAL, +Tags.TRAIN_ONLY = [Tags.EXCLUDE_FROM_PREDICTION, Tags.EXCLUDE_FROM_EVAL, # type: ignore[attr-defined] Tags.EXCLUDE_FROM_ACCUMULATE_PRED] # pyre-fixme[16]: Tags has no attribute `EVAL_ONLY` -Tags.EVAL_ONLY = [Tags.EXCLUDE_FROM_PREDICTION, Tags.EXCLUDE_FROM_TRAIN, +Tags.EVAL_ONLY = [Tags.EXCLUDE_FROM_PREDICTION, Tags.EXCLUDE_FROM_TRAIN, # type: ignore[attr-defined] Tags.EXCLUDE_FROM_ACCUMULATE_PRED] # pyre-fixme[16]: Tags has no attribute `PREDICTION_ONLY` -Tags.PREDICTION_ONLY = [Tags.EXCLUDE_FROM_TRAIN, Tags.EXCLUDE_FROM_EVAL, +Tags.PREDICTION_ONLY = [Tags.EXCLUDE_FROM_TRAIN, Tags.EXCLUDE_FROM_EVAL, # type: ignore[attr-defined] Tags.EXCLUDE_FROM_ACCUMULATE_PRED] diff --git a/caffe2/python/layers_test.py b/caffe2/python/layers_test.py index e084a011d3577..62a67fc19c133 100644 --- a/caffe2/python/layers_test.py +++ b/caffe2/python/layers_test.py @@ -393,7 +393,7 @@ def testSparseLookupSumPoolingWithEviction(self): ('sparse', schema.Struct( ('sparse_feature_0', schema.ListWithEvicted( schema.Scalar(np.int64, - metadata=schema.Metadata(categorical_limit=1)),)),)), + metadata=schema.Metadata(categorical_limit=1)),)),)), # type: ignore[call-arg] )) embedding_dim = 8 lengths_blob = record.sparse.sparse_feature_0.lengths.get() @@ -432,7 +432,7 @@ def testSparseLookupSumPooling(self): ('sparse', schema.Struct( ('sparse_feature_0', schema.List( schema.Scalar(np.int64, - metadata=schema.Metadata(categorical_limit=1000)))), + metadata=schema.Metadata(categorical_limit=1000)))), # type: ignore[call-arg] )), )) embedding_dim = 64 @@ -478,7 +478,7 @@ def testSparseFeatureHashIdList(self, use_hashing, modulo, use_divide_mod, divis self.model.net, schema.List(schema.Scalar( np.int64, - metadata=schema.Metadata(categorical_limit=60000) + metadata=schema.Metadata(categorical_limit=60000) # type: ignore[call-arg] )) ) use_divide_mod = use_divide_mod if use_hashing is False else False @@ -508,7 +508,7 @@ def testSparseFeatureHashIdList(self, use_hashing, modulo, use_divide_mod, divis def testSparseFeatureHashIdScoreList(self, use_hashing, modulo): record = schema.NewRecord(self.model.net, schema.Map(schema.Scalar(np.int64, - metadata=schema.Metadata( + metadata=schema.Metadata( # type: ignore[call-arg] categorical_limit=60000)), np.float32)) @@ -533,7 +533,7 @@ def testSparseLookupIncorrectPositionWeightedOnIdList(self): ('sparse', schema.Struct( ('sparse_feature_0', schema.List( schema.Scalar(np.int64, - metadata=schema.Metadata(categorical_limit=1000)))), + metadata=schema.Metadata(categorical_limit=1000)))), # type: ignore[call-arg] )), )) @@ -547,7 +547,7 @@ def testSparseLookupPositionWeightedOnIdList(self): ('sparse', schema.Struct( ('sparse_feature_0', schema.List( schema.Scalar(np.int64, - metadata=schema.Metadata(categorical_limit=1000)))), + metadata=schema.Metadata(categorical_limit=1000)))), # type: ignore[call-arg] )), )) @@ -599,7 +599,7 @@ def testSparseLookupPositionWeightedOnIdScoreList(self): ('id_score_list_0', schema.Map( schema.Scalar( np.int64, - metadata=schema.Metadata( + metadata=schema.Metadata( # type: ignore[call-arg] categorical_limit=1000 ), ), @@ -650,7 +650,7 @@ def testSparseLookupIncorrectRecencyWeightedOnIdList(self): ('sparse', schema.Struct( ('sparse_feature_0', schema.List( schema.Scalar(np.int64, - metadata=schema.Metadata(categorical_limit=1000)))), + metadata=schema.Metadata(categorical_limit=1000)))), # type: ignore[call-arg] )), )) @@ -665,7 +665,7 @@ def testSparseLookupRecencyWeightedOnIdScoreList(self): ('id_score_list_0', schema.Map( schema.Scalar( np.int64, - metadata=schema.Metadata( + metadata=schema.Metadata( # type: ignore[call-arg] categorical_limit=1000 ), ), @@ -1120,7 +1120,7 @@ def testLayerNormalization(self, X, use_layer_norm_op): expect = (5, 6,) if not use_layer_norm_op: X = X.reshape(10, 6) - expect = (6,) + expect = (6,) # type: ignore[assignment] input_record = self.new_record(schema.Scalar((np.float32, expect))) schema.FeedRecord(input_record, [X]) ln_output = self.model.LayerNormalization( @@ -1222,9 +1222,9 @@ def testGatherRecord(self): indices = np.array([1, 3, 4], dtype=np.int32) dense = np.array(list(range(20)), dtype=np.float32).reshape(10, 2) lengths = np.array(list(range(10)), dtype=np.int32) - items = np.array(list(range(lengths.sum())), dtype=np.int64) - items_lengths = np.array(list(range(lengths.sum())), dtype=np.int32) - items_items = np.array(list(range(items_lengths.sum())), dtype=np.int64) + items = np.array(list(range(lengths.sum())), dtype=np.int64) # type: ignore[call-overload] + items_lengths = np.array(list(range(lengths.sum())), dtype=np.int32) # type: ignore[call-overload] + items_items = np.array(list(range(items_lengths.sum())), dtype=np.int64) # type: ignore[call-overload] record = self.new_record(schema.Struct( ('dense', schema.Scalar(np.float32)), ('sparse', schema.Struct( @@ -1560,7 +1560,7 @@ def testSetRequestOnly(self): schema.Metadata( categorical_limit=100000000, expected_value=99, - feature_specs=schema.FeatureSpec( + feature_specs=schema.FeatureSpec( # type: ignore[call-arg] feature_ids=[1, 100, 1001] ) ) @@ -1657,7 +1657,7 @@ def testMergeIdListsLayer(self, num_inputs, batch_size): inputs.append(values) input_schema = schema.Tuple( *[schema.List( - schema.Scalar(dtype=np.int64, metadata=schema.Metadata( + schema.Scalar(dtype=np.int64, metadata=schema.Metadata( # type: ignore[call-arg] categorical_limit=20 ))) for _ in range(num_inputs)] ) @@ -2347,7 +2347,7 @@ def testFeatureSparseToDenseGetAccessedFeatures(self): input_specs = [ ( float_features_column, - schema.FeatureSpec( + schema.FeatureSpec( # type: ignore[call-arg] feature_type=float_features_type, feature_ids=float_features_ids, feature_names=feature_names, @@ -2355,7 +2355,7 @@ def testFeatureSparseToDenseGetAccessedFeatures(self): ), ( id_list_features_column, - schema.FeatureSpec( + schema.FeatureSpec( # type: ignore[call-arg] feature_type=id_list_features_type, feature_ids=id_list_features_ids, feature_names=feature_names, @@ -2363,7 +2363,7 @@ def testFeatureSparseToDenseGetAccessedFeatures(self): ), ( id_score_list_features_column, - schema.FeatureSpec( + schema.FeatureSpec( # type: ignore[call-arg] feature_type=id_score_list_features_type, feature_ids=id_score_list_features_ids, feature_names=feature_names, @@ -2412,7 +2412,7 @@ def old_get_sparse_key_logic(input_record): schema.Map( schema.Scalar( np.int64, - metadata=schema.Metadata( + metadata=schema.Metadata( # type: ignore[call-arg] categorical_limit=1000 ), ), @@ -2430,7 +2430,7 @@ def old_get_sparse_key_logic(input_record): schema.List( schema.Scalar( np.int64, - metadata=schema.Metadata(categorical_limit=1000) + metadata=schema.Metadata(categorical_limit=1000) # type: ignore[call-arg] ) ) ) @@ -2446,7 +2446,7 @@ def testSparseLookupWithAttentionWeightOnIdScoreList(self): schema.Map( schema.Scalar( np.int64, - metadata=schema.Metadata(categorical_limit=1000), + metadata=schema.Metadata(categorical_limit=1000), # type: ignore[call-arg] ), np.float32, ), diff --git a/caffe2/python/lazy_dyndep.py b/caffe2/python/lazy_dyndep.py index e53d4fda350b3..243bdb22ccca7 100644 --- a/caffe2/python/lazy_dyndep.py +++ b/caffe2/python/lazy_dyndep.py @@ -41,7 +41,7 @@ def RegisterOpsLibrary(name): _LAZY_IMPORTED_DYNDEPS.add(name) -_LAZY_IMPORTED_DYNDEPS = set() +_LAZY_IMPORTED_DYNDEPS = set() # type: ignore[var-annotated] _error_handler = None @@ -74,7 +74,7 @@ def _import_lazy(): return for name in list(_LAZY_IMPORTED_DYNDEPS): try: - dyndep.InitOpLibrary(name, trigger_lazy=False) + dyndep.InitOpLibrary(name, trigger_lazy=False) # type: ignore[attr-defined] except BaseException as e: if _error_handler: _error_handler(e) diff --git a/caffe2/python/lazy_dyndep_test.py b/caffe2/python/lazy_dyndep_test.py index d8d08b3ffdf99..090dd43372477 100644 --- a/caffe2/python/lazy_dyndep_test.py +++ b/caffe2/python/lazy_dyndep_test.py @@ -47,7 +47,7 @@ def allcompare_process(filestore_dir, process_id, data, num_procs): ) model = ModelHelper() - model._rendezvous = rendezvous + model._rendezvous = rendezvous # type: ignore[attr-defined] workspace.FeedBlob("test_data", data) diff --git a/caffe2/python/lengths_reducer_fused_8bit_rowwise_ops_test.py b/caffe2/python/lengths_reducer_fused_8bit_rowwise_ops_test.py index 718b7fb3a9877..c55b179737f50 100644 --- a/caffe2/python/lengths_reducer_fused_8bit_rowwise_ops_test.py +++ b/caffe2/python/lengths_reducer_fused_8bit_rowwise_ops_test.py @@ -59,10 +59,10 @@ def test_sparse_lengths_sum( # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] indices = np.random.randint( low=0, high=len(input_data), size=[num_indices], dtype=np.int32 ) @@ -147,10 +147,10 @@ def test_sparse_lengths_mean(self, num_rows, blocksize, seed, empty_indices, fp1 # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] indices = np.random.randint( low=0, high=len(input_data), size=[num_indices], dtype=np.int32 ) diff --git a/caffe2/python/memonger.py b/caffe2/python/memonger.py index 6225781bc429a..b2ef8aecb889e 100644 --- a/caffe2/python/memonger.py +++ b/caffe2/python/memonger.py @@ -69,7 +69,7 @@ def is_grad_op(op): activations.append(b) # Remove last activations, as they are usually accessed externally - activations = set(activations[:-2]) + activations = set(activations[:-2]) # type: ignore[assignment] # Gradient ops grad_op_indices = [] @@ -83,7 +83,7 @@ def is_grad_op(op): if is_grad_blob(b) or (share_activations and b in activations): shared_blobs.add(b) start_time = time.time() - optim_str = C.memonger_compute_blob_recycling_for_dag( + optim_str = C.memonger_compute_blob_recycling_for_dag( # type: ignore[attr-defined] netproto.SerializeToString(), [str(s).encode('utf-8') for s in losses], grad_op_indices, @@ -115,7 +115,7 @@ def is_activation_blob(b): return b not in external_input and b not in external_output activation_blobs = set() - seen_as_output = set() + seen_as_output = set() # type: ignore[var-annotated] ops = list(net.Proto().op) op_indices = [index for index, op in enumerate(net.Proto().op)] @@ -134,7 +134,7 @@ def is_activation_blob(b): assert not op.is_gradient_op, \ "You can only pass inference-only nets to optimize_inference_for_dag" start_time = time.time() - optim_str = C.memonger_compute_blob_recycling_for_dag( + optim_str = C.memonger_compute_blob_recycling_for_dag( # type: ignore[attr-defined] netproto.SerializeToString(), [str(s).encode('utf-8') for s in input_blobs], op_indices, @@ -199,13 +199,13 @@ def num_bytes(blob): return sizeof * np.prod(shapes[blob]) protos = [split_net(proto) for proto in protos] - allocs_by_ops = collections.defaultdict(lambda: 0) + allocs_by_ops = collections.defaultdict(lambda: 0) # type: ignore[var-annotated] # Evaluate current_allocated = 0 max_allocated = 0 total_allocated = 0 - allocated = set() + allocated = set() # type: ignore[var-annotated] for proto in protos: for op in proto.op: if op.type == "Free" or op.type == "Alias": @@ -471,7 +471,7 @@ def compute_ranges(linearized_ops, blob_sizes=None): if not blob_sizes: log.warning('Provide blob sizes to get more accurate assignments.') - blobs = collections.defaultdict( + blobs = collections.defaultdict( # type: ignore[var-annotated] lambda: LiveRange(defined=None, used=None, size=None)) for i, op in enumerate(linearized_ops): for blob in op.input: @@ -664,7 +664,7 @@ def _find_best(ranges, init_assignment, prev_best_assignment, counter): init_assignment = init_assignment or [] # best_assignments[k]: best assignments for first k blobs ranges_sorted[0:(k+1)] - best_assignments = [] + best_assignments = [] # type: ignore[var-annotated] # Find best assignment for blobs ranges_sorted[0:ii] for ii, cur_range in enumerate(ranges_sorted): # closest best_assignment that is independent of ranges_sorted[ii] @@ -823,7 +823,7 @@ class AssignmentAlgorithm(enum.Enum): def optimize_inference_fast(net, static_blobs): optim = caffe2_pb2.NetDef() - optim_str = C.memonger_optimize_inference_net( + optim_str = C.memonger_optimize_inference_net( # type: ignore[attr-defined] net.SerializeToString(), [str(s).encode('utf-8') for s in static_blobs] ) @@ -914,8 +914,8 @@ def verify_graph_equality(net_a, net_b): """ def parent_list(ops): - parent_list = [[] for _ in ops] - edge_owner = {} + parent_list = [[] for _ in ops] # type: ignore[var-annotated] + edge_owner = {} # type: ignore[var-annotated] for i, op in enumerate(ops): for blob in op.input: parent_id = edge_owner.get(blob) diff --git a/caffe2/python/memonger_test.py b/caffe2/python/memonger_test.py index a54cf95302e51..fd8ec48133030 100644 --- a/caffe2/python/memonger_test.py +++ b/caffe2/python/memonger_test.py @@ -21,7 +21,7 @@ def has_blob(proto, needle): def count_blobs(proto): - blobs = set() + blobs = set() # type: ignore[var-annotated] for op in proto.op: blobs = blobs.union(set(op.input)).union(set(op.output)) return len(blobs) @@ -128,7 +128,7 @@ def test_fast_memonger_unique_outputs(self): fc = [] for i in range(2): z = brew.fc( - m, "data{}".format(i), "fc".format(i), dim_in=2, dim_out=2) + m, "data{}".format(i), "fc".format(i), dim_in=2, dim_out=2) # type: ignore[str-format] fc.append(z) r = [] # Trick is here to have same input appear twice in a same Sum @@ -254,7 +254,7 @@ def test_memonger_mix_cpu_gpu(self): # Create set of blobs on CPU side and GPU side and check they don't # overlap - device_blobs = {caffe2_pb2.CPU: set(), workspace.GpuDeviceType: set()} + device_blobs = {caffe2_pb2.CPU: set(), workspace.GpuDeviceType: set()} # type: ignore[var-annotated] for op in optim_proto.op: if op.type not in ['CopyCPUToGPU', "CopyGPUToCPU"]: dev = op.device_option.device_type diff --git a/caffe2/python/mint/app.py b/caffe2/python/mint/app.py index 8ddf7a9804340..7ea140fb11e22 100644 --- a/caffe2/python/mint/app.py +++ b/caffe2/python/mint/app.py @@ -44,13 +44,13 @@ def visualize_summary(filename): chart_name = os.path.splitext(os.path.basename(filename))[0] chart = nvd3.lineChart( name=chart_name + '_summary_chart', - height=args.chart_height, + height=args.chart_height, # type: ignore[attr-defined] y_axis_format='.03g' ) - if args.sample < 0: - step = max(data.shape[0] / -args.sample, 1) + if args.sample < 0: # type: ignore[attr-defined] + step = max(data.shape[0] / -args.sample, 1) # type: ignore[attr-defined] else: - step = args.sample + step = args.sample # type: ignore[attr-defined] xdata = np.arange(0, data.shape[0], step) # data should have 4 dimensions. chart.add_serie(x=xdata, y=data[xdata, 0], name='min') @@ -71,13 +71,13 @@ def visualize_print_log(filename): chart_name = os.path.splitext(os.path.basename(filename))[0] chart = nvd3.lineChart( name=chart_name + '_log_chart', - height=args.chart_height, + height=args.chart_height, # type: ignore[attr-defined] y_axis_format='.03g' ) - if args.sample < 0: - step = max(data.shape[0] / -args.sample, 1) + if args.sample < 0: # type: ignore[attr-defined] + step = max(data.shape[0] / -args.sample, 1) # type: ignore[attr-defined] else: - step = args.sample + step = args.sample # type: ignore[attr-defined] xdata = np.arange(0, data.shape[0], step) # if there is only one curve, we also show the running min and max if data.shape[1] == 1: @@ -96,7 +96,7 @@ def visualize_print_log(filename): ) chart.add_serie(x=xdata, y=data[xdata, 0], name=chart_name) else: - for i in range(0, min(data.shape[1], args.max_curves)): + for i in range(0, min(data.shape[1], args.max_curves)): # type: ignore[attr-defined] # data should have 4 dimensions. chart.add_serie( x=xdata, @@ -108,7 +108,7 @@ def visualize_print_log(filename): def visualize_file(filename): - fullname = os.path.join(args.root, filename) + fullname = os.path.join(args.root, filename) # type: ignore[attr-defined] if filename.endswith('summary'): return visualize_summary(fullname) elif filename.endswith('log'): @@ -122,12 +122,12 @@ def visualize_file(filename): @app.route('/') def index(): - files = glob.glob(os.path.join(args.root, "*.*")) + files = glob.glob(os.path.join(args.root, "*.*")) # type: ignore[attr-defined] files.sort() names = [os.path.basename(f) for f in files] return flask.render_template( 'index.html', - root=args.root, + root=args.root, # type: ignore[attr-defined] names=names, debug_messages=names ) diff --git a/caffe2/python/mkl/mkl_fill_op_test.py b/caffe2/python/mkl/mkl_fill_op_test.py index f233275786f7f..bb605783d54a4 100644 --- a/caffe2/python/mkl/mkl_fill_op_test.py +++ b/caffe2/python/mkl/mkl_fill_op_test.py @@ -20,7 +20,7 @@ class MKLFillTest(hu.HypothesisTestCase): ["XavierFill", "ConstantFill", "GaussianFill", "MSRAFill"] ), seed=st.integers(5, 10), - **mu.gcs_cpu_mkl) + **mu.gcs_cpu_mkl) # type: ignore[arg-type] def test_mkl_fill(self, n, c, h, w, filler, seed, gc, dc): op = core.CreateOperator( filler, diff --git a/caffe2/python/model_helper.py b/caffe2/python/model_helper.py index 5eb81d898b33f..ec06be1a83b63 100644 --- a/caffe2/python/model_helper.py +++ b/caffe2/python/model_helper.py @@ -414,7 +414,7 @@ def TensorProtosDBInput( """You cannot pass reader to model_helper.TensorProtosDBInput. Use model.net.TensorProtosDBInput instead to create the op.""" - return db_input( + return db_input( # type: ignore[call-arg] self, blob_out, batch_size, db, db_type, **kwargs) def GetDevices(self): @@ -431,7 +431,7 @@ def __getattr__(self, op_type): raise AttributeError( 'Method ' + op_type + ' is not a registered operator.' + ' Did you mean: [' + - ','.join(workspace.C.nearby_opnames(op_type)) + ']' + ','.join(workspace.C.nearby_opnames(op_type)) + ']' # type: ignore[attr-defined] ) if op_type not in _known_working_ops: if not self.allow_not_known_ops: diff --git a/caffe2/python/modeling/compute_norm_for_blobs.py b/caffe2/python/modeling/compute_norm_for_blobs.py index 24ed7a7482c70..91f4421903abd 100644 --- a/caffe2/python/modeling/compute_norm_for_blobs.py +++ b/caffe2/python/modeling/compute_norm_for_blobs.py @@ -81,7 +81,7 @@ def modify_net(self, net, init_net=None, grad_map=None, blob_to_device=None, if modify_output_record: output_field_name = str(blob) + self._field_name_suffix - output_scalar = schema.Scalar((np.float, (1,)), norm) + output_scalar = schema.Scalar((np.float, (1,)), norm) # type: ignore[attr-defined] if net.output_record() is None: net.set_output_record( diff --git a/caffe2/python/modeling/compute_statistics_for_blobs.py b/caffe2/python/modeling/compute_statistics_for_blobs.py index 588b4a827cb82..f9bee5ff8a28d 100644 --- a/caffe2/python/modeling/compute_statistics_for_blobs.py +++ b/caffe2/python/modeling/compute_statistics_for_blobs.py @@ -39,7 +39,7 @@ def modify_net(self, net, init_net=None, grad_map=None, blob_to_device=None, if modify_output_record: output_field_name = str(blob) + self._field_name_suffix - output_scalar = schema.Scalar((np.float, (1,)), stats) + output_scalar = schema.Scalar((np.float, (1,)), stats) # type: ignore[attr-defined] if net.output_record() is None: net.set_output_record( diff --git a/caffe2/python/modeling/get_entry_from_blobs.py b/caffe2/python/modeling/get_entry_from_blobs.py index 061dfe33991bb..497df2ff293d7 100644 --- a/caffe2/python/modeling/get_entry_from_blobs.py +++ b/caffe2/python/modeling/get_entry_from_blobs.py @@ -70,7 +70,7 @@ def modify_net(self, net, init_net=None, grad_map=None, blob_to_device=None, if modify_output_record: output_field_name = str(blob) + self._field_name_suffix - output_scalar = schema.Scalar((np.float), blob_i1_i2) + output_scalar = schema.Scalar((np.float), blob_i1_i2) # type: ignore[attr-defined] if net.output_record() is None: net.set_output_record( diff --git a/caffe2/python/modeling/net_modifier.py b/caffe2/python/modeling/net_modifier.py index c0545fad08f51..3765f4c15dd06 100644 --- a/caffe2/python/modeling/net_modifier.py +++ b/caffe2/python/modeling/net_modifier.py @@ -26,7 +26,7 @@ def modify_net(self, net, init_net=None, grad_map=None, blob_to_device=None): def __call__(self, net, init_net=None, grad_map=None, blob_to_device=None, modify_output_record=False): - self.modify_net( + self.modify_net( # type: ignore[call-arg] net, init_net=init_net, grad_map=grad_map, diff --git a/caffe2/python/models/download.py b/caffe2/python/models/download.py index 7e735c726568e..0ebbb1ce6a998 100644 --- a/caffe2/python/models/download.py +++ b/caffe2/python/models/download.py @@ -102,7 +102,7 @@ def downloadModel(model, args): response = "" query = "Model already exists, continue? [y/N] " try: - response = raw_input(query) + response = raw_input(query) # type: ignore[name-defined] except NameError: response = input(query) if response.upper() == 'N' or not response: @@ -190,7 +190,7 @@ def get_c2_model_dbg(self, model_name): debug_str += "c2_init_pb ParseFromString = " + str(len_read) + "\n" c2_init_net.name = model_name + '_init' - with open(os.path.join(model_dir, 'value_info.json')) as f: + with open(os.path.join(model_dir, 'value_info.json')) as f: # type: ignore[assignment] value_info = json.load(f) return c2_init_net, c2_predict_net, value_info, debug_str diff --git a/caffe2/python/models/imagenet_trainer_test_utils.py b/caffe2/python/models/imagenet_trainer_test_utils.py index fec7708ea150a..3b2e627781336 100644 --- a/caffe2/python/models/imagenet_trainer_test_utils.py +++ b/caffe2/python/models/imagenet_trainer_test_utils.py @@ -20,14 +20,14 @@ def has_blob(proto, needle): def count_blobs(proto): - blobs = set() + blobs = set() # type: ignore[var-annotated] for op in proto.op: blobs = blobs.union(set(op.input)).union(set(op.output)) return len(blobs) def count_shared_blobs(proto): - blobs = set() + blobs = set() # type: ignore[var-annotated] for op in proto.op: blobs = blobs.union(set(op.input)).union(set(op.output)) return len([b for b in blobs if "_shared" in b]) diff --git a/caffe2/python/models/resnet_test.py b/caffe2/python/models/resnet_test.py index d089dd72fcbad..60eba4ca3faa5 100644 --- a/caffe2/python/models/resnet_test.py +++ b/caffe2/python/models/resnet_test.py @@ -13,7 +13,7 @@ class ResnetMemongerTest(hu.HypothesisTestCase): - @given(with_shapes=st.booleans(), **hu.gcs_cpu_only) + @given(with_shapes=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(max_examples=2, deadline=None) def test_resnet_shared_grads(self, with_shapes, gc, dc): results = utils.test_shared_grads( @@ -54,7 +54,7 @@ def test_resnet_forward_only_fast_simplenet(self): import random random.seed(2603) # pyre-fixme[10]: Name `workspace` is used but not defined in the current scope - workspace.GlobalInit([ + workspace.GlobalInit([ # type: ignore[name-defined] 'caffe2', '--caffe2_log_level=0', '--caffe2_print_blob_sizes_at_exit=0', diff --git a/caffe2/python/models/seq2seq/seq2seq_util.py b/caffe2/python/models/seq2seq/seq2seq_util.py index e1b4224ea4c80..83a1308a44ba5 100644 --- a/caffe2/python/models/seq2seq/seq2seq_util.py +++ b/caffe2/python/models/seq2seq/seq2seq_util.py @@ -25,8 +25,8 @@ def gen_vocab(corpus, unk_threshold): - vocab = collections.defaultdict(lambda: len(vocab)) - freqs = collections.defaultdict(lambda: 0) + vocab = collections.defaultdict(lambda: len(vocab)) # type: ignore[var-annotated] + freqs = collections.defaultdict(lambda: 0) # type: ignore[var-annotated] # Adding padding tokens to the vocabulary to maintain consistency with IDs vocab[PAD] vocab[GO] @@ -95,7 +95,7 @@ def rnn_unidirectional_layer( None if dropout_keep_prob is None else (1.0 - dropout_keep_prob) ) if dropout_ratio is not None: - cell = rnn_cell.DropoutCell( + cell = rnn_cell.DropoutCell( # type: ignore[assignment] internal_cell=cell, dropout_ratio=dropout_ratio, name=(scope + '/' if scope else '') + 'dropout', @@ -361,7 +361,7 @@ def __init__( name=self.scope('decoder'), residual_output_layers=residual_output_layers, ) - self.cell = rnn_cell.AttentionCell( + self.cell = rnn_cell.AttentionCell( # type: ignore[assignment] encoder_output_dim=encoder_output_dim, encoder_outputs=encoder_outputs, encoder_lengths=encoder_lengths, @@ -391,7 +391,7 @@ def get_output_dim(self): def get_attention_weights(self): assert self.use_attention # [batch_size, encoder_length, 1] - return self.cell.get_attention_weights() + return self.cell.get_attention_weights() # type: ignore[attr-defined] def apply( self, @@ -552,7 +552,7 @@ def build_embedding_decoder( 'embedded_decoder_inputs', ) - decoder_cells = [] + decoder_cells = [] # type: ignore[var-annotated] decoder_units_per_layer = [] for i, layer_config in enumerate(decoder_layer_configs): num_units = layer_config['num_units'] @@ -574,7 +574,7 @@ def build_embedding_decoder( dropout_keep_prob = layer_config.get('dropout_keep_prob', None) if dropout_keep_prob is not None: dropout_ratio = 1.0 - layer_config.dropout_keep_prob - cell = rnn_cell.DropoutCell( + cell = rnn_cell.DropoutCell( # type: ignore[assignment] internal_cell=cell, dropout_ratio=dropout_ratio, forward_only=forward_only, diff --git a/caffe2/python/models/seq2seq/translate.py b/caffe2/python/models/seq2seq/translate.py index fc9c5189f093b..13ce3676289da 100644 --- a/caffe2/python/models/seq2seq/translate.py +++ b/caffe2/python/models/seq2seq/translate.py @@ -53,12 +53,12 @@ def build_word_rewards(self, vocab_size, word_reward, unk_reward): def load_models(self): db_reader = 'reader' for model, scope_name in zip( - self.models, - self.decoder_scope_names, + self.models, # type: ignore[attr-defined] + self.decoder_scope_names, # type: ignore[attr-defined] ): params_for_current_model = [ param - for param in self.model.GetAllParams() + for param in self.model.GetAllParams() # type: ignore[attr-defined] if str(param).startswith(scope_name) ] assert workspace.RunOperatorOnce(core.CreateOperator( @@ -518,7 +518,7 @@ def decode(self, numberized_input, max_output_seq_len): hyp_index = prev_index_beam_list[i][hyp_index][0] i -= 1 - attention_weights_per_token = reversed(attention_weights_per_token) + attention_weights_per_token = reversed(attention_weights_per_token) # type: ignore[assignment] # encoder_inputs are reversed, see get_batch func attention_weights_per_token = [ list(reversed(attention_weights))[:len(numberized_input)] diff --git a/caffe2/python/models/shufflenet_test.py b/caffe2/python/models/shufflenet_test.py index b18c01d8e3285..0b03cf895253b 100644 --- a/caffe2/python/models/shufflenet_test.py +++ b/caffe2/python/models/shufflenet_test.py @@ -13,7 +13,7 @@ class ShufflenetMemongerTest(hu.HypothesisTestCase): - @given(with_shapes=st.booleans(), **hu.gcs_cpu_only) + @given(with_shapes=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(max_examples=2, deadline=None) def test_shufflenet_shared_grads(self, with_shapes, gc, dc): results = utils.test_shared_grads( @@ -53,7 +53,7 @@ def test_shufflenet_forward_only_fast_simplenet(self): import random random.seed(2006) # pyre-fixme[10]: Name `workspace` is used but not defined in the current scope - workspace.GlobalInit([ + workspace.GlobalInit([ # type: ignore[name-defined] 'caffe2', '--caffe2_log_level=0', '--caffe2_print_blob_sizes_at_exit=0', diff --git a/caffe2/python/muji.py b/caffe2/python/muji.py index 346473946e4cc..bbbc193e7a129 100644 --- a/caffe2/python/muji.py +++ b/caffe2/python/muji.py @@ -190,32 +190,32 @@ def Allreduce8(net, blobs, reduced_affix, gpu_indices): device_option=OnGPU(gpu_indices[i]) ) # Reduction level 3: this involves a copy. - reduced_4_copy = reduced[4].Copy( + reduced_4_copy = reduced[4].Copy( # type: ignore[attr-defined] [], str(reduced[4]) + '_copy', device_option=OnGPU(gpu_indices[0]) ) - reduced[0] = reduced[0].Add( + reduced[0] = reduced[0].Add( # type: ignore[attr-defined] reduced_4_copy, reduced[0], device_option=OnGPU(gpu_indices[0]) ) # Broadcast level 1 - reduced[4] = reduced[0].Copy( + reduced[4] = reduced[0].Copy( # type: ignore[attr-defined] [], reduced[4], device_option=OnGPU(gpu_indices[4]) ) # Broadcast level 2 for i in [2, 6]: - reduced[i] = reduced[i - 2].Copy( + reduced[i] = reduced[i - 2].Copy( # type: ignore[attr-defined] [], reduced[i], device_option=OnGPU(gpu_indices[i]) ) # Broadcast level 3 for i in [1, 3, 5, 7]: - reduced[i] = reduced[i - 1].Copy( + reduced[i] = reduced[i - 1].Copy( # type: ignore[attr-defined] [], blobs[i] + reduced_affix, device_option=OnGPU(gpu_indices[i]) @@ -242,7 +242,7 @@ def AllreduceFallback(net, blobs, reduced_affix, gpu_indices): else: reduced[0] = blobs[0] # do temp copy and add - temp_name = reduced[0] + '_temp_copy' + temp_name = reduced[0] + '_temp_copy' # type: ignore[operator] for i in range(1, len(gpu_indices)): temp = net.Copy( blobs[i], diff --git a/caffe2/python/muji_test.py b/caffe2/python/muji_test.py index 8adc2daad117a..1f2190d6c5287 100644 --- a/caffe2/python/muji_test.py +++ b/caffe2/python/muji_test.py @@ -24,7 +24,7 @@ def RunningAllreduceWithGPUs(self, gpu_ids, allreduce_function): workspace.RunNetOnce(net) target_value = sum(gpu_ids) + len(gpu_ids) all_blobs = workspace.Blobs() - all_blobs.sort() + all_blobs.sort() # type: ignore[attr-defined] for blob in all_blobs: print('{} {}'.format(blob, workspace.FetchBlob(blob))) diff --git a/caffe2/python/net_builder.py b/caffe2/python/net_builder.py index fd525ed4766a1..66d675378d952 100644 --- a/caffe2/python/net_builder.py +++ b/caffe2/python/net_builder.py @@ -38,7 +38,7 @@ def __init__(self, name=None, initial_scope=None, _stop_blob_required=False, (not _stop_blob_required and not _stop_blob), \ 'Stop blobs are not used with control operators' self.name = _fullname or '/'.join( - n for n in (parent.name if parent else None, name) if n + n for n in (parent.name if parent else None, name) if n # type: ignore[has-type] ) self._frozen = False self._current_net = None @@ -46,7 +46,7 @@ def __init__(self, name=None, initial_scope=None, _stop_blob_required=False, if parent: # make sure parent has an up to date lexical scope computed parent._update_lexical_scope() - self._init_lexical_scope = set(parent._lexical_scope) if parent else set() + self._init_lexical_scope = set(parent._lexical_scope) if parent else set() # type: ignore[has-type] if initial_scope: self._init_lexical_scope |= set([str(b) for b in initial_scope]) self._lexical_scope = set(self._init_lexical_scope) @@ -137,7 +137,7 @@ def get(self): return self._children def __exit__(self, etype, *args): - super(NetBuilder, self).__exit__(etype, *args) + super(NetBuilder, self).__exit__(etype, *args) # type: ignore[misc] if self._use_control_ops and len(self._children) > 0: _children = self._children @@ -242,8 +242,8 @@ def task_group(self): """ from caffe2.python import task group = NetBuilder.current() - with task.Cluster(): - with task.Node('local'): + with task.Cluster(): # type: ignore[attr-defined] + with task.Node('local'): # type: ignore[attr-defined] tg = task.TaskGroup() group.add(tg) return tg diff --git a/caffe2/python/net_builder_test.py b/caffe2/python/net_builder_test.py index bef6caefac3d8..67238762a185b 100644 --- a/caffe2/python/net_builder_test.py +++ b/caffe2/python/net_builder_test.py @@ -99,7 +99,7 @@ def test_ops(self): (p, 2), (q, 3), ] - for b, expected in expected: + for b, expected in expected: # type: ignore[assignment] actual = ws.blobs[str(b)].fetch() self.assertEquals(actual, expected) @@ -209,7 +209,7 @@ def test_multi_instance_python_op(self): def test_multi_instance(self): NUM_INSTANCES = 10 NUM_ITERS = 15 - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] with Task(num_instances=NUM_INSTANCES): with ops.task_init(): counter1 = ops.CreateCounter([], ['global_counter']) diff --git a/caffe2/python/net_drawer.py b/caffe2/python/net_drawer.py index b55699c1c0958..34a6e6afa9783 100644 --- a/caffe2/python/net_drawer.py +++ b/caffe2/python/net_drawer.py @@ -98,7 +98,7 @@ def GetPydotGraph( operators, name = _rectify_operator_and_name(operators_or_net, name) graph = pydot.Dot(name, rankdir=rankdir) pydot_nodes = {} - pydot_node_counts = defaultdict(int) + pydot_node_counts = defaultdict(int) # type: ignore[var-annotated] for op_id, op in enumerate(operators): op_node = op_node_producer(op, op_id) graph.add_node(op_node) @@ -151,7 +151,7 @@ def GetPydotGraphMinimal( operators, name = _rectify_operator_and_name(operators_or_net, name) graph = pydot.Dot(name, rankdir=rankdir) # blob_parents maps each blob name to its generating op. - blob_parents = {} + blob_parents = {} # type: ignore[var-annotated] # op_ancestry records the ancestors of each op. op_ancestry = defaultdict(set) for op_id, op in enumerate(operators): @@ -265,8 +265,8 @@ def GetPlanGraph(plan_def, name=None, rankdir='TB'): def GetGraphInJson(operators_or_net, output_filepath): operators, _ = _rectify_operator_and_name(operators_or_net, None) blob_strid_to_node_id = {} - node_name_counts = defaultdict(int) - nodes = [] + node_name_counts = defaultdict(int) # type: ignore[var-annotated] + nodes = [] # type: ignore[var-annotated] edges = [] for op_id, op in enumerate(operators): op_label = op.name + '/' + op.type if op.name else op.type @@ -381,14 +381,14 @@ def main(): ) for key, operators in viewitems(graphs): if args.minimal: - graph = GetPydotGraphMinimal( + graph = GetPydotGraphMinimal( # type: ignore[call-arg] operators, name=key, rankdir=args.rankdir, node_producer=GetOpNodeProducer(args.append_output, **OP_STYLE), minimal_dependency=args.minimal_dependency) else: - graph = GetPydotGraph( + graph = GetPydotGraph( # type: ignore[call-arg] operators, name=key, rankdir=args.rankdir, diff --git a/caffe2/python/net_printer.py b/caffe2/python/net_printer.py index 8e1d65c01ce70..5ad1bee10f027 100644 --- a/caffe2/python/net_printer.py +++ b/caffe2/python/net_printer.py @@ -21,13 +21,13 @@ class Visitor(object): @classmethod def register(cls, Type): if not(hasattr(cls, 'visitors')): - cls.visitors = {} + cls.visitors = {} # type: ignore[attr-defined] else: assert Type not in cls.visitors, \ '{} already registered!'.format(Type) def _register(func): - cls.visitors[Type] = func + cls.visitors[Type] = func # type: ignore[attr-defined] return func return _register @@ -37,11 +37,11 @@ def __call__(self, obj, *args, **kwargs): return Type = type(obj) - if Type not in self.__class__.visitors: + if Type not in self.__class__.visitors: # type: ignore[attr-defined] raise TypeError('%s: unsupported object type: %s' % ( self.__class__.__name__, Type)) - func = self.__class__.visitors[Type] + func = self.__class__.visitors[Type] # type: ignore[attr-defined] return func(self, obj, *args, **kwargs) @@ -49,7 +49,7 @@ class Analyzer(Visitor): PREFIXES_TO_IGNORE = {'distributed_ctx_init'} def __init__(self): - self.workspaces = defaultdict(lambda: defaultdict(lambda: 0)) + self.workspaces = defaultdict(lambda: defaultdict(lambda: 0)) # type: ignore[var-annotated] self.workspace_ctx = [] @property @@ -100,7 +100,7 @@ def analyze_step(analyzer, step): if proto.report_net: with analyzer.set_workspace(do_copy=True): analyzer(step.get_net(proto.report_net)) - all_new_blobs = set() + all_new_blobs = set() # type: ignore[var-annotated] substeps = step.Substeps() + [step.get_net(n) for n in proto.network] for substep in substeps: with analyzer.set_workspace( @@ -127,7 +127,7 @@ def analyze_task(analyzer, task): proto_len = len(plan.Proto().SerializeToString()) assert proto_len < 2 ** 26, ( 'Due to a protobuf limitation, serialized tasks must be smaller ' - 'than 64Mb, but this task has {} bytes.' % proto_len) + 'than 64Mb, but this task has {} bytes.' % proto_len) # type: ignore[str-format] is_private = task.workspace_type() != WorkspaceType.GLOBAL with analyzer.set_workspace(do_copy=is_private): @@ -285,7 +285,7 @@ def print_op(text, op): if text.c2_net_name: text.add(call( text.c2_net_name + '.' + op.type, - [list(op.input), list(op.output)] + args)) + [list(op.input), list(op.output)] + args)) # type: ignore[operator] else: text.add(call( op.type, diff --git a/caffe2/python/nomnigraph.py b/caffe2/python/nomnigraph.py index 2b83e0ec9358f..784e1e3c23038 100644 --- a/caffe2/python/nomnigraph.py +++ b/caffe2/python/nomnigraph.py @@ -23,18 +23,18 @@ def __init__(self, net=None, device_map=None): serialized_device_map = {} for k in device_map: serialized_device_map[k] = device_map[k].SerializeToString() - self._NNModule = C.NNModuleFromProtobufDistributed( + self._NNModule = C.NNModuleFromProtobufDistributed( # type: ignore[attr-defined] serialized_proto, serialized_device_map ) # Default elif serialized_proto: - self._NNModule, self._OpList = C.NNModuleFromProtobuf(serialized_proto) + self._NNModule, self._OpList = C.NNModuleFromProtobuf(serialized_proto) # type: ignore[attr-defined] else: raise Exception( "NNModule can be constructed with core.Net or caffe2_pb2.NetDef types" ) else: - self._NNModule = C.NNModule() + self._NNModule = C.NNModule() # type: ignore[attr-defined] @property def dataFlow(self): @@ -75,13 +75,13 @@ def replaceNode(self, old_node, new_node): return self._NNModule.dataFlow().replaceNode(old_node, new_node) def replaceProducer(self, tensor, new_producer): - C.replaceProducer(tensor, new_producer) + C.replaceProducer(tensor, new_producer) # type: ignore[attr-defined] def replaceAllUsesWith(self, old_tensor, new_tensor): - C.replaceAllUsesWith(old_tensor, new_tensor) + C.replaceAllUsesWith(old_tensor, new_tensor) # type: ignore[attr-defined] def replaceAsConsumer(self, old_consumer, new_consumer): - C.replaceAsConsumer(old_consumer, new_consumer) + C.replaceAsConsumer(old_consumer, new_consumer) # type: ignore[attr-defined] def replaceSubgraph(self, subgraph, new_node, inputs, outputs): self._NNModule.replaceSubgraph(subgraph, new_node, inputs, outputs) @@ -102,7 +102,7 @@ def convertToCaffe2Proto(self, old_proto=None): def match(self, pattern): for n in self.dataFlow.getMutableNodes(): - m = C.matchSubgraph(n, pattern) + m = C.matchSubgraph(n, pattern) # type: ignore[attr-defined] if m: yield m @@ -116,7 +116,7 @@ def render(s): if cmd_exists("graph-easy"): p = Popen("graph-easy", stdin=PIPE) try: - p.stdin.write(s.encode("utf-8")) + p.stdin.write(s.encode("utf-8")) # type: ignore[union-attr] except IOError as e: if e.errno == errno.EPIPE or e.errno == errno.EINVAL: pass @@ -124,7 +124,7 @@ def render(s): # Raise any other error. raise - p.stdin.close() + p.stdin.close() # type: ignore[union-attr] p.wait() else: print(s) diff --git a/caffe2/python/nomnigraph_test.py b/caffe2/python/nomnigraph_test.py index bd9d10fcbae13..25f3ca3a772ef 100644 --- a/caffe2/python/nomnigraph_test.py +++ b/caffe2/python/nomnigraph_test.py @@ -16,8 +16,8 @@ class TestBindings(test_util.TestCase): def test_simple(self): nn = ng.NNModule() dfg = nn.dataFlow - dfg.createNode(ng.NeuralNetData("X")) - dfg.createNode(ng.NeuralNetOperator("FC")) + dfg.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + dfg.createNode(ng.NeuralNetOperator("FC")) # type: ignore[call-arg] assert len(nn.dataFlow.getMutableNodes()) == 2 def test_core_net_simple(self): @@ -87,9 +87,9 @@ def test_invalid_node(self): def test_edges_simple(self): nn = ng.NNModule() dfg = nn.dataFlow - x = dfg.createNode(ng.NeuralNetData("X")) - w = dfg.createNode(ng.NeuralNetData("W")) - op = dfg.createNode(ng.NeuralNetOperator("Op")) + x = dfg.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + w = dfg.createNode(ng.NeuralNetData("W")) # type: ignore[call-arg] + op = dfg.createNode(ng.NeuralNetOperator("Op")) # type: ignore[call-arg] with self.assertRaises(Exception): dfg.createEdge(x, w) @@ -101,10 +101,10 @@ def test_edges_simple(self): # subgraph sg = ng.NNSubgraph() - sg.addNode(x) - sg.addNode(op) - sg.induceEdges() - assert len(sg) == 2 + sg.addNode(x) # type: ignore[attr-defined] + sg.addNode(op) # type: ignore[attr-defined] + sg.induceEdges() # type: ignore[attr-defined] + assert len(sg) == 2 # type: ignore[arg-type] # subgraph dot generation assert(str(sg).startswith("digraph G")) @@ -118,9 +118,9 @@ def test_edges_complex(self, size): data = [] ops = [] for _ in range(size): - data.append(dfg.createNode(ng.NeuralNetData("X"))) + data.append(dfg.createNode(ng.NeuralNetData("X"))) # type: ignore[call-arg] for i in range(size): - ops.append(dfg.createNode(ng.NeuralNetOperator("Op" + str(i)))) + ops.append(dfg.createNode(ng.NeuralNetOperator("Op" + str(i)))) # type: ignore[call-arg] for i in range(size): for j in range(size): @@ -146,18 +146,18 @@ def test_traversal(self): def test_debug(self): nn = ng.NNModule() dfg = nn.dataFlow - dfg.createNode(ng.NeuralNetData("X")) - dfg.createNode(ng.NeuralNetData("W")) - dfg.createNode(ng.NeuralNetOperator("Op")) + dfg.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + dfg.createNode(ng.NeuralNetData("W")) # type: ignore[call-arg] + dfg.createNode(ng.NeuralNetOperator("Op")) # type: ignore[call-arg] ng.render(nn.dataFlow) def test_match_graph_node(self): mg = ng.NNMatchGraph() - mg.createNode(ng.NeuralNetOperator("test")) + mg.createNode(ng.NeuralNetOperator("test")) # type: ignore[attr-defined, call-arg] nn = ng.NNModule() - test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) - x = nn.dataFlow.createNode(ng.NeuralNetData("X")) + test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) # type: ignore[call-arg] + x = nn.dataFlow.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] nn.dataFlow.createEdge(x, test) count = 0 @@ -170,10 +170,10 @@ def test_match_graph_node(self): def test_match_graph_node_strict(self): mg = ng.NNMatchGraph() - mg.createNode(ng.NeuralNetOperator("test"), strict=True) + mg.createNode(ng.NeuralNetOperator("test"), strict=True) # type: ignore[attr-defined, call-arg] nn = ng.NNModule() - test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) - x = nn.dataFlow.createNode(ng.NeuralNetData("X")) + test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) # type: ignore[call-arg] + x = nn.dataFlow.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] nn.dataFlow.createEdge(test, x) count = 0 @@ -186,16 +186,16 @@ def test_match_graph_node_strict(self): def test_match_graph(self): mg = ng.NNMatchGraph() - test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) - xm = mg.createNode(ng.NeuralNetData("X"), strict=True) - testm = mg.createNode(ng.NeuralNetOperator("test")) - mg.createEdge(test2m, xm) - mg.createEdge(xm, testm) + test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) # type: ignore[attr-defined, call-arg] + xm = mg.createNode(ng.NeuralNetData("X"), strict=True) # type: ignore[attr-defined, call-arg] + testm = mg.createNode(ng.NeuralNetOperator("test")) # type: ignore[attr-defined, call-arg] + mg.createEdge(test2m, xm) # type: ignore[attr-defined] + mg.createEdge(xm, testm) # type: ignore[attr-defined] nn = ng.NNModule() - test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) - x = nn.dataFlow.createNode(ng.NeuralNetData("X")) - test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) + test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) # type: ignore[call-arg] + x = nn.dataFlow.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) # type: ignore[call-arg] nn.dataFlow.createEdge(test2, x) nn.dataFlow.createEdge(x, test) @@ -208,16 +208,16 @@ def test_match_graph(self): def test_delete_subgraph(self): mg = ng.NNMatchGraph() - test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) - xm = mg.createNode(ng.NeuralNetData("X"), strict=True) - testm = mg.createNode(ng.NeuralNetOperator("test")) - mg.createEdge(test2m, xm) - mg.createEdge(xm, testm) + test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) # type: ignore[attr-defined, call-arg] + xm = mg.createNode(ng.NeuralNetData("X"), strict=True) # type: ignore[attr-defined, call-arg] + testm = mg.createNode(ng.NeuralNetOperator("test")) # type: ignore[attr-defined, call-arg] + mg.createEdge(test2m, xm) # type: ignore[attr-defined] + mg.createEdge(xm, testm) # type: ignore[attr-defined] nn = ng.NNModule() - test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) - x = nn.dataFlow.createNode(ng.NeuralNetData("X")) - test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) + test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) # type: ignore[call-arg] + x = nn.dataFlow.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) # type: ignore[call-arg] nn.dataFlow.createEdge(test2, x) nn.dataFlow.createEdge(x, test) @@ -228,31 +228,31 @@ def test_delete_subgraph(self): def test_replace_subraph(self): mg = ng.NNMatchGraph() - test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) - xm = mg.createNode(ng.NeuralNetData("X"), strict=True) - testm = mg.createNode(ng.NeuralNetOperator("test")) - mg.createEdge(test2m, xm) - mg.createEdge(xm, testm) + test2m = mg.createNode(ng.NeuralNetOperator("test2"), strict=True) # type: ignore[attr-defined, call-arg] + xm = mg.createNode(ng.NeuralNetData("X"), strict=True) # type: ignore[attr-defined, call-arg] + testm = mg.createNode(ng.NeuralNetOperator("test")) # type: ignore[attr-defined, call-arg] + mg.createEdge(test2m, xm) # type: ignore[attr-defined] + mg.createEdge(xm, testm) # type: ignore[attr-defined] nn = ng.NNModule() - test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) - x = nn.dataFlow.createNode(ng.NeuralNetData("X")) - test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) + test2 = nn.dataFlow.createNode(ng.NeuralNetOperator("test2")) # type: ignore[call-arg] + x = nn.dataFlow.createNode(ng.NeuralNetData("X")) # type: ignore[call-arg] + test = nn.dataFlow.createNode(ng.NeuralNetOperator("test")) # type: ignore[call-arg] nn.dataFlow.createEdge(test2, x) nn.dataFlow.createEdge(x, test) for m in nn.match(mg): match = m - new_op = nn.dataFlow.createNode(ng.NeuralNetOperator("new_op")) + new_op = nn.dataFlow.createNode(ng.NeuralNetOperator("new_op")) # type: ignore[call-arg] nn.replaceSubgraph(match, new_op, [], []) assert len(nn.controlFlow) == 1 assert nn.controlFlow[0].name == "new_op" def test_genericGraph(self): g = ng.Graph() - n1 = g.createNode("hello1") - n2 = g.createNode("hello2") - e = g.createEdge(n1, n2) + n1 = g.createNode("hello1") # type: ignore[attr-defined] + n2 = g.createNode("hello2") # type: ignore[attr-defined] + e = g.createEdge(n1, n2) # type: ignore[attr-defined] ng.render(g) def test_createUniqueDataNode(self): @@ -260,7 +260,7 @@ def test_createUniqueDataNode(self): nn = ng.NNModule(net) n1 = nn.createUniqueDataNode("a") self.assertEqual(n1.name[0], "a") - n2 = nn.dataFlow.createNode(ng.Operator("test1")) + n2 = nn.dataFlow.createNode(ng.Operator("test1")) # type: ignore[call-arg] nn.createEdge(n1, n2) n3 = nn.createUniqueDataNode("a") nn.createEdge(n2, n3) @@ -296,9 +296,9 @@ def test_convertToProto(self): def test_node_interactions(self): nn = ng.NNModule() dfg = nn.dataFlow - test1 = dfg.createNode(ng.Operator("test1")) - test2 = dfg.createNode(ng.Operator("test2")) - x = dfg.createNode(ng.Data("x")) + test1 = dfg.createNode(ng.Operator("test1")) # type: ignore[call-arg] + test2 = dfg.createNode(ng.Operator("test2")) # type: ignore[call-arg] + x = dfg.createNode(ng.Data("x")) # type: ignore[call-arg] dfg.createEdge(test1, x) dfg.createEdge(x, test2) p = test2.getOperatorPredecessors() @@ -306,8 +306,8 @@ def test_node_interactions(self): assert p[0] == test1 # Add another node - test3 = dfg.createNode(ng.Operator("test3")) - y = dfg.createNode(ng.Data("y")) + test3 = dfg.createNode(ng.Operator("test3")) # type: ignore[call-arg] + y = dfg.createNode(ng.Data("y")) # type: ignore[call-arg] dfg.createEdge(test3, y) dfg.createEdge(y, test2) p = test2.getOperatorPredecessors() @@ -328,7 +328,7 @@ def test_node_interactions(self): def test_delete_node(self): nn = ng.NNModule() - node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] nn.dataFlow.deleteNode(node) assert len(nn.dataFlow.getMutableNodes()) == 0 @@ -337,7 +337,7 @@ def test_replace_producer(self): net.FC(["X", "W"], ["Y"]) nn = ng.NNModule(net) fc = nn.controlFlow[0] - test_op = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + test_op = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] nn.replaceProducer(fc.outputs[0], test_op) nn.deleteNode(fc) assert len(nn.controlFlow) == 1 @@ -349,7 +349,7 @@ def test_replace_all_uses_with(self): net.FC(["X", "W2"], ["Y2"]) nn = ng.NNModule(net) fc = nn.controlFlow[0] - test_tensor = nn.dataFlow.createNode(ng.NeuralNetData("T")) + test_tensor = nn.dataFlow.createNode(ng.NeuralNetData("T")) # type: ignore[call-arg] nn.replaceAllUsesWith(fc.inputs[0], test_tensor) for op in nn.controlFlow: @@ -360,7 +360,7 @@ def test_replace_as_consumer(self): net.FC(["X", "W"], ["Y"]) nn = ng.NNModule(net) fc = nn.controlFlow[0] - test_op = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + test_op = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] nn.replaceAsConsumer(fc, test_op) nn.deleteNode(fc) assert len(nn.controlFlow) == 1 @@ -370,14 +370,14 @@ def test_replace_as_consumer(self): def test_annotation_basic(self): annot = ng.Annotation() - annot.setDevice("woot") - assert annot.getDevice() == "woot" - annot.setDeviceType(7) - assert annot.getDeviceType() == 7 + annot.setDevice("woot") # type: ignore[attr-defined] + assert annot.getDevice() == "woot" # type: ignore[attr-defined] + annot.setDeviceType(7) # type: ignore[attr-defined] + assert annot.getDeviceType() == 7 # type: ignore[attr-defined] def test_annotation_from_graph(self): nn = ng.NNModule() - node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] annot = node.getAnnotation() annot.setDeviceType(7) node.setAnnotation(annot) @@ -397,7 +397,7 @@ def test_annotation_operator_def(self): def test_annotation_device_option(self): nn = ng.NNModule() - node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] d = caffe2_pb2.DeviceOption() d.node_name = "test" node.annotation.device_option = d @@ -407,7 +407,7 @@ def test_annotation_device_option(self): def test_has_device_option(self): nn = ng.NNModule() - node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] assert not node.annotation.hasDeviceOption() d = caffe2_pb2.DeviceOption() node.annotation.device_option = d @@ -415,14 +415,14 @@ def test_has_device_option(self): def test_distributed_annotations(self): nn = ng.NNModule() - key = nn.dataFlow.createNode(ng.NeuralNetData("key")) - length = nn.dataFlow.createNode(ng.NeuralNetData("length")) - node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) + key = nn.dataFlow.createNode(ng.NeuralNetData("key")) # type: ignore[call-arg] + length = nn.dataFlow.createNode(ng.NeuralNetData("length")) # type: ignore[call-arg] + node = nn.dataFlow.createNode(ng.NeuralNetOperator("TestOp")) # type: ignore[call-arg] annot = ng.Annotation() - annot.setKeyNode(key) - annot.setLengthNode(length) - annot.setComponentLevels(["", "test", "woot"]) + annot.setKeyNode(key) # type: ignore[attr-defined] + annot.setLengthNode(length) # type: ignore[attr-defined] + annot.setComponentLevels(["", "test", "woot"]) # type: ignore[attr-defined] node.setAnnotation(annot) diff --git a/caffe2/python/nomnigraph_transformations.py b/caffe2/python/nomnigraph_transformations.py index 570c743df152a..e75e2ff10a1ad 100644 --- a/caffe2/python/nomnigraph_transformations.py +++ b/caffe2/python/nomnigraph_transformations.py @@ -36,14 +36,14 @@ def transpose_network(nn): # weights need to be transformed for idx in range(2): new_inp = nn.createUniqueDataNode(inputs[idx].name) - transp = dfg.createNode(ng.NeuralNetOperator("NCHW2NHWC")) + transp = dfg.createNode(ng.NeuralNetOperator("NCHW2NHWC")) # type: ignore[call-arg] nn.createEdge(inputs[idx], transp) nn.createEdge(transp, new_inp) outgoing[inputs[idx]].append(transp) inputs[idx] = new_inp for idx in range(len(outputs)): new_outp = nn.createUniqueDataNode(outputs[idx].name) - transp = dfg.createNode(ng.NeuralNetOperator("NHWC2NCHW")) + transp = dfg.createNode(ng.NeuralNetOperator("NHWC2NCHW")) # type: ignore[call-arg] nn.createEdge(transp, outputs[idx]) nn.createEdge(new_outp, transp) incoming[outputs[idx]] = new_outp diff --git a/caffe2/python/onnx/backend.py b/caffe2/python/onnx/backend.py index 193a6f217f933..ee1c8a1c6bf44 100644 --- a/caffe2/python/onnx/backend.py +++ b/caffe2/python/onnx/backend.py @@ -136,7 +136,7 @@ class Caffe2Backend(Backend): # This dictionary will record operators which are KNOWN to be # broken, so we give a good error message rather than do something # bogus and then fail. - _broken_operators = { + _broken_operators = { # type: ignore[var-annotated] # 'BrokenOp': version_it_was_broken_in } @@ -198,7 +198,7 @@ class Caffe2Backend(Backend): @classmethod def dummy_name(cls): - return cls._dummy_name.new_dummy_name() + return cls._dummy_name.new_dummy_name() # type: ignore[attr-defined] # NB: By default, you will use the LATEST definition of the operator, # so this interface MAY make BC-breaking changes. Specify an @@ -230,7 +230,7 @@ def run_node(cls, node, inputs, device='CPU', opset_version=_known_opset_version shape=value.shape).SerializeToString()) ops = [] - cbackend = C.Caffe2Backend(cls._dummy_name) + cbackend = C.Caffe2Backend(cls._dummy_name) # type: ignore[attr-defined] ops_str = cbackend.convert_node(node.SerializeToString(), value_infos, opset_version) for s in ops_str[0] + ops_str[1]: op = caffe2_pb2.OperatorDef() @@ -435,10 +435,10 @@ def make_rnn(direction_offset): reform, make_cell, lambda x: x) elif n.op_type == 'GRU': - def reform(Bi, Br, W_, R_, name, hidden_size, init_net): + def reform(Bi, Br, W_, R_, name, hidden_size, init_net): # type: ignore[misc] # caffe2 has a different order from onnx. We need to rearrange # z r h -> r z h - reforms = ((W_, 'i2h_w', True, [(0,-1)]), + reforms = ((W_, 'i2h_w', True, [(0,-1)]), # type: ignore[var-annotated] (R_, 'gate_t_w', False, [(0,-1)]), (Bi, 'i2h_b', True, []), (Br, 'gate_t_b', False, [])) @@ -456,10 +456,10 @@ def make_rnn(direction_offset): reform, make_cell, lambda x: x) elif n.op_type == 'LSTM': - def reform(Bi, Br, W_, R_, name, hidden_size, init_net): + def reform(Bi, Br, W_, R_, name, hidden_size, init_net): # type: ignore[misc] # caffe2 has a different order from onnx. We need to rearrange # i o f c -> i f o c - reforms = ((W_, 'i2h_w', True, [(0, -1)]), + reforms = ((W_, 'i2h_w', True, [(0, -1)]), # type: ignore[var-annotated] (R_, 'gates_t_w', True, [(0, -1)]), (Bi, 'i2h_b' , True, []), (Br, 'gates_t_b', True, [])) @@ -517,8 +517,8 @@ def make_rnn(direction_offset): outputs = {output for node in init_model.graph.node for output in node.output} has_initializers = all(x in initializers or x in outputs for x in (W, R, B)) - pred_ops = [] - init_ops = [] + pred_ops = [] # type: ignore[var-annotated] + init_ops = [] # type: ignore[var-annotated] (init_ops if has_initializers else pred_ops).extend(init_net.Proto().op) pred_ops.extend(pred_mh.Proto().op) @@ -735,7 +735,7 @@ def prepare(cls, model, device='CPU', raw_values_dict=None, **kwargs): @classmethod # TODO: This method needs a refactor for clarity def _onnx_node_to_caffe2_op(cls, init_model, pred_model, node_def, opset_version): - cbackend = C.Caffe2Backend(cls._dummy_name) + cbackend = C.Caffe2Backend(cls._dummy_name) # type: ignore[attr-defined] if cbackend.support_onnx_import(node_def.op_type): # extract value infos from pred model (value infos of @@ -771,7 +771,7 @@ def _onnx_node_to_caffe2_op(cls, init_model, pred_model, node_def, opset_version if isinstance(ops, Caffe2Ops): return ops if not isinstance(ops, collections.abc.Iterable): - ops = [ops] + ops = [ops] # type: ignore[list-item] return Caffe2Ops(ops, [], []) _broadcast_operators = { @@ -837,7 +837,7 @@ def _all_names_in_graph(graph): if graph is None: return set() - names = set() + names = set() # type: ignore[var-annotated] names.update(value_info.name for value_info in graph.input) names.update(value_info.name for value_info in graph.output) for node in graph.node: @@ -887,7 +887,7 @@ def _onnx_model_to_caffe2_net(cls, onnx_model, device, opset_version, include_in if include_initializers: init_net.op.extend(cls._create_tensor_filling_op(tp) for tp in onnx_model.graph.initializer) - cls._dummy_name.reset(cls._all_names_in_graph(init_model.graph) | cls._all_names_in_graph(pred_model.graph)) + cls._dummy_name.reset(cls._all_names_in_graph(init_model.graph) | cls._all_names_in_graph(pred_model.graph)) # type: ignore[attr-defined] errors = [] for net, model in ( (init_net, init_model), (pred_net, pred_model) ): diff --git a/caffe2/python/onnx/bin/conversion.py b/caffe2/python/onnx/bin/conversion.py index 7e469e514a738..faadaddc86d81 100644 --- a/caffe2/python/onnx/bin/conversion.py +++ b/caffe2/python/onnx/bin/conversion.py @@ -52,7 +52,7 @@ def caffe2_to_onnx(caffe2_net, c2_init_net_proto.ParseFromString(caffe2_init_net.read()) c2_init_net_proto.name = '{}_init'.format(caffe2_net_name) else: - c2_init_net_proto = None + c2_init_net_proto = None # type: ignore[assignment] if value_info: value_info = json.loads(value_info) diff --git a/caffe2/python/onnx/frontend.py b/caffe2/python/onnx/frontend.py index b5121602aff5b..af3e6fab4a45b 100644 --- a/caffe2/python/onnx/frontend.py +++ b/caffe2/python/onnx/frontend.py @@ -69,14 +69,14 @@ class Caffe2Frontend(object): 'Transpose': {'axes': 'perm'}, } - _special_operators = {} + _special_operators = {} # type: ignore[var-annotated] # Dummy name generator _dummy_name = C.DummyName() @classmethod def dummy_name(cls): - return cls._dummy_name.new_dummy_name() + return cls._dummy_name.new_dummy_name() # type: ignore[attr-defined] @classmethod def _common_caffe2_arg_to_onnx_attr(cls, op_def, arg): @@ -104,7 +104,7 @@ def _common_caffe2_arg_to_onnx_attr(cls, op_def, arg): raise ValueError('Could not find data field in arg: {}'.format(arg)) if name in cls._blocklist_caffe2_args: - assert value in cls._blocklist_caffe2_args[arg.name] + assert value in cls._blocklist_caffe2_args[arg.name] # type: ignore[operator] return None return helper.make_attribute(name, value) @@ -123,7 +123,7 @@ def _common_caffe2_op_to_onnx_node(cls, op_def, shapes): node_def.input.extend(op_def.input) node_def.output.extend(op_def.output) - attrs = filter(None, [cls.caffe2_arg_to_onnx_attr(op_def, arg) + attrs = filter(None, [cls.caffe2_arg_to_onnx_attr(op_def, arg) # type: ignore[var-annotated] for arg in op_def.arg]) node_def.attribute.extend(attrs) @@ -131,8 +131,8 @@ def _common_caffe2_op_to_onnx_node(cls, op_def, shapes): @classmethod def caffe2_op_to_onnx_node(cls, op_def, shapes): - if C.support_onnx_export(op_def.type): - node_strs, tensor_strs = C.export_to_onnx(cls._dummy_name, op_def.SerializeToString(), shapes) + if C.support_onnx_export(op_def.type): # type: ignore[attr-defined] + node_strs, tensor_strs = C.export_to_onnx(cls._dummy_name, op_def.SerializeToString(), shapes) # type: ignore[attr-defined] nodes = [] for s in node_strs: node = NodeProto() @@ -244,7 +244,7 @@ def caffe2_net_to_onnx_graph(cls, shape=value_info[name][1]) for name in predict_net.external_input) - cls._dummy_name.reset(cls._all_names_in_net(predict_net) | cls._all_names_in_net(init_net)) + cls._dummy_name.reset(cls._all_names_in_net(predict_net) | cls._all_names_in_net(init_net)) # type: ignore[attr-defined] for op in predict_net.op: shapes = {} diff --git a/caffe2/python/onnx/helper.py b/caffe2/python/onnx/helper.py index 6e73a5d5c95d6..2413e9b4e17c5 100644 --- a/caffe2/python/onnx/helper.py +++ b/caffe2/python/onnx/helper.py @@ -82,8 +82,8 @@ def save_caffe2_net(net, file, output_txt=False): with open(file, "wb") as f: f.write(net.SerializeToString()) if output_txt: - with open(file + "txt", "w") as f: - f.write(str(net)) + with open(file + "txt", "w") as f: # type: ignore[assignment] + f.write(str(net)) # type: ignore[arg-type] def benchmark_caffe2_model(init_net, predict_net, warmup_iters=3, main_iters=10, layer_details=True): diff --git a/caffe2/python/onnx/onnxifi.py b/caffe2/python/onnx/onnxifi.py index 973d06378e20d..e94a45197116e 100644 --- a/caffe2/python/onnx/onnxifi.py +++ b/caffe2/python/onnx/onnxifi.py @@ -13,14 +13,14 @@ def onnxifi_set_option(option_name, option_value): """ Set onnxifi option """ - return C.onnxifi_set_option(option_name, str(option_value)) + return C.onnxifi_set_option(option_name, str(option_value)) # type: ignore[attr-defined] def onnxifi_get_option(option_name): """ Get onnxifi option """ - return C.onnxifi_get_option(option_name) + return C.onnxifi_get_option(option_name) # type: ignore[attr-defined] def onnxifi_caffe2_net( pred_net, @@ -46,12 +46,12 @@ def onnxifi_caffe2_net( tbs = caffe2_pb2.TensorBoundShape() tbs.name = k tbs.shape.dims.extend(v) - tbs.dim_type.extend([caffe2_pb2.TensorBoundShape.CONSTANT] * len(tbs.shape.dims)) - tbs.dim_type[0] = caffe2_pb2.TensorBoundShape.BATCH + tbs.dim_type.extend([caffe2_pb2.TensorBoundShape.CONSTANT] * len(tbs.shape.dims)) # type: ignore[list-item] + tbs.dim_type[0] = caffe2_pb2.TensorBoundShape.BATCH # type: ignore[call-overload] shape_hints.shapes.extend([tbs]) shape_hints.max_batch_size = max_batch_size shape_hints.max_feature_len = max_seq_size - pred_net_str = C.onnxifi(pred_net.SerializeToString(), + pred_net_str = C.onnxifi(pred_net.SerializeToString(), # type: ignore[attr-defined] shape_hints.SerializeToString(), block_list if block_list else [], weight_names if weight_names is not None else [], diff --git a/caffe2/python/onnx/test_onnxifi.py b/caffe2/python/onnx/test_onnxifi.py index 73a120616985e..ed2cd6440b6cb 100644 --- a/caffe2/python/onnx/test_onnxifi.py +++ b/caffe2/python/onnx/test_onnxifi.py @@ -162,7 +162,7 @@ def test_resnet50_core(self): for _ in range(repeat): workspace.RunNet(pred_net.name) end = time.time() - c2_time = end - start + c2_time = end - start # type: ignore[assignment] output_values = [workspace.FetchBlob(name) for name in net_outputs] Y_c2 = namedtupledict('Outputs', net_outputs)(*output_values) workspace.ResetWorkspace() @@ -173,7 +173,7 @@ def test_resnet50_core(self): # Cut the graph start = time.time() - pred_net_cut = onnxifi_caffe2_net(pred_net, + pred_net_cut = onnxifi_caffe2_net(pred_net, # type: ignore[call-arg] {input_name: input_blob_dims}, infer_shapes=True) del init_net, pred_net diff --git a/caffe2/python/onnx/tests/c2_ref_test.py b/caffe2/python/onnx/tests/c2_ref_test.py index aab5a04a169cc..4f6afbbea85ad 100644 --- a/caffe2/python/onnx/tests/c2_ref_test.py +++ b/caffe2/python/onnx/tests/c2_ref_test.py @@ -31,12 +31,12 @@ class TestCaffe2Basic(TestCase): def test_dummy_name(self): g = C.DummyName() - n1 = g.new_dummy_name() - n2 = g.new_dummy_name() + n1 = g.new_dummy_name() # type: ignore[attr-defined] + n2 = g.new_dummy_name() # type: ignore[attr-defined] assert n1 != n2, "Got same names in different calls: {}".format(n1) def test_check_arguments(self): - b2 = C.Caffe2Backend() + b2 = C.Caffe2Backend() # type: ignore[attr-defined] node_def = make_node("Add", inputs=["X", "Y"], outputs=["Z"]) b2.convert_node(node_def.SerializeToString()) @@ -458,7 +458,7 @@ def test_gemm_conversion(self): transB=1, broadcast=1) - backend = C.Caffe2Backend() + backend = C.Caffe2Backend() # type: ignore[attr-defined] # without broadcast and without shape info, gemm will be # converted to matmul + add @@ -661,7 +661,7 @@ def test_tensor_filling_ops_c_backend(self): dims=[1, 2, 3], vals=vals.flatten().tolist(), ) - b = C.Caffe2Backend() + b = C.Caffe2Backend() # type: ignore[attr-defined] op = caffe2_pb2.OperatorDef() op.ParseFromString(b._build_tensor_filling_op(tensor.SerializeToString(), '')) self.assertEqual(len(op.input), 0) diff --git a/caffe2/python/onnx/tests/conversion_test.py b/caffe2/python/onnx/tests/conversion_test.py index 1bb457491b85e..0b2c665ffe9f9 100644 --- a/caffe2/python/onnx/tests/conversion_test.py +++ b/caffe2/python/onnx/tests/conversion_test.py @@ -36,7 +36,7 @@ def _run_command(self, cmd, *args, **kwargs): exc_info: {} '''.format(result.output, result.exception, - traceback.format_exception(*result.exc_info)))) + traceback.format_exception(*result.exc_info)))) # type: ignore[misc] return result def test_caffe2_to_onnx(self): diff --git a/caffe2/python/onnx/tests/helper_test.py b/caffe2/python/onnx/tests/helper_test.py index 9000ad94fd9be..90753f04a9a24 100644 --- a/caffe2/python/onnx/tests/helper_test.py +++ b/caffe2/python/onnx/tests/helper_test.py @@ -15,18 +15,18 @@ class TestCaffe2Basic(TestCase): def test_dummy_name(self): g = C.DummyName() - g.reset() - names_1 = [g.new_dummy_name() for _ in range(3)] - g.reset() - names_2 = [g.new_dummy_name() for _ in range(3)] + g.reset() # type: ignore[attr-defined] + names_1 = [g.new_dummy_name() for _ in range(3)] # type: ignore[attr-defined] + g.reset() # type: ignore[attr-defined] + names_2 = [g.new_dummy_name() for _ in range(3)] # type: ignore[attr-defined] self.assertEqual(names_1, names_2) - g.reset(set(names_1)) - names_3 = [g.new_dummy_name() for _ in range(3)] + g.reset(set(names_1)) # type: ignore[attr-defined] + names_3 = [g.new_dummy_name() for _ in range(3)] # type: ignore[attr-defined] self.assertFalse(set(names_1) & set(names_3)) - g.reset(set(names_1)) - names_4 = [g.new_dummy_name() for _ in range(3)] + g.reset(set(names_1)) # type: ignore[attr-defined] + names_4 = [g.new_dummy_name() for _ in range(3)] # type: ignore[attr-defined] self.assertFalse(set(names_1) & set(names_4)) diff --git a/caffe2/python/operator_test/activation_ops_test.py b/caffe2/python/operator_test/activation_ops_test.py index 7e5c5f423606d..c77284c63affa 100644 --- a/caffe2/python/operator_test/activation_ops_test.py +++ b/caffe2/python/operator_test/activation_ops_test.py @@ -264,7 +264,7 @@ def gelu_ref(X): @given(n=st.integers(0, 6), m=st.integers(4, 6), - seed=st.integers(0, 1000), **hu.gcs_cpu_only) + seed=st.integers(0, 1000), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_mish(self, n, m, gc, dc, seed): np.random.seed(seed) X = np.random.rand(n, m).astype(np.float32) diff --git a/caffe2/python/operator_test/adagrad_test.py b/caffe2/python/operator_test/adagrad_test.py index 55e2f570cf07f..b40a52582e8a7 100644 --- a/caffe2/python/operator_test/adagrad_test.py +++ b/caffe2/python/operator_test/adagrad_test.py @@ -57,7 +57,7 @@ def test_adagrad(self, inputs, lr, epsilon, weight_decay, gc, dc): min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False ), weight_decay=st.sampled_from([0.0, 0.1]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_adagrad_output_effective_lr( @@ -96,7 +96,7 @@ def test_adagrad_output_effective_lr( epsilon=st.floats( min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False ), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=1000) def test_adagrad_output_effective_lr_and_update(self, inputs, lr, epsilon, gc, dc): diff --git a/caffe2/python/operator_test/adagrad_test_helper.py b/caffe2/python/operator_test/adagrad_test_helper.py index 0fe4aa21f5f9c..a7c12e84425e3 100644 --- a/caffe2/python/operator_test/adagrad_test_helper.py +++ b/caffe2/python/operator_test/adagrad_test_helper.py @@ -92,7 +92,7 @@ def adagrad_sparse_test_helper( # Create an indexing array containing values that are lists of indices, # which index into grad if grad.size == 0: - indices = np.empty(shape=(0,), dtype=np.int) + indices = np.empty(shape=(0,), dtype=np.int) # type: ignore[attr-defined] else: indices = np.random.choice( np.arange(grad.shape[0]), diff --git a/caffe2/python/operator_test/adam_test.py b/caffe2/python/operator_test/adam_test.py index 60d39d831a93e..8d36c90808b07 100644 --- a/caffe2/python/operator_test/adam_test.py +++ b/caffe2/python/operator_test/adam_test.py @@ -91,7 +91,7 @@ def test_adam(self, inputs, ITER, LR, beta1, beta2, epsilon, gc, dc): allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_adam_output_grad(self, inputs, ITER, LR, beta1, beta2, epsilon, gc, dc): param, mom1, mom2, grad = inputs mom2 = np.abs(mom2) diff --git a/caffe2/python/operator_test/apmeter_test.py b/caffe2/python/operator_test/apmeter_test.py index 1ca26bf64f31d..db3da7da76ed8 100644 --- a/caffe2/python/operator_test/apmeter_test.py +++ b/caffe2/python/operator_test/apmeter_test.py @@ -20,7 +20,7 @@ def calculate_ap(predictions, labels): sortind = np.argsort(-scores, kind='mergesort') truth = label[sortind] precision = np.cumsum(truth) / num_range - ap[k] = precision[truth.astype(np.bool)].sum() / max(1, truth.sum()) + ap[k] = precision[truth.astype(np.bool)].sum() / max(1, truth.sum()) # type: ignore[attr-defined] return ap @@ -34,7 +34,7 @@ class TestAPMeterOps(hu.HypothesisTestCase): dtype=np.int32, elements=st.integers(min_value=0, max_value=1)), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_average_precision(self, predictions, labels, gc, dc): op = core.CreateOperator( "APMeter", @@ -62,7 +62,7 @@ def op_ref(predictions, labels): dtype=np.int32, elements=st.integers(min_value=0, max_value=1)), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_average_precision_small_buffer(self, predictions, labels, gc, dc): op_small_buffer = core.CreateOperator( "APMeter", diff --git a/caffe2/python/operator_test/batch_box_cox_test.py b/caffe2/python/operator_test/batch_box_cox_test.py index c9306ce1ab077..3acbddb935384 100644 --- a/caffe2/python/operator_test/batch_box_cox_test.py +++ b/caffe2/python/operator_test/batch_box_cox_test.py @@ -55,13 +55,13 @@ def _inputs(draw): class TestBatchBoxCox(serial.SerializedTestCase): @given( inputs=_inputs(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_batch_box_cox(self, inputs, gc, dc): self.batch_box_cox(inputs, gc, dc) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lambda1_is_all_zero(self, gc, dc): inputs = (1, 1, [[2]], [0], [0]) @@ -73,7 +73,7 @@ def test_lambda1_is_all_zero(self, gc, dc): inputs = (2, 3, [[1, 2, 3], [4, 5, 6]], [0, 0, 0], [0, 0, 0]) self.batch_box_cox(inputs, gc, dc) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_lambda1_is_partially_zero(self, gc, dc): inputs = (1, 5, [[1, 2, 3, 4, 5]], @@ -89,7 +89,7 @@ def test_lambda1_is_partially_zero(self, gc, dc): [0, -.5, 0, .5, 0, 1, 0], [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]) self.batch_box_cox(inputs, gc, dc) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_bound_base_away_from_zero(self, gc, dc): inputs = (2, 3, [[1e-5, 1e-6, 1e-7], [1e-7, -1e-6, 1e-5]], diff --git a/caffe2/python/operator_test/batch_bucketize_op_test.py b/caffe2/python/operator_test/batch_bucketize_op_test.py index 82def05726860..7963e70972e39 100644 --- a/caffe2/python/operator_test/batch_bucketize_op_test.py +++ b/caffe2/python/operator_test/batch_bucketize_op_test.py @@ -45,7 +45,7 @@ def ref(float_feature, indices, boundaries, lengths): elements=hu.floats(min_value=0, max_value=5), min_value=5), seed=st.integers(min_value=2, max_value=1000), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_batch_bucketize(self, x, seed, gc, dc): op = core.CreateOperator('BatchBucketize', ["FEATURE", "INDICES", "BOUNDARIES", "LENGTHS"], @@ -67,7 +67,7 @@ def test_batch_bucketize(self, x, seed, gc, dc): boundaries += cur_boundary.tolist() lens = np.array(lens, dtype=np.int32) - boundaries = np.array(boundaries, dtype=np.float32) + boundaries = np.array(boundaries, dtype=np.float32) # type: ignore[assignment] indices = np.array(indices, dtype=np.int32) def ref(x, indices, boundaries, lens): diff --git a/caffe2/python/operator_test/bbox_transform_test.py b/caffe2/python/operator_test/bbox_transform_test.py index d2584f18af407..3a5ace0f4e981 100644 --- a/caffe2/python/operator_test/bbox_transform_test.py +++ b/caffe2/python/operator_test/bbox_transform_test.py @@ -212,7 +212,7 @@ class TestBBoxTransformOp(serial.SerializedTestCase): rotated=st.booleans(), angle_bound_on=st.booleans(), clip_angle_thresh=st.sampled_from([-1.0, 1.0]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=1000) def test_bbox_transform( @@ -280,7 +280,7 @@ def bbox_transform_ref(rois, deltas, im_info): rotated=st.booleans(), angle_bound_on=st.booleans(), clip_angle_thresh=st.sampled_from([-1.0, 1.0]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=1000) def test_bbox_transform_batch( @@ -334,9 +334,9 @@ def bbox_transform_ref(rois, deltas, im_info): offset += num_rois if len(box_out) > 0: - box_out = np.vstack(box_out) + box_out = np.vstack(box_out) # type: ignore[assignment] else: - box_out = np.empty(deltas.shape).astype(np.float32) + box_out = np.empty(deltas.shape).astype(np.float32) # type: ignore[assignment] return [box_out, roi_counts] op = core.CreateOperator( diff --git a/caffe2/python/operator_test/bisect_percentile_op_test.py b/caffe2/python/operator_test/bisect_percentile_op_test.py index 147a412825052..1b96cc18903eb 100644 --- a/caffe2/python/operator_test/bisect_percentile_op_test.py +++ b/caffe2/python/operator_test/bisect_percentile_op_test.py @@ -123,7 +123,7 @@ def test_bisect_percentil_op_simple(self): max_value=st.integers(min_value=100, max_value=1000), discrete=st.booleans(), p=st.floats(min_value=0, max_value=0.9), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_bisect_percentil_op_large( self, N, lengths, max_value, discrete, p, gc, dc @@ -167,11 +167,11 @@ def test_bisect_percentil_op_large( pct_upper.extend(pct_upper_cur) pct_raw_data.extend(pct_raw_data_cur) - pct_lower = np.array(pct_lower, dtype=np.float32) - pct_upper = np.array(pct_upper, dtype=np.float32) - pct_mapping = (pct_lower + pct_upper) / 2. + pct_lower = np.array(pct_lower, dtype=np.float32) # type: ignore[assignment] + pct_upper = np.array(pct_upper, dtype=np.float32) # type: ignore[assignment] + pct_mapping = (pct_lower + pct_upper) / 2. # type: ignore[operator] raw_data = np.array(raw_data, dtype=np.float32) - pct_raw_data = np.array(pct_raw_data, dtype=np.float32) + pct_raw_data = np.array(pct_raw_data, dtype=np.float32) # type: ignore[assignment] self.compare_reference( raw_data, pct_raw_data, pct_mapping, pct_lower, pct_upper, lengths) diff --git a/caffe2/python/operator_test/blobs_queue_db_test.py b/caffe2/python/operator_test/blobs_queue_db_test.py index 88197d16d70b5..310da12bc413f 100644 --- a/caffe2/python/operator_test/blobs_queue_db_test.py +++ b/caffe2/python/operator_test/blobs_queue_db_test.py @@ -84,10 +84,10 @@ def _add_blob_to_queue(self, queue, data, blob, status): def _create_test_tensor_protos(self, idx): item = caffe2_pb2.TensorProtos() data = item.protos.add() - data.data_type = core.DataType.STRING + data.data_type = core.DataType.STRING # type: ignore[assignment] data.string_data.append("foo{}".format(idx).encode('utf-8')) label = item.protos.add() - label.data_type = core.DataType.INT32 + label.data_type = core.DataType.INT32 # type: ignore[assignment] label.int32_data.append(1) return item.SerializeToString() diff --git a/caffe2/python/operator_test/boolean_mask_test.py b/caffe2/python/operator_test/boolean_mask_test.py index 38fe43899990a..d476221f96d1c 100644 --- a/caffe2/python/operator_test/boolean_mask_test.py +++ b/caffe2/python/operator_test/boolean_mask_test.py @@ -14,7 +14,7 @@ class TestBooleanMaskOp(serial.SerializedTestCase): @given(x=hu.tensor1d(min_len=1, max_len=100, elements=hu.floats(min_value=0.5, max_value=1.0)), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_boolean_mask_gradient(self, x, gc, dc): op = core.CreateOperator("BooleanMask", diff --git a/caffe2/python/operator_test/box_with_nms_limit_op_test.py b/caffe2/python/operator_test/box_with_nms_limit_op_test.py index 3131316feefda..c5ccafbe4b946 100644 --- a/caffe2/python/operator_test/box_with_nms_limit_op_test.py +++ b/caffe2/python/operator_test/box_with_nms_limit_op_test.py @@ -53,7 +53,7 @@ def gen_multiple_boxes(centers, scores, count, num_classes): ret_scores = None for cc, ss in zip(centers, scores): box = gen_boxes(count, cc) - ret_box = np.vstack((ret_box, box)) if ret_box is not None else box + ret_box = np.vstack((ret_box, box)) if ret_box is not None else box # type: ignore[arg-type] cur_sc = np.ones((count, 1), dtype=np.float32) * ss ret_scores = np.vstack((ret_scores, cur_sc)) \ if ret_scores is not None else cur_sc @@ -65,7 +65,7 @@ def gen_multiple_boxes(centers, scores, count, num_classes): class TestBoxWithNMSLimitOp(serial.SerializedTestCase): - @given(**HU_CONFIG) + @given(**HU_CONFIG) # type: ignore[arg-type] @settings(deadline=10000) def test_simple(self, gc): in_centers = [(0, 0), (20, 20), (50, 50)] @@ -82,7 +82,7 @@ def ref(*args, **kwargs): self.assertReferenceChecks(gc, op, [scores, boxes], ref) - @given(**HU_CONFIG) + @given(**HU_CONFIG) # type: ignore[arg-type] @settings(deadline=1000) def test_score_thresh(self, gc): in_centers = [(0, 0), (20, 20), (50, 50)] @@ -97,11 +97,11 @@ def test_score_thresh(self, gc): op = get_op(2, 3, {"score_thresh": 0.8, "nms": 0.9}) def ref(*args, **kwargs): - return (gt_scores.flatten(), gt_boxes, gt_classes) + return (gt_scores.flatten(), gt_boxes, gt_classes) # type: ignore[attr-defined] self.assertReferenceChecks(gc, op, [scores, boxes], ref) - @given(det_per_im=st.integers(1, 3), **HU_CONFIG) + @given(det_per_im=st.integers(1, 3), **HU_CONFIG) # type: ignore[arg-type] @settings(deadline=1000) def test_detections_per_im(self, det_per_im, gc): in_centers = [(0, 0), (20, 20), (50, 50)] @@ -119,7 +119,7 @@ def test_detections_per_im(self, det_per_im, gc): ) def ref(*args, **kwargs): - return (gt_scores.flatten(), gt_boxes, gt_classes) + return (gt_scores.flatten(), gt_boxes, gt_classes) # type: ignore[attr-defined] self.assertReferenceChecks(gc, op, [scores, boxes], ref) @@ -129,7 +129,7 @@ def ref(*args, **kwargs): cls_agnostic_bbox_reg=st.booleans(), input_boxes_include_bg_cls=st.booleans(), output_classes_include_bg_cls=st.booleans(), - **HU_CONFIG + **HU_CONFIG # type: ignore[arg-type] ) @settings(deadline=1000) def test_multiclass( @@ -185,7 +185,7 @@ def ref(*args, **kwargs): self.assertReferenceChecks(gc, op, [scores, boxes], ref) - @given(det_per_im=st.integers(1, 3), **HU_CONFIG) + @given(det_per_im=st.integers(1, 3), **HU_CONFIG) # type: ignore[arg-type] def test_detections_per_im_same_thresh(self, det_per_im, gc): in_centers = [(0, 0), (20, 20), (50, 50)] in_scores = [0.7, 0.7, 0.7] @@ -205,7 +205,7 @@ def test_detections_per_im_same_thresh(self, det_per_im, gc): def verify(inputs, outputs): # check scores np.testing.assert_allclose( - outputs[0], gt_scores.flatten(), atol=1e-4, rtol=1e-4, + outputs[0], gt_scores.flatten(), atol=1e-4, rtol=1e-4, # type: ignore[attr-defined] ) # check classes np.testing.assert_allclose( @@ -215,7 +215,7 @@ def verify(inputs, outputs): self.assertValidationChecks(gc, op, [scores, boxes], verify, as_kwargs=False) - @given(num_classes=st.integers(2, 10), **HU_CONFIG) + @given(num_classes=st.integers(2, 10), **HU_CONFIG) # type: ignore[arg-type] def test_detections_per_im_same_thresh_multiclass(self, num_classes, gc): in_centers = [(0, 0), (20, 20), (50, 50)] in_scores = [0.6, 0.7, 0.7] diff --git a/caffe2/python/operator_test/cast_op_test.py b/caffe2/python/operator_test/cast_op_test.py index bf2a210086e69..cbf3250fb1d87 100644 --- a/caffe2/python/operator_test/cast_op_test.py +++ b/caffe2/python/operator_test/cast_op_test.py @@ -31,13 +31,13 @@ def test_cast_int_float_empty(self, gc, dc): # This is actually 0 self.assertGradientChecks(gc, op, [data], 0, [0]) - @given(data=hu.tensor(dtype=np.int32), **hu.gcs_cpu_only) + @given(data=hu.tensor(dtype=np.int32), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_cast_int_to_string(self, data, gc, dc): op = core.CreateOperator( 'Cast', 'data', 'data_cast', to=core.DataType.STRING) def ref(data): - ret = data.astype(dtype=np.str) + ret = data.astype(dtype=np.str) # type: ignore[attr-defined] # the string blob will be fetched as object, we feed and re-fetch # to mimic this. with hu.temp_workspace('tmp_ref_int_to_string'): diff --git a/caffe2/python/operator_test/clip_tensor_op_test.py b/caffe2/python/operator_test/clip_tensor_op_test.py index efc86815bc49d..4e53a4365e7a4 100644 --- a/caffe2/python/operator_test/clip_tensor_op_test.py +++ b/caffe2/python/operator_test/clip_tensor_op_test.py @@ -18,7 +18,7 @@ class TestClipTensorByScalingOp(serial.SerializedTestCase): additional_threshold=st.floats(0.1, 10), use_additional_threshold=st.booleans(), inplace=st.booleans(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_clip_tensor_by_scaling(self, n, d, threshold, additional_threshold, use_additional_threshold, inplace, gc, dc): diff --git a/caffe2/python/operator_test/collect_and_distribute_fpn_rpn_proposals_op_test.py b/caffe2/python/operator_test/collect_and_distribute_fpn_rpn_proposals_op_test.py index 28e6cd3b3df63..b5f33e14301bf 100644 --- a/caffe2/python/operator_test/collect_and_distribute_fpn_rpn_proposals_op_test.py +++ b/caffe2/python/operator_test/collect_and_distribute_fpn_rpn_proposals_op_test.py @@ -183,7 +183,7 @@ def _create_input(proposal_count, rpn_min_level, rpn_num_levels, roi_canonical_s rpn_post_nms_topN=st.integers(min_value=1000, max_value=4000), roi_canonical_scale=st.integers(min_value=100, max_value=300), roi_canonical_level=st.integers(min_value=1, max_value=8), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_collect_and_dist( self, @@ -244,7 +244,7 @@ def test_collect_and_dist( rpn_post_nms_topN=st.integers(min_value=1000, max_value=4000), roi_canonical_scale=st.integers(min_value=100, max_value=300), roi_canonical_level=st.integers(min_value=1, max_value=8), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_collect_and_dist_separately( self, diff --git a/caffe2/python/operator_test/conv_test.py b/caffe2/python/operator_test/conv_test.py index e600aa2c9ee96..1363e70ac7472 100644 --- a/caffe2/python/operator_test/conv_test.py +++ b/caffe2/python/operator_test/conv_test.py @@ -37,11 +37,11 @@ def _cudnn_supports(dilation=False, nhwc=False, backward=False): def _cudnn_convolution_algo_count(direction): try: if direction == "fwd": - return st.integers(0, C.cudnn_convolution_fwd_algo_count - 1) + return st.integers(0, C.cudnn_convolution_fwd_algo_count - 1) # type: ignore[attr-defined] elif direction == "dgrad": - return st.integers(0, C.cudnn_convolution_bwd_data_algo_count - 1) + return st.integers(0, C.cudnn_convolution_bwd_data_algo_count - 1) # type: ignore[attr-defined] elif direction == "wgrad": - return st.integers(0, C.cudnn_convolution_bwd_filter_algo_count - 1) + return st.integers(0, C.cudnn_convolution_bwd_filter_algo_count - 1) # type: ignore[attr-defined] else: assert False except Exception: @@ -573,7 +573,7 @@ def test_3d_convolution( force_algo_fwd=_cudnn_convolution_algo_count("fwd"), force_algo_dgrad=_cudnn_convolution_algo_count("dgrad"), force_algo_wgrad=_cudnn_convolution_algo_count("wgrad"), - **hu.gcs_no_hip + **hu.gcs_no_hip # type: ignore[arg-type] ) # MIOPEN doesn't support 3D conv yet @settings(deadline=10000) def test_3d_convolution_cudnn_nchw( @@ -759,7 +759,7 @@ def canonical(o): ) ), engine=st.sampled_from(["CUDNN", ""]), - **hu.gcs_no_hip + **hu.gcs_no_hip # type: ignore[arg-type] ) @settings(deadline=1000) def test_convolution_sync(self, net_type, num_workers, engine, gc, dc): @@ -875,7 +875,7 @@ def test_use_cudnn_engine_interactions(self): else: op_cudnn = False # the default if op_engine is not None: - kwargs["engine"] = op_engine + kwargs["engine"] = op_engine # type: ignore[assignment] calculated_cudnn = kwargs.get("use_cudnn", model_default) expected_engine = kwargs.get( diff --git a/caffe2/python/operator_test/copy_rows_to_tensor_op_test.py b/caffe2/python/operator_test/copy_rows_to_tensor_op_test.py index 8e914259bb788..1c1ed2126eb0f 100644 --- a/caffe2/python/operator_test/copy_rows_to_tensor_op_test.py +++ b/caffe2/python/operator_test/copy_rows_to_tensor_op_test.py @@ -25,7 +25,7 @@ def get_input_tensors(): class TestCopyRowsToTensor(hu.HypothesisTestCase): - @given(input_tensor=get_input_tensors(), **hu.gcs_cpu_only) + @given(input_tensor=get_input_tensors(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_copy_rows_to_tensor(self, input_tensor, gc, dc): dtype = np.random.choice([np.float16, np.float32, np.int32, np.int64], 1)[0] input_tensor = np.array(input_tensor).astype(dtype) @@ -51,7 +51,7 @@ def ref(input_tensor, indices, row): reference=ref, ) - @given(input_tensor=get_input_tensors(), **hu.gcs_cpu_only) + @given(input_tensor=get_input_tensors(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_copy_rows_to_tensor_invalid_input(self, input_tensor, gc, dc): input_tensor = np.array(input_tensor).astype(np.float32) diff --git a/caffe2/python/operator_test/cross_entropy_ops_test.py b/caffe2/python/operator_test/cross_entropy_ops_test.py index c88f93503a15e..d5e6906217f0e 100644 --- a/caffe2/python/operator_test/cross_entropy_ops_test.py +++ b/caffe2/python/operator_test/cross_entropy_ops_test.py @@ -119,7 +119,7 @@ def sigmoid_xentr_logit_grad_ref(g_out, outputs, fwd_inputs): @given( log_D_trick=st.just(False), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_cross_entropy_and_unjoied_cross_entropy_relation( self, log_D_trick, gc, dc @@ -249,7 +249,7 @@ def weighted_sigmoid_xentr_logit_grad_ref(g_out, outputs, fwd_inputs): @given(n=st.integers(2, 10), b=st.integers(1, 5), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_soft_label_cross_entropy(self, n, b, gc, dc): # Initialize X and add 1e-2 for numerical stability X = np.random.rand(b, n).astype(np.float32) @@ -264,7 +264,7 @@ def test_soft_label_cross_entropy(self, n, b, gc, dc): # Reference implementation of cross entropy with soft labels def soft_label_xentr_ref(X, label): - xent = [np.sum((-label[j][i] * np.log(max(X[j][i], 1e-20)) + xent = [np.sum((-label[j][i] * np.log(max(X[j][i], 1e-20)) # type: ignore[call-overload] for i in range(len(X[0])))) for j in range(b)] return (xent,) diff --git a/caffe2/python/operator_test/ctc_beam_search_decoder_op_test.py b/caffe2/python/operator_test/ctc_beam_search_decoder_op_test.py index 29440c00a4b3c..0aaae8a6919f8 100644 --- a/caffe2/python/operator_test/ctc_beam_search_decoder_op_test.py +++ b/caffe2/python/operator_test/ctc_beam_search_decoder_op_test.py @@ -24,7 +24,7 @@ class TestCTCBeamSearchDecoderOp(serial.SerializedTestCase): alphabet_size=st.sampled_from([1, 2, 32, 128, 512]), beam_width=st.sampled_from([1, 2, 16, None]), num_candidates=st.sampled_from([1, 2]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None, max_examples=30) def test_ctc_beam_search_decoder( @@ -68,7 +68,7 @@ def ref_ctc_decoder(inputs, seq_len): val = np.array([]).astype(np.int32) for i in range(batch): - Pb, Pnb = defaultdict(Counter), defaultdict(Counter) + Pb, Pnb = defaultdict(Counter), defaultdict(Counter) # type: ignore[var-annotated] Pb[0][()] = 1 Pnb[0][()] = 0 A_prev = [()] @@ -84,7 +84,7 @@ def ref_ctc_decoder(inputs, seq_len): Pb[t][l] += ctc[t][c] * (Pb[t - 1][l] + Pnb[t - 1][l]) else: l_plus = l + (c,) - if len(l) > 0 and c == l[-1]: + if len(l) > 0 and c == l[-1]: # type: ignore[misc] Pnb[t][l_plus] += ctc[t][c] * Pb[t - 1][l] Pnb[t][l] += ctc[t][c] * Pnb[t - 1][l] else: diff --git a/caffe2/python/operator_test/ctc_greedy_decoder_op_test.py b/caffe2/python/operator_test/ctc_greedy_decoder_op_test.py index 8bc7eb47d4882..f67d90ee738a2 100644 --- a/caffe2/python/operator_test/ctc_greedy_decoder_op_test.py +++ b/caffe2/python/operator_test/ctc_greedy_decoder_op_test.py @@ -19,7 +19,7 @@ class TestCTCGreedyDecoderOp(serial.SerializedTestCase): max_time=st.sampled_from([2, 10, 30, 50]), num_classes=st.sampled_from([2, 10, 26, 40]), merge_repeated=st.sampled_from([True, False]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_ctc_greedy_decoder( @@ -45,14 +45,14 @@ def ref_ctc_decoder(inputs, seq_len): for t in range(len_i): max_id = np.argmax(inputs[t, i, :]) if max_id == 0: - prev_id = max_id + prev_id = max_id # type: ignore[assignment] continue if max_id == prev_id and merge: - prev_id = max_id + prev_id = max_id # type: ignore[assignment] continue t_dec += 1 val = np.append(val, max_id) - prev_id = max_id + prev_id = max_id # type: ignore[assignment] output_len = np.append(output_len, t_dec) return [output_len, val] @@ -89,7 +89,7 @@ def ref_ctc_decoder_max_time(inputs): batch=st.sampled_from([2, 4, 128, 256]), max_time=st.sampled_from([2, 10, 30, 50]), num_classes=st.sampled_from([2, 10, 26, 40]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_ctc_greedy_decoder_no_merge_arg( @@ -116,14 +116,14 @@ def ref_ctc_decoder_no_merge_arg(inputs, seq_len): for t in range(len_i): max_id = np.argmax(inputs[t, i, :]) if max_id == 0: - prev_id = max_id + prev_id = max_id # type: ignore[assignment] continue if max_id == prev_id and merge: - prev_id = max_id + prev_id = max_id # type: ignore[assignment] continue t_dec += 1 val = np.append(val, max_id) - prev_id = max_id + prev_id = max_id # type: ignore[assignment] output_len = np.append(output_len, t_dec) return [output_len, val] diff --git a/caffe2/python/operator_test/dataset_ops_test.py b/caffe2/python/operator_test/dataset_ops_test.py index a7e01570a22ab..cd81b9cd5eb05 100644 --- a/caffe2/python/operator_test/dataset_ops_test.py +++ b/caffe2/python/operator_test/dataset_ops_test.py @@ -265,7 +265,7 @@ def test_dataset_ops(self): zipped = zip(expected_fields, schema.field_names(), schema.field_types()) for (ref_name, ref_type), name, dtype in zipped: self.assertEquals(ref_name, name) - self.assertEquals(np.dtype(ref_type), dtype) + self.assertEquals(np.dtype(ref_type), dtype) # type: ignore[call-overload] """ 2. The contents of our dataset. diff --git a/caffe2/python/operator_test/decay_adagrad_test.py b/caffe2/python/operator_test/decay_adagrad_test.py index 9004c1c26b963..97b4b88f47423 100644 --- a/caffe2/python/operator_test/decay_adagrad_test.py +++ b/caffe2/python/operator_test/decay_adagrad_test.py @@ -37,7 +37,7 @@ def ref_decay_adagrad(param, mom1, mom2, grad, LR, ITER, allow_nan=False, allow_infinity=False), weight_decay=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_decay_adagrad(self, inputs, ITER, LR, beta1, beta2, epsilon, weight_decay, gc, dc): bias_correction_first = True diff --git a/caffe2/python/operator_test/deform_conv_test.py b/caffe2/python/operator_test/deform_conv_test.py index 67289de5e924a..60feacac5727e 100644 --- a/caffe2/python/operator_test/deform_conv_test.py +++ b/caffe2/python/operator_test/deform_conv_test.py @@ -84,7 +84,7 @@ def _conv_2d_shuffle_offsets( e = [] for v in o: e.append([[v] * int(dims[1])] * int(dims[0])) - w0 = [[w0] * input_channels] * output_channels + w0 = [[w0] * input_channels] * output_channels # type: ignore[list-item] return ( np.array([e] * batch_size).astype(np.float32), utils.NCHW2NHWC(np.array(w0).astype(np.float32)), @@ -106,7 +106,7 @@ class TestConvolution(hu.HypothesisTestCase): engine=st.sampled_from(["", "CUDNN", "MKLDNN"]), use_bias=st.booleans(), deformable_group=st.integers(1, 3), - **hu.gcs_gpu_only + **hu.gcs_gpu_only # type: ignore[arg-type] ) def test_null_offset_convolution( self, @@ -220,7 +220,7 @@ def reference_conv_op(*args): engine=st.sampled_from(["", "CUDNN", "MKLDNN"]), use_bias=st.booleans(), deformable_group=st.integers(1, 4), - **hu.gcs_gpu_only + **hu.gcs_gpu_only # type: ignore[arg-type] ) def test_flat_input_convolution( self, @@ -318,7 +318,7 @@ def reference_conv_op(*args): engine=st.sampled_from(["", "CUDNN", "MKLDNN"]), use_bias=st.booleans(), deformable_group=st.integers(1, 4), - **hu.gcs_gpu_only + **hu.gcs_gpu_only # type: ignore[arg-type] ) def test_shuffle_input_convolution( self, @@ -432,7 +432,7 @@ def reference_conv_op(*args): shared_buffer=st.booleans(), use_bias=st.booleans(), deformable_group=st.integers(1, 3), - **hu.gcs_gpu_only + **hu.gcs_gpu_only # type: ignore[arg-type] ) def test_conv_separate_stride_pad_gradients( self, @@ -520,7 +520,7 @@ def test_conv_separate_stride_pad_gradients( engine=st.sampled_from(["", "CUDNN", "MKLDNN"]), use_bias=st.booleans(), deformable_group=st.integers(1, 3), - **hu.gcs_gpu_only + **hu.gcs_gpu_only # type: ignore[arg-type] ) def test_conv_gradients( self, diff --git a/caffe2/python/operator_test/dense_vector_to_id_list_op_test.py b/caffe2/python/operator_test/dense_vector_to_id_list_op_test.py index 8b6f42417fd48..b56561aeda480 100644 --- a/caffe2/python/operator_test/dense_vector_to_id_list_op_test.py +++ b/caffe2/python/operator_test/dense_vector_to_id_list_op_test.py @@ -19,7 +19,7 @@ def id_list_batch(draw): inputs = [] sample_size = draw(st.integers(5, 10)) for _ in range(batch_size): - values = draw(hnp.arrays(values_dtype, sample_size, st.integers(0, 1))) + values = draw(hnp.arrays(values_dtype, sample_size, st.integers(0, 1))) # type: ignore[misc] inputs += [values] return [np.array(inputs)] @@ -55,7 +55,7 @@ def test_dense_vector_to_id_list_ref(self): np.testing.assert_array_equal(sparse_lengths, expected_lengths) np.testing.assert_array_equal(sparse_values, expected_values) - @given(inputs=id_list_batch(), **hu.gcs_cpu_only) + @given(inputs=id_list_batch(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dense_vector_to_id_list_op(self, inputs, gc, dc): op = core.CreateOperator( "DenseVectorToIdList", diff --git a/caffe2/python/operator_test/detectron_keypoints.py b/caffe2/python/operator_test/detectron_keypoints.py index 1abff0675993f..52b4050204ed3 100644 --- a/caffe2/python/operator_test/detectron_keypoints.py +++ b/caffe2/python/operator_test/detectron_keypoints.py @@ -32,8 +32,8 @@ def heatmaps_to_keypoints(maps, rois): heights = rois[:, 3] - rois[:, 1] widths = np.maximum(widths, 1) heights = np.maximum(heights, 1) - widths_ceil = np.ceil(widths).astype(np.int) - heights_ceil = np.ceil(heights).astype(np.int) + widths_ceil = np.ceil(widths).astype(np.int) # type: ignore[attr-defined] + heights_ceil = np.ceil(heights).astype(np.int) # type: ignore[attr-defined] num_keypoints = np.maximum(maps.shape[1], _NUM_KEYPOINTS) @@ -171,13 +171,13 @@ def approx_heatmap_keypoint(heatmaps_in, bboxes_in): deltaY = 0 deltaScore = maxScore else: - deltaY = (b[1] * A[0][0] - b[0] * A[1][0]) / div - deltaX = (b[0] * A[1][1] - b[1] * A[0][1]) / div + deltaY = (b[1] * A[0][0] - b[0] * A[1][0]) / div # type: ignore[assignment] + deltaX = (b[0] * A[1][1] - b[1] * A[0][1]) / div # type: ignore[assignment] # clip delta if going out-of-range of 3x3 grid if abs(deltaX) > 1.5 or abs(deltaY) > 1.5: scale = 1.5 / max(abs(deltaX), abs(deltaY)) - deltaX *= scale - deltaY *= scale + deltaX *= scale # type: ignore[assignment] + deltaY *= scale # type: ignore[assignment] # score = f(0) + f'(0)*x + 1/2 * f''(0) * x^2 # = f(0) - b*x + 1/2*x*A*x deltaScore = ( diff --git a/caffe2/python/operator_test/dropout_op_test.py b/caffe2/python/operator_test/dropout_op_test.py index 84c2f7e35f565..dfdb396bc8b9d 100644 --- a/caffe2/python/operator_test/dropout_op_test.py +++ b/caffe2/python/operator_test/dropout_op_test.py @@ -37,7 +37,7 @@ def test_dropout_is_test(self, X, in_place, ratio, engine, gc, dc): # No sense in checking gradients for test phase def reference_dropout_test(x): - return x, np.ones(x.shape, dtype=np.bool) + return x, np.ones(x.shape, dtype=np.bool) # type: ignore[attr-defined] self.assertReferenceChecks( gc, op, [X], reference_dropout_test, # The 'mask' output may be uninitialized @@ -69,7 +69,7 @@ def test_dropout_ratio0(self, X, in_place, output_mask, engine, gc, dc): self.assertGradientChecks(gc, op, [X], 0, [0]) def reference_dropout_ratio0(x): - return (x,) if is_test else (x, np.ones(x.shape, dtype=np.bool)) + return (x,) if is_test else (x, np.ones(x.shape, dtype=np.bool)) # type: ignore[attr-defined] self.assertReferenceChecks( gc, op, [X], reference_dropout_ratio0, # Don't check the mask with cuDNN because it's packed data diff --git a/caffe2/python/operator_test/elementwise_logical_ops_test.py b/caffe2/python/operator_test/elementwise_logical_ops_test.py index 3195d969dee55..22ece4f989948 100644 --- a/caffe2/python/operator_test/elementwise_logical_ops_test.py +++ b/caffe2/python/operator_test/elementwise_logical_ops_test.py @@ -37,7 +37,7 @@ def test_reference(self): @given(N=st.integers(min_value=1, max_value=10), engine=st.sampled_from(["", "CUDNN"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_where(self, N, gc, dc, engine): C = np.random.rand(N).astype(bool) @@ -49,7 +49,7 @@ def test_where(self, N, gc, dc, engine): @given(N=st.integers(min_value=1, max_value=10), engine=st.sampled_from(["", "CUDNN"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_where_dim2(self, N, gc, dc, engine): C = np.random.rand(N, N).astype(bool) @@ -76,7 +76,7 @@ def test_reference(self): @given(N=st.integers(min_value=1, max_value=10), engine=st.sampled_from(["", "CUDNN"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_rowwhere(self, N, gc, dc, engine): C = np.random.rand(N).astype(bool) X = np.random.rand(N).astype(np.float32) @@ -93,7 +93,7 @@ def test_rowwhere(self, N, gc, dc, engine): @given(N=st.integers(min_value=1, max_value=10), engine=st.sampled_from(["", "CUDNN"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_rowwhere_dim2(self, N, gc, dc, engine): C = np.random.rand(N).astype(bool) X = np.random.rand(N, N).astype(np.float32) @@ -113,7 +113,7 @@ class TestIsMemberOf(serial.SerializedTestCase): @given(N=st.integers(min_value=1, max_value=10), engine=st.sampled_from(["", "CUDNN"]), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_is_member_of(self, N, gc, dc, engine): X = np.random.randint(10, size=N).astype(np.int64) @@ -126,7 +126,7 @@ def test_is_member_of(self, N, gc, dc, engine): engine=engine, ) self.assertDeviceChecks(dc, op, [X], [0]) - values = set(values) + values = set(values) # type: ignore[assignment] def test(x): return [np.vectorize(lambda x: x in values)(x)] diff --git a/caffe2/python/operator_test/elementwise_op_broadcast_test.py b/caffe2/python/operator_test/elementwise_op_broadcast_test.py index 605c1d7412710..0bc82a6833acf 100644 --- a/caffe2/python/operator_test/elementwise_op_broadcast_test.py +++ b/caffe2/python/operator_test/elementwise_op_broadcast_test.py @@ -360,7 +360,7 @@ def ref_op(X, Y): op = core.CreateOperator( "SumReduceLike", ["X", "Y"], "out", broadcast=1, axis=0) - def ref_op(X, Y): + def ref_op(X, Y): # type: ignore[no-redef] res = np.sum(X, axis=3) res = np.sum(res, axis=2) return [res] @@ -378,7 +378,7 @@ def ref_op(X, Y): op = core.CreateOperator( "SumReduceLike", ["X", "Y"], "out", broadcast=1, axis=1) - def ref_op(X, Y): + def ref_op(X, Y): # type: ignore[no-redef] res = np.sum(X, axis=0) res = np.sum(res, axis=2) return [res] @@ -396,7 +396,7 @@ def ref_op(X, Y): op = core.CreateOperator( "SumReduceLike", ["X", "Y"], "out", broadcast=1) - def ref_op(X, Y): + def ref_op(X, Y): # type: ignore[no-redef] res = np.sum(X, axis=0) res = np.sum(res, axis=2) return [res.reshape(Y.shape)] diff --git a/caffe2/python/operator_test/elementwise_ops_test.py b/caffe2/python/operator_test/elementwise_ops_test.py index 922e4554e9a80..8c4b8485aa453 100644 --- a/caffe2/python/operator_test/elementwise_ops_test.py +++ b/caffe2/python/operator_test/elementwise_ops_test.py @@ -739,7 +739,7 @@ def reciprocal_op(X): gc, op, [X], 0, [0], stepsize=1e-3, threshold=0.05, ensure_outputs_are_inferred=True) - @given(X=hu.tensor(dtype=np.bool), **hu.gcs) + @given(X=hu.tensor(dtype=np.bool), **hu.gcs) # type: ignore[attr-defined] @settings(deadline=10000) def test_not(self, X, gc, dc): def not_op(X): diff --git a/caffe2/python/operator_test/ensure_clipped_test.py b/caffe2/python/operator_test/ensure_clipped_test.py index a89718745b1c7..a8dcb5f16c881 100644 --- a/caffe2/python/operator_test/ensure_clipped_test.py +++ b/caffe2/python/operator_test/ensure_clipped_test.py @@ -14,7 +14,7 @@ class TestEnsureClipped(hu.HypothesisTestCase): in_place=st.booleans(), sparse=st.booleans(), indices=hu.arrays(dims=[5], elements=st.booleans()), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_ensure_clipped(self, X, in_place, sparse, indices, gc, dc): if (not in_place) and sparse: diff --git a/caffe2/python/operator_test/feature_maps_ops_test.py b/caffe2/python/operator_test/feature_maps_ops_test.py index 5a20b63166be5..9184e2b26d886 100644 --- a/caffe2/python/operator_test/feature_maps_ops_test.py +++ b/caffe2/python/operator_test/feature_maps_ops_test.py @@ -23,11 +23,11 @@ def test_merge_dense_feature_tensors(self): # Input 1. workspace.FeedBlob( "in1", - np.array([[11.1, 12.1, 13.1, 14.1], [11.2, 12.2, 13.2, 14.2]], dtype=np.float) + np.array([[11.1, 12.1, 13.1, 14.1], [11.2, 12.2, 13.2, 14.2]], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in1_presence", - np.array([[True, False, False, True], [False, True, True, False]], dtype=np.bool) + np.array([[True, False, False, True], [False, True, True, False]], dtype=np.bool) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -42,7 +42,7 @@ def test_merge_dense_feature_tensors(self): ) np.testing.assert_array_equal( workspace.FetchBlob("out_values"), - np.array([11.1, 14.1, 12.2, 13.2], dtype=np.float) + np.array([11.1, 14.1, 12.2, 13.2], dtype=np.float) # type: ignore[attr-defined] ) @@ -62,20 +62,20 @@ def test_merge_single_scalar_feature_tensors(self): # Input 1. workspace.FeedBlob( "in1", - np.array([11.1, 0.0], dtype=np.float) + np.array([11.1, 0.0], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( "in2", - np.array([12.1, 12.2], dtype=np.float) + np.array([12.1, 12.2], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -90,7 +90,7 @@ def test_merge_single_scalar_feature_tensors(self): ) np.testing.assert_array_equal( workspace.FetchBlob("out_values"), - np.array([11.1, 12.1, 12.2], dtype=np.float) + np.array([11.1, 12.1, 12.2], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_single_scalar_feature_tensors_gradient(self): @@ -110,35 +110,35 @@ def test_merge_single_scalar_feature_tensors_gradient(self): # Inputs 1, 2 & 3. workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.FeedBlob( "in3_presence", - np.array([False, True], dtype=np.bool) + np.array([False, True], dtype=np.bool) # type: ignore[attr-defined] ) # Input 4. workspace.FeedBlob( "out_values_grad", - np.array([0.1, 1.1, 1.2, 2.3], dtype=np.float) + np.array([0.1, 1.1, 1.2, 2.3], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) np.testing.assert_array_equal( workspace.FetchBlob("in1_grad"), - np.array([0.1, 0], dtype=np.float) + np.array([0.1, 0], dtype=np.float) # type: ignore[attr-defined] ) np.testing.assert_array_equal( workspace.FetchBlob("in2_grad"), - np.array([1.1, 1.2], dtype=np.float) + np.array([1.1, 1.2], dtype=np.float) # type: ignore[attr-defined] ) np.testing.assert_array_equal( workspace.FetchBlob("in3_grad"), - np.array([0, 2.3], dtype=np.float) + np.array([0, 2.3], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_single_scalar_feature_tensors_gradient_with_strings(self): @@ -158,15 +158,15 @@ def test_merge_single_scalar_feature_tensors_gradient_with_strings(self): # Inputs 1, 2 & 3. workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.FeedBlob( "in3_presence", - np.array([False, True], dtype=np.bool) + np.array([False, True], dtype=np.bool) # type: ignore[attr-defined] ) # Input 4. workspace.FeedBlob( @@ -210,11 +210,11 @@ def test_merge_single_list_feature_tensors(self): ) workspace.FeedBlob( "in1_values", - np.array([11.1, 11.2], dtype=np.float) + np.array([11.1, 11.2], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -223,11 +223,11 @@ def test_merge_single_list_feature_tensors(self): ) workspace.FeedBlob( "in2_values", - np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -246,7 +246,7 @@ def test_merge_single_list_feature_tensors(self): ) np.testing.assert_array_equal( workspace.FetchBlob("out_values_values"), - np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_single_list_feature_tensors_gradient(self): @@ -280,7 +280,7 @@ def _test_merge_single_list_or_map_feature_tensors_gradient(self, op_name): ) workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -289,22 +289,22 @@ def _test_merge_single_list_or_map_feature_tensors_gradient(self, op_name): ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.FeedBlob( "out_values_values_grad", - np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) np.testing.assert_array_equal( workspace.FetchBlob("in1_values_grad"), - np.array([11.1, 11.2], dtype=np.float) + np.array([11.1, 11.2], dtype=np.float) # type: ignore[attr-defined] ) np.testing.assert_array_equal( workspace.FetchBlob("in2_values_grad"), - np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_single_map_feature_tensors(self): @@ -332,11 +332,11 @@ def test_merge_single_map_feature_tensors(self): ) workspace.FeedBlob( "in1_values", - np.array([11.1, 11.2], dtype=np.float) + np.array([11.1, 11.2], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in1_presence", - np.array([True, False], dtype=np.bool) + np.array([True, False], dtype=np.bool) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -349,11 +349,11 @@ def test_merge_single_map_feature_tensors(self): ) workspace.FeedBlob( "in2_values", - np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) workspace.FeedBlob( "in2_presence", - np.array([True, True], dtype=np.bool) + np.array([True, True], dtype=np.bool) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -376,7 +376,7 @@ def test_merge_single_map_feature_tensors(self): ) np.testing.assert_array_equal( workspace.FetchBlob("out_values_values"), - np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 12.3, 12.4], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_multi_scalar_feature_tensors(self): @@ -402,7 +402,7 @@ def test_merge_multi_scalar_feature_tensors(self): ) workspace.FeedBlob( "in1_values", - np.array([11.0, 12.0, 13.0], dtype=np.float) + np.array([11.0, 12.0, 13.0], dtype=np.float) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -415,7 +415,7 @@ def test_merge_multi_scalar_feature_tensors(self): ) workspace.FeedBlob( "in2_values", - np.array([14.0, 15.0, 16.0], dtype=np.float) + np.array([14.0, 15.0, 16.0], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -430,7 +430,7 @@ def test_merge_multi_scalar_feature_tensors(self): ) np.testing.assert_array_equal( workspace.FetchBlob("out_values"), - np.array([11.0, 14.0, 15.0, 12.0, 13.0, 16.0], dtype=np.float) + np.array([11.0, 14.0, 15.0, 12.0, 13.0, 16.0], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_multi_scalar_feature_tensors_gradient(self): @@ -460,18 +460,18 @@ def test_merge_multi_scalar_feature_tensors_gradient(self): # Grad input. workspace.FeedBlob( "out_values_grad", - np.array([11.0, 14.0, 15.0, 12.0, 13.0, 16.0, 17.0], dtype=np.float) + np.array([11.0, 14.0, 15.0, 12.0, 13.0, 16.0, 17.0], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) np.testing.assert_array_equal( workspace.FetchBlob("in1_values_grad"), - np.array([11.0, 12.0, 13.0], dtype=np.float) + np.array([11.0, 12.0, 13.0], dtype=np.float) # type: ignore[attr-defined] ) np.testing.assert_array_equal( workspace.FetchBlob("in2_values_grad"), - np.array([14.0, 15.0, 16.0, 17.0], dtype=np.float) + np.array([14.0, 15.0, 16.0, 17.0], dtype=np.float) # type: ignore[attr-defined] ) def test_merge_multi_list_feature_tensors(self): @@ -504,7 +504,7 @@ def test_merge_multi_list_feature_tensors(self): ) workspace.FeedBlob( "in1_values_values", - np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -521,7 +521,7 @@ def test_merge_multi_list_feature_tensors(self): ) workspace.FeedBlob( "in2_values_values", - np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) + np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -545,7 +545,7 @@ def test_merge_multi_list_feature_tensors(self): 11.1, 11.2, 14.1, 14.2, 15.1, 15.2, 12.1, 12.2, 13.1, 13.2, 16.1, 16.2 ], - dtype=np.float + dtype=np.float # type: ignore[attr-defined] ) ) @@ -583,7 +583,7 @@ def test_merge_multi_map_feature_tensors(self): ) workspace.FeedBlob( "in1_values_values", - np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) # type: ignore[attr-defined] ) # Input 2. workspace.FeedBlob( @@ -604,7 +604,7 @@ def test_merge_multi_map_feature_tensors(self): ) workspace.FeedBlob( "in2_values_values", - np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) + np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) # type: ignore[attr-defined] ) workspace.RunOperatorOnce(op) @@ -635,7 +635,7 @@ def test_merge_multi_map_feature_tensors(self): 11.1, 11.2, 14.1, 14.2, 15.1, 15.2, 12.1, 12.2, 13.1, 13.2, 16.1, 16.2 ], - dtype=np.float + dtype=np.float # type: ignore[attr-defined] ) ) @@ -689,7 +689,7 @@ def _test_merge_multi_list_or_map_feature_tensors_gradient(self, op_name): 11.1, 11.2, 14.1, 14.2, 15.1, 15.2, 12.1, 12.2, 13.1, 13.2, 16.1, 16.2 ], - dtype=np.float + dtype=np.float # type: ignore[attr-defined] ) ) @@ -697,9 +697,9 @@ def _test_merge_multi_list_or_map_feature_tensors_gradient(self, op_name): np.testing.assert_array_equal( workspace.FetchBlob("in1_values_values_grad"), - np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) + np.array([11.1, 11.2, 12.1, 12.2, 13.1, 13.2], dtype=np.float) # type: ignore[attr-defined] ) np.testing.assert_array_equal( workspace.FetchBlob("in2_values_values_grad"), - np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) + np.array([14.1, 14.2, 15.1, 15.2, 16.1, 16.2], dtype=np.float) # type: ignore[attr-defined] ) diff --git a/caffe2/python/operator_test/filler_ops_test.py b/caffe2/python/operator_test/filler_ops_test.py index e080dde3eb5fb..bbdbc5c418672 100644 --- a/caffe2/python/operator_test/filler_ops_test.py +++ b/caffe2/python/operator_test/filler_ops_test.py @@ -261,8 +261,8 @@ def test_fp16_uniformfill_op(self, min, range, emb_size, dim_size, gc, dc): expected_max = min + range self.assertEqual(blob_out.dtype.name, expected_type) - self.assertAlmostEqual(np.mean(blob_out, dtype=np.float32), expected_mean, delta=0.1) - self.assertAlmostEqual(np.var(blob_out, dtype=np.float32), expected_var, delta=0.1) + self.assertAlmostEqual(np.mean(blob_out, dtype=np.float32), expected_mean, delta=0.1) # type: ignore[call-overload] + self.assertAlmostEqual(np.var(blob_out, dtype=np.float32), expected_var, delta=0.1) # type: ignore[call-overload] self.assertGreaterEqual(np.min(blob_out), expected_min) self.assertLessEqual(np.max(blob_out), expected_max) diff --git a/caffe2/python/operator_test/flexible_top_k_test.py b/caffe2/python/operator_test/flexible_top_k_test.py index 3e0e5722b0ceb..4fd41a6647626 100644 --- a/caffe2/python/operator_test/flexible_top_k_test.py +++ b/caffe2/python/operator_test/flexible_top_k_test.py @@ -15,11 +15,11 @@ class TestFlexibleTopK(serial.SerializedTestCase): def flexible_top_k_ref(self, X, k): X_flat = X.reshape((-1, X.shape[-1])) - indices_ref = np.ndarray(shape=sum(k), dtype=np.int32) - values_ref = np.ndarray(shape=sum(k), dtype=np.float32) + indices_ref = np.ndarray(shape=sum(k), dtype=np.int32) # type: ignore[arg-type] + values_ref = np.ndarray(shape=sum(k), dtype=np.float32) # type: ignore[arg-type] offset = 0 for i in range(X_flat.shape[0]): - od = OrderedDict() + od = OrderedDict() # type: ignore[var-annotated] for j in range(X_flat.shape[1]): val = X_flat[i, j] if val not in od: @@ -39,7 +39,7 @@ def flexible_top_k_ref(self, X, k): return (values_ref, indices_ref) - @given(X=hu.tensor(min_dim=2), **hu.gcs_cpu_only) + @given(X=hu.tensor(min_dim=2), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_flexible_top_k(self, X, gc, dc): X = X.astype(dtype=np.float32) @@ -56,7 +56,7 @@ def bind_ref(X_loc, k): self.assertReferenceChecks(gc, op, [X, k], bind_ref) - @given(X=hu.tensor(min_dim=2), **hu.gcs_cpu_only) + @given(X=hu.tensor(min_dim=2), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_flexible_top_k_grad(self, X, gc, dc): X = X.astype(np.float32) diff --git a/caffe2/python/operator_test/fused_nbit_rowwise_conversion_ops_test.py b/caffe2/python/operator_test/fused_nbit_rowwise_conversion_ops_test.py index b7cb5f68351f5..8e43b0071b1a3 100644 --- a/caffe2/python/operator_test/fused_nbit_rowwise_conversion_ops_test.py +++ b/caffe2/python/operator_test/fused_nbit_rowwise_conversion_ops_test.py @@ -32,7 +32,7 @@ def half_floats_to_bytes(floats): for i, value in enumerate(floats): assert isinstance(value, np.float16), (value, floats) byte_matrix[i] = np.frombuffer( - memoryview(np.array([value])).tobytes(), dtype=np.uint8 + memoryview(np.array([value])).tobytes(), dtype=np.uint8 # type: ignore[arg-type] ) return byte_matrix diff --git a/caffe2/python/operator_test/gather_ops_test.py b/caffe2/python/operator_test/gather_ops_test.py index fc23be13fdae7..26f7d02e5d42e 100644 --- a/caffe2/python/operator_test/gather_ops_test.py +++ b/caffe2/python/operator_test/gather_ops_test.py @@ -101,7 +101,7 @@ def test_gather_ops_axis2(self, batch_num, rows_num, index_num, gc, dc): @given(batch_num=st.integers(1, 40), rows_num=st.integers(1, 6), index_num=st.integers(1, 20), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_gather_ops_match_outer(self, batch_num, rows_num, index_num, gc, dc): data = np.random.random((batch_num, rows_num, 5)).astype(np.float32) @@ -123,7 +123,7 @@ def test_gather_ops_match_outer(self, batch_num, rows_num, index_num, gc, dc): @given(batch_num=st.integers(1, 40), rows_num=st.integers(1, 6), index_num=st.integers(1, 20), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_batch_gather_op_match_outer(self, batch_num, rows_num, index_num, gc, dc): data = np.random.random((batch_num, rows_num, 5)).astype(np.float32) @@ -150,7 +150,7 @@ def test_batch_gather_op_match_outer(self, batch_num, rows_num, index_num, gc, d index_num=st.integers(1, 10), index_num2=st.integers(1, 10), axis2_num=st.integers(1, 10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None, max_examples=50) def test_gather_op_match_outer_axis2_data4D_ind4D( self, batch_num, rows_num, axis2_num, index_num, index_num2, gc, dc diff --git a/caffe2/python/operator_test/gather_ranges_op_test.py b/caffe2/python/operator_test/gather_ranges_op_test.py index c0d73af33601e..10e799c435640 100644 --- a/caffe2/python/operator_test/gather_ranges_op_test.py +++ b/caffe2/python/operator_test/gather_ranges_op_test.py @@ -165,7 +165,7 @@ def gather_ranges_to_dense_with_key(data, ranges, key, lengths): class TestGatherRanges(serial.SerializedTestCase): - @given(boarders_and_data=batched_boarders_and_data(), **hu.gcs_cpu_only) + @given(boarders_and_data=batched_boarders_and_data(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_gather_ranges(self, boarders_and_data, gc, dc): boarders, data = boarders_and_data @@ -186,7 +186,7 @@ def boarders_to_range(boarders): reference=gather_ranges, ) - @given(tensor_splits=_tensor_splits(), **hu.gcs_cpu_only) + @given(tensor_splits=_tensor_splits(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_gather_ranges_split(self, tensor_splits, gc, dc): data, ranges, lengths, _ = tensor_splits @@ -203,7 +203,7 @@ def test_gather_ranges_split(self, tensor_splits, gc, dc): reference=gather_ranges_to_dense, ) - @given(tensor_splits=_tensor_splits(), **hu.gcs_cpu_only) + @given(tensor_splits=_tensor_splits(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_gather_ranges_with_key_split(self, tensor_splits, gc, dc): data, ranges, lengths, key = tensor_splits @@ -232,7 +232,7 @@ def test_shape_and_type_inference(self): self.assertEqual(shapes["lengths_output"], [3]) self.assertEqual(types["lengths_output"], core.DataType.INT32) - @given(tensor_splits=_bad_tensor_splits(), **hu.gcs_cpu_only) + @given(tensor_splits=_bad_tensor_splits(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_empty_range_check(self, tensor_splits, gc, dc): data, ranges, lengths, key = tensor_splits diff --git a/caffe2/python/operator_test/histogram_test.py b/caffe2/python/operator_test/histogram_test.py index 874ff18171eec..e74d1e87bafec 100644 --- a/caffe2/python/operator_test/histogram_test.py +++ b/caffe2/python/operator_test/histogram_test.py @@ -8,7 +8,7 @@ class TestHistogram(hu.HypothesisTestCase): - @given(rows=st.integers(1, 1000), cols=st.integers(1, 1000), **hu.gcs_cpu_only) + @given(rows=st.integers(1, 1000), cols=st.integers(1, 1000), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_histogram__device_consistency(self, rows, cols, gc, dc): X = np.random.rand(rows, cols) diff --git a/caffe2/python/operator_test/hsm_test.py b/caffe2/python/operator_test/hsm_test.py index 245bca210ad90..31f97c2800c92 100644 --- a/caffe2/python/operator_test/hsm_test.py +++ b/caffe2/python/operator_test/hsm_test.py @@ -86,11 +86,11 @@ def test_hsm_search(self): scores = workspace.FetchBlob('scores') def simulation_hsm_search(): - names = [] - scores = [] + names = [] # type: ignore[var-annotated] + scores = [] # type: ignore[var-annotated] for line in struct: - s, e = line[0], line[0] + line[1] - score = np.dot(X, w[s:e].transpose()) + b[s:e] + s, e = line[0], line[0] + line[1] # type: ignore[operator] + score = np.dot(X, w[s:e].transpose()) + b[s:e] # type: ignore[misc] score = np.exp(score - np.max(score, axis=1, keepdims=True)) score /= score.sum(axis=1, keepdims=True) score = -np.log(score) @@ -106,11 +106,11 @@ def simulation_hsm_search(): else: score[score - scores[idx] > beam] = np.inf - for i, name in enumerate(line[2]): + for i, name in enumerate(line[2]): # type: ignore[var-annotated, arg-type] scores.append(score[i]) names.append(name) - scores = np.vstack(scores) - return names, scores.transpose() + scores = np.vstack(scores) # type: ignore[assignment] + return names, scores.transpose() # type: ignore[attr-defined] p_names, p_scores = simulation_hsm_search() idx = np.argsort(p_scores, axis=1) @@ -177,7 +177,7 @@ def test_hsm_forward(self): # Test to compare gradient calculated using the gradient operator and the # symmetric derivative calculated using Euler Method # TODO : convert to both cpu and gpu test when ready. - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_hsm_gradient(self, gc, dc): samples = 10 @@ -211,7 +211,7 @@ def test_huffman_tree_hierarchy(self): workspace.GlobalInit(['caffe2']) labelSet = list(range(0, 6)) counts = [1, 2, 3, 4, 5, 6] - labels = sum([[l] * c for (l, c) in zip(labelSet, counts)], []) + labels = sum([[l] * c for (l, c) in zip(labelSet, counts)], []) # type: ignore[var-annotated] Y = np.array(labels).astype(np.int64) workspace.FeedBlob("labels", Y) arg = caffe2_pb2.Argument() diff --git a/caffe2/python/operator_test/image_input_op_test.py b/caffe2/python/operator_test/image_input_op_test.py index 6bed69af9ae08..44805ef21f1ed 100644 --- a/caffe2/python/operator_test/image_input_op_test.py +++ b/caffe2/python/operator_test/image_input_op_test.py @@ -171,12 +171,12 @@ def create_test(output_dir, width, height, default_bound, minsize, crop, means, tensor_protos = caffe2_pb2.TensorProtos() image_tensor = tensor_protos.protos.add() - image_tensor.data_type = 4 # string data + image_tensor.data_type = 4 # string data # type: ignore[assignment, assignment] image_tensor.string_data.append(img_str.getvalue()) img_str.close() label_tensor = tensor_protos.protos.add() - label_tensor.data_type = 2 # int32 data + label_tensor.data_type = 2 # int32 data # type: ignore[assignment, assignment] assert (label_type >= 0 and label_type <= 3) if label_type == 0: label_tensor.int32_data.append(index) @@ -194,24 +194,24 @@ def create_test(output_dir, width, height, default_bound, minsize, crop, means, expected_label = embedding_label elif label_type == 3: weight_tensor = tensor_protos.protos.add() - weight_tensor.data_type = 1 # float weights + weight_tensor.data_type = 1 # float weights # type: ignore[assignment, assignment] binary_labels = np.random.randint(2, size=num_labels) - expected_label = np.zeros(num_labels).astype(np.float32) + expected_label = np.zeros(num_labels).astype(np.float32) # type: ignore[assignment] for idx, val in enumerate(binary_labels.tolist()): - expected_label[idx] = val * idx + expected_label[idx] = val * idx # type: ignore[index] if val == 1: label_tensor.int32_data.append(idx) weight_tensor.float_data.append(idx) if output1: output1_tensor = tensor_protos.protos.add() - output1_tensor.data_type = 1 # float data + output1_tensor.data_type = 1 # float data # type: ignore[assignment, assignment] output1_tensor.float_data.append(output1) output2 = [] if output2_size: output2_tensor = tensor_protos.protos.add() - output2_tensor.data_type = 2 # int32 data + output2_tensor.data_type = 2 # int32 data # type: ignore[assignment, assignment] values = np.random.randint(1024, size=output2_size) for val in values.tolist(): output2.append(val) @@ -222,7 +222,7 @@ def create_test(output_dir, width, height, default_bound, minsize, crop, means, if not do_default_bound: bounding_tensor = tensor_protos.protos.add() - bounding_tensor.data_type = 2 # int32 data + bounding_tensor.data_type = 2 # int32 data # type: ignore[assignment, assignment] bounding_tensor.int32_data.extend(bounding_box) txn.put( diff --git a/caffe2/python/operator_test/index_hash_ops_test.py b/caffe2/python/operator_test/index_hash_ops_test.py index 1eb7ffa206914..b49abd40628ea 100644 --- a/caffe2/python/operator_test/index_hash_ops_test.py +++ b/caffe2/python/operator_test/index_hash_ops_test.py @@ -18,7 +18,7 @@ class TestIndexHashOps(serial.SerializedTestCase): ]).flatmap(lambda dtype: hu.tensor(min_dim=1, max_dim=1, dtype=dtype)), seed=st.integers(min_value=0, max_value=10), modulo=st.integers(min_value=100000, max_value=200000), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_index_hash_ops(self, indices, seed, modulo, gc, dc): @@ -30,7 +30,7 @@ def index_hash(indices): hashed = dtype.type(0xDEADBEEF * seed) indices_bytes = np.array([index], dtype).view(np.int8) for b in indices_bytes: - hashed = dtype.type(hashed * 65537 + b) + hashed = dtype.type(hashed * 65537 + b) # type: ignore[operator] hashed = (modulo + hashed % modulo) % modulo hashed_indices.append(hashed) return [hashed_indices] diff --git a/caffe2/python/operator_test/key_split_ops_test.py b/caffe2/python/operator_test/key_split_ops_test.py index 18fddff58d172..c013d5585cdf6 100644 --- a/caffe2/python/operator_test/key_split_ops_test.py +++ b/caffe2/python/operator_test/key_split_ops_test.py @@ -19,7 +19,7 @@ class TestKeySplitOps(hu.HypothesisTestCase): dtype=np.int64, elements=st.integers(min_value=0, max_value=100) ), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_key_split_op(self, X, gc, dc): categorical_limit = max(X) + 1 @@ -35,7 +35,7 @@ def test_key_split_op(self, X, gc, dc): output_vecs = [ workspace.blobs[output_blobs[i]] for i in range(categorical_limit) ] - expected_output_vecs = [[] for _ in range(categorical_limit)] + expected_output_vecs = [[] for _ in range(categorical_limit)] # type: ignore[var-annotated] for i, x in enumerate(X): expected_output_vecs[x].append(i) for i in range(categorical_limit): diff --git a/caffe2/python/operator_test/learning_rate_adaption_op_test.py b/caffe2/python/operator_test/learning_rate_adaption_op_test.py index 1891171b80d8d..fbbbc399fa3e5 100644 --- a/caffe2/python/operator_test/learning_rate_adaption_op_test.py +++ b/caffe2/python/operator_test/learning_rate_adaption_op_test.py @@ -18,7 +18,7 @@ class TestLearningRateAdaption(serial.SerializedTestCase): allow_nan=False, allow_infinity=False), lr_alpha=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None, max_examples=50) def test_learning_rate_adaption_op_normalization(self, inputs, lr, lr_alpha, gc, dc): @@ -54,7 +54,7 @@ def ref(lr, grad, effgrad): allow_nan=False, allow_infinity=False), lr_alpha=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_learning_rate_adaption_op_without_normalization(self, inputs, lr, lr_alpha, gc, dc): grad, effgrad = inputs diff --git a/caffe2/python/operator_test/learning_rate_op_test.py b/caffe2/python/operator_test/learning_rate_op_test.py index 8d17c0c7ef08e..816c8492775be 100644 --- a/caffe2/python/operator_test/learning_rate_op_test.py +++ b/caffe2/python/operator_test/learning_rate_op_test.py @@ -17,7 +17,7 @@ class TestLearningRate(serial.SerializedTestCase): - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None, max_examples=50) def test_alter_learning_rate_op(self, gc, dc): iter = np.random.randint(low=1, high=1e5, size=1) @@ -46,7 +46,7 @@ def ref(iter): self.assertReferenceChecks(gc, op, [iter], ref) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_hill_learning_rate_op(self, gc, dc): iter = np.random.randint(low=1, high=1e5, size=1) @@ -83,7 +83,7 @@ def ref(iter): ) self.assertReferenceChecks(gc, op, [iter], ref) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_slope_learning_rate_op(self, gc, dc): iter = np.random.randint(low=1, high=1e5, size=1) @@ -118,7 +118,7 @@ def ref(iter): self.assertReferenceChecks(gc, op, [iter], ref) @given( - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10) def test_gate_learningrate(self, gc, dc): diff --git a/caffe2/python/operator_test/length_split_op_test.py b/caffe2/python/operator_test/length_split_op_test.py index 28d7134ac5e8e..42f65ff8fe358 100644 --- a/caffe2/python/operator_test/length_split_op_test.py +++ b/caffe2/python/operator_test/length_split_op_test.py @@ -27,7 +27,7 @@ def _length_split_op_ref(self, input_lengths, n_split_array): output.append(val - 1) return [np.array(output).astype(np.int32)] - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_length_split_edge(self, gc, dc): input_lengths = np.array([3, 4, 5]).astype(np.int32) @@ -52,7 +52,7 @@ def test_length_split_edge(self, gc, dc): # Check over multiple devices self.assertDeviceChecks(dc, op, [input_lengths, n_split_], [0]) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_length_split_arg(self, gc, dc): input_lengths = np.array([9, 4, 5]).astype(np.int32) @@ -75,7 +75,7 @@ def test_length_split_arg(self, gc, dc): # Check over multiple devices self.assertDeviceChecks(dc, op, [input_lengths], [0]) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_length_split_override_arg(self, gc, dc): input_lengths = np.array([9, 4, 5]).astype(np.int32) @@ -101,7 +101,7 @@ def test_length_split_override_arg(self, gc, dc): self.assertDeviceChecks(dc, op, [input_lengths, n_split_used], [0]) @given(m=st.integers(1, 100), n_split=st.integers(1, 20), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_length_split_even_divide(self, m, n_split, gc, dc): # multiples of n_split @@ -127,7 +127,7 @@ def test_length_split_even_divide(self, m, n_split, gc, dc): self.assertDeviceChecks(dc, op, [input_lengths, n_split_], [0]) @given(m=st.integers(1, 100), n_split=st.integers(1, 20), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_length_split_random(self, m, n_split, gc, dc): input_lengths = np.random.randint(100, size=m).astype(np.int32) diff --git a/caffe2/python/operator_test/lengths_reducer_fused_nbit_rowwise_ops_test.py b/caffe2/python/operator_test/lengths_reducer_fused_nbit_rowwise_ops_test.py index 49b0ba7ec22c4..65a6f27821cad 100644 --- a/caffe2/python/operator_test/lengths_reducer_fused_nbit_rowwise_ops_test.py +++ b/caffe2/python/operator_test/lengths_reducer_fused_nbit_rowwise_ops_test.py @@ -33,10 +33,10 @@ def test_sparse_lengths_sum( # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] indices = np.random.randint( low=0, high=len(input_data), size=[num_indices], dtype=np.int64 ) @@ -131,10 +131,10 @@ def test_sparse_lengths_mean( # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] # Use int32 here because int64 is covered by test_sparse_lengths_sum indices = np.random.randint( low=0, high=len(input_data), size=[num_indices], dtype=np.int32 @@ -211,10 +211,10 @@ def test_sparse_lengths_sum_rowwise_sparse( # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] # Use int32 here because int64 is covered by test_sparse_lengths_sum index_type = np.int64 if indices_64bit else np.int32 indices = np.random.randint( @@ -337,10 +337,10 @@ def test_sparse_lengths_mean_rowwise_sparse_with_skipped_pruning( # the number of indices per sample lengths_split = np.clip(num_indices // 2, 1, 10) lengths = ( - np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split + np.ones([num_indices // lengths_split], dtype=np.int32) * lengths_split # type: ignore[list-item] ) # readjust num_indices when lengths_split doesn't divide num_indices - num_indices = num_indices // lengths_split * lengths_split + num_indices = num_indices // lengths_split * lengths_split # type: ignore[assignment] # Use int32 here because int64 is covered by test_sparse_lengths_sum indices = np.random.randint( low=0, high=len(input_data), size=[num_indices], dtype=np.int32 diff --git a/caffe2/python/operator_test/lengths_top_k_ops_test.py b/caffe2/python/operator_test/lengths_top_k_ops_test.py index d2d55c531ec0a..56e72ba11a60d 100644 --- a/caffe2/python/operator_test/lengths_top_k_ops_test.py +++ b/caffe2/python/operator_test/lengths_top_k_ops_test.py @@ -17,10 +17,10 @@ class TestLengthsTopKOps(serial.SerializedTestCase): **hu.gcs_cpu_only) def test_lengths_top_k_op(self, N, K, gc, dc): lens = np.random.randint(low=1, high=2 * K + 1, size=N).astype(np.int32) - X = [] + X = [] # type: ignore[var-annotated] for i in lens: X.extend(x / 100.0 for x in range(0, 6 * i, 6)) - X = np.array(X, dtype=np.float32) + X = np.array(X, dtype=np.float32) # type: ignore[assignment] op = core.CreateOperator("LengthsTopK", ["X", "Y"], ["values", "indices"], k=K) def lengths_top_k(X, lens): @@ -45,7 +45,7 @@ def lengths_top_k(X, lens): @given(N=st.integers(min_value=0, max_value=10), K=st.integers(min_value=1, max_value=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_lengths_top_k_empty_op(self, N, K, gc, dc): lens = np.zeros((N, ), dtype=np.int32) X = np.array([], dtype=np.float32) diff --git a/caffe2/python/operator_test/listwise_l2r_operator_test.py b/caffe2/python/operator_test/listwise_l2r_operator_test.py index c08f1180a920a..5cb3b87708e9b 100644 --- a/caffe2/python/operator_test/listwise_l2r_operator_test.py +++ b/caffe2/python/operator_test/listwise_l2r_operator_test.py @@ -46,7 +46,7 @@ def log_sigm(x): if use_ndcg_as_loss: dcg = sum(g[i] * d[i] for i in range(n)) - loss = (idcg - dcg) / session_weight + loss = (idcg - dcg) / session_weight # type: ignore[assignment] for i in range(n): for j in range(n): if i == j: diff --git a/caffe2/python/operator_test/load_save_test.py b/caffe2/python/operator_test/load_save_test.py index 6ce883003b58d..22b837f187991 100644 --- a/caffe2/python/operator_test/load_save_test.py +++ b/caffe2/python/operator_test/load_save_test.py @@ -45,7 +45,7 @@ def __init__(self, methodName, db_type='minidb'): def load_save(self, src_device_type, src_gpu_id, dst_device_type, dst_gpu_id): workspace.ResetWorkspace() - dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, + dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, # type: ignore[attr-defined] np.int16, np.int32, np.int64, np.uint8, np.uint16] arrays = [np.random.permutation(6).reshape(2, 3).astype(T) for T in dtypes] @@ -130,7 +130,7 @@ def _LoadTest(keep_device, device_type, gpu_id, blobs, loadAll): def saveFile( self, tmp_folder: Path, db_name: str, db_type: str, start_blob_id: int ) -> Tuple[str, List[np.ndarray]]: - dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, + dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, # type: ignore[attr-defined] np.int16, np.int32, np.int64, np.uint8, np.uint16] arrays = [np.random.permutation(6).reshape(2, 3).astype(T) for T in dtypes] @@ -156,7 +156,7 @@ def testLoadSave(self): self.load_save() def testRepeatedArgs(self): - dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, + dtypes = [np.float16, np.float32, np.float64, np.bool, np.int8, # type: ignore[attr-defined] np.int16, np.int32, np.int64, np.uint8, np.uint16] arrays = [np.random.permutation(6).reshape(2, 3).astype(T) for T in dtypes] @@ -666,7 +666,7 @@ def testSaveFloatToBfloat16(self) -> None: options=[ BlobSerializationOptions( blob_name_regex="float1", - float_format=BlobSerializationOptions.FLOAT_BFLOAT16, + float_format=BlobSerializationOptions.FLOAT_BFLOAT16, # type: ignore[arg-type] ), ], ), diff --git a/caffe2/python/operator_test/merge_id_lists_op_test.py b/caffe2/python/operator_test/merge_id_lists_op_test.py index 36b7655575052..e080b63f9efcd 100644 --- a/caffe2/python/operator_test/merge_id_lists_op_test.py +++ b/caffe2/python/operator_test/merge_id_lists_op_test.py @@ -20,7 +20,7 @@ def id_list_batch(draw): inputs = [] for _ in range(num_inputs): size = draw(st.integers(5, 10)) - values = draw(hnp.arrays(values_dtype, size, st.integers(1, 10))) + values = draw(hnp.arrays(values_dtype, size, st.integers(1, 10))) # type: ignore[misc] lengths = draw(hu.lengths(len(values), min_segments=batch_size, max_segments=batch_size)) diff --git a/caffe2/python/operator_test/mkl_packed_fc_op_test.py b/caffe2/python/operator_test/mkl_packed_fc_op_test.py index 2f889d6934448..9f1a8110bfb6e 100644 --- a/caffe2/python/operator_test/mkl_packed_fc_op_test.py +++ b/caffe2/python/operator_test/mkl_packed_fc_op_test.py @@ -18,8 +18,8 @@ class PackedFCTest(hu.HypothesisTestCase): M=st.integers(16, 32), K=st.integers(128, 1024), N=st.integers(128, 1024), - **hu.gcs_cpu_only) - @unittest.skipIf(not core.C.builtin_cpu_supports_avx2(), + **hu.gcs_cpu_only) # type: ignore[arg-type] + @unittest.skipIf(not core.C.builtin_cpu_supports_avx2(), # type: ignore[attr-defined] "Intel MKL sgemm_pack has a known numerical issue with " "non-avx2 machines that will be fixed in a later build.") def test_packed_fc(self, seed, M, K, N, gc, dc): @@ -44,12 +44,12 @@ def ref(X, W, b): ) self.assertReferenceChecks(gc, op, [X, W, b], ref) - @unittest.skipIf(not core.C.builtin_cpu_supports_avx2(), + @unittest.skipIf(not core.C.builtin_cpu_supports_avx2(), # type: ignore[attr-defined] "Intel MKL sgemm_pack has a known numerical issue with " "non-avx2 machines that will be fixed in a later build.") @given(axis=st.integers(min_value=1, max_value=4), num_output=st.integers(min_value=4, max_value=8), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_packed_fc_axis(self, axis, num_output, gc, dc): np.random.seed(1701) X = np.random.randn(1, 2, 3, 2, 1).astype(np.float32) diff --git a/caffe2/python/operator_test/mpi_test.py b/caffe2/python/operator_test/mpi_test.py index fd0b896c9f04d..6faaa86a0133e 100644 --- a/caffe2/python/operator_test/mpi_test.py +++ b/caffe2/python/operator_test/mpi_test.py @@ -42,9 +42,9 @@ class TestMPI(hu.HypothesisTestCase): def test_broadcast(self, X, root, device_option, gc, dc): # Use mpi4py's broadcast to make sure that all nodes inherit the # same hypothesis test. - X = COMM.bcast(X) - root = COMM.bcast(root) - device_option = COMM.bcast(device_option) + X = COMM.bcast(X) # type: ignore[union-attr] + root = COMM.bcast(root) # type: ignore[union-attr] + device_option = COMM.bcast(device_option) # type: ignore[union-attr] X[:] = RANK self.assertTrue( workspace.RunOperatorOnce( @@ -67,9 +67,9 @@ def test_broadcast(self, X, root, device_option, gc, dc): def test_reduce(self, X, root, device_option, gc, dc): # Use mpi4py's broadcast to make sure that all nodes inherit the # same hypothesis test. - X = COMM.bcast(X) - root = COMM.bcast(root) - device_option = COMM.bcast(device_option) + X = COMM.bcast(X) # type: ignore[union-attr] + root = COMM.bcast(root) # type: ignore[union-attr] + device_option = COMM.bcast(device_option) # type: ignore[union-attr] X[:] = RANK self.assertTrue( workspace.RunOperatorOnce( @@ -94,10 +94,10 @@ def test_reduce(self, X, root, device_option, gc, dc): def test_allreduce(self, X, root, device_option, inplace, gc, dc): # Use mpi4py's broadcast to make sure that all nodes inherit the # same hypothesis test. - X = COMM.bcast(X) - root = COMM.bcast(root) - device_option = COMM.bcast(device_option) - inplace = COMM.bcast(inplace) + X = COMM.bcast(X) # type: ignore[union-attr] + root = COMM.bcast(root) # type: ignore[union-attr] + device_option = COMM.bcast(device_option) # type: ignore[union-attr] + inplace = COMM.bcast(inplace) # type: ignore[union-attr] X[:] = RANK self.assertTrue( workspace.RunOperatorOnce( @@ -106,7 +106,7 @@ def test_allreduce(self, X, root, device_option, inplace, gc, dc): device_option=device_option))) # Use mpi4py's broadcast to make sure that all copies have the same # tensor size. - X = COMM.bcast(X) + X = COMM.bcast(X) # type: ignore[union-attr] X[:] = RANK self.assertTrue(workspace.FeedBlob("X", X, device_option)) mpi_op = core.CreateOperator( @@ -129,10 +129,10 @@ def test_sendrecv( gc, dc): # Use mpi4py's broadcast to make sure that all nodes inherit the # same hypothesis test. - X = COMM.bcast(X) - device_option = COMM.bcast(device_option) - specify_send_blob = COMM.bcast(specify_send_blob) - specify_recv_blob = COMM.bcast(specify_recv_blob) + X = COMM.bcast(X) # type: ignore[union-attr] + device_option = COMM.bcast(device_option) # type: ignore[union-attr] + specify_send_blob = COMM.bcast(specify_send_blob) # type: ignore[union-attr] + specify_recv_blob = COMM.bcast(specify_recv_blob) # type: ignore[union-attr] X[:] = RANK self.assertTrue( @@ -190,7 +190,7 @@ def test_sendrecv( tag_blob = workspace.FetchBlob("tag") np.testing.assert_array_equal(tag_blob, tag) # simply wait for the guys to finish - COMM.barrier() + COMM.barrier() # type: ignore[union-attr] workspace.ResetWorkspace() if __name__ == "__main__": diff --git a/caffe2/python/operator_test/ngram_ops_test.py b/caffe2/python/operator_test/ngram_ops_test.py index 3f4e57fa230bf..f19e2d882d932 100644 --- a/caffe2/python/operator_test/ngram_ops_test.py +++ b/caffe2/python/operator_test/ngram_ops_test.py @@ -20,7 +20,7 @@ class TestNGramOps(hu.HypothesisTestCase): out_of_vcb=st.floats(min_value=0, max_value=0.5), max_categorical_limit=st.integers(min_value=5, max_value=20), max_in_vcb_val=st.integers(min_value=1000, max_value=10000), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_ngram_from_categorical_op( self, @@ -58,7 +58,7 @@ def test_ngram_from_categorical_op( val += base * r floats[i][j] = vcb[k][r] expected_output.append(val) - expected_output = np.array(expected_output, dtype=np.int32) + expected_output = np.array(expected_output, dtype=np.int32) # type: ignore[assignment] workspace.ResetWorkspace() workspace.FeedBlob('floats', floats) diff --git a/caffe2/python/operator_test/numpy_tile_op_test.py b/caffe2/python/operator_test/numpy_tile_op_test.py index c32aa99470db4..3b3e8367f5b42 100644 --- a/caffe2/python/operator_test/numpy_tile_op_test.py +++ b/caffe2/python/operator_test/numpy_tile_op_test.py @@ -17,7 +17,7 @@ class TestNumpyTile(serial.SerializedTestCase): @given(ndim=st.integers(min_value=1, max_value=4), seed=st.integers(min_value=0, max_value=65536), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_numpy_tile(self, ndim, seed, gc, dc): np.random.seed(seed) @@ -40,7 +40,7 @@ def tile_ref(input, repeats): @given(ndim=st.integers(min_value=1, max_value=4), seed=st.integers(min_value=0, max_value=65536), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_numpy_tile_zero_dim(self, ndim, seed, gc, dc): np.random.seed(seed) diff --git a/caffe2/python/operator_test/one_hot_ops_test.py b/caffe2/python/operator_test/one_hot_ops_test.py index 593d5b5aa58c1..ad645be91c480 100644 --- a/caffe2/python/operator_test/one_hot_ops_test.py +++ b/caffe2/python/operator_test/one_hot_ops_test.py @@ -40,8 +40,8 @@ def test_batch_one_hot(self, x, gc, dc): val = np.unique(x[:, i]) vals.extend(val) lens.append(len(val)) - lens = np.array(lens, dtype=np.int32) - vals = np.array(vals, dtype=np.int32) + lens = np.array(lens, dtype=np.int32) # type: ignore[assignment] + vals = np.array(vals, dtype=np.int32) # type: ignore[assignment] def ref(x, lens, vals): output_dim = vals.size @@ -62,7 +62,7 @@ def ref(x, lens, vals): min_dim=2, max_dim=2, dtype=np.float32, elements=st.integers(min_value=-5, max_value=5)), seed=st.integers(min_value=0, max_value=1000), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_batch_bucketized_one_hot(self, x, seed, gc, dc): np.random.seed(seed) @@ -80,7 +80,7 @@ def test_batch_bucketized_one_hot(self, x, seed, gc, dc): boundaries += cur_boundary.tolist() lens = np.array(lens, dtype=np.int32) - boundaries = np.array(boundaries, dtype=np.float32) + boundaries = np.array(boundaries, dtype=np.float32) # type: ignore[assignment] def ref(x, lens, boundaries): output_dim = lens.size + boundaries.size @@ -127,7 +127,7 @@ def one_hot_ref(hot_indices, size): size = np.array(max(hot_indices) + end_padding + 1, dtype=np.int64) if size == 0: - size = 1 + size = 1 # type: ignore[assignment] op = core.CreateOperator('OneHot', ['hot_indices', 'size'], ['output']) self.assertReferenceChecks( gc, @@ -168,7 +168,7 @@ def segment_one_hot_ref(lengths, hot_indices, size): min_dim=2, max_dim=2, dtype=np.float32, elements=st.integers(min_value=-5, max_value=5)), seed=st.integers(min_value=0, max_value=1000), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_batch_bucket_one_hot_shape_inference(self, x, seed, gc, dc): np.random.seed(seed) d = x.shape[1] @@ -185,7 +185,7 @@ def test_batch_bucket_one_hot_shape_inference(self, x, seed, gc, dc): boundaries += cur_boundary.tolist() lens = np.array(lens, dtype=np.int32) - boundaries = np.array(boundaries, dtype=np.float32) + boundaries = np.array(boundaries, dtype=np.float32) # type: ignore[assignment] workspace.FeedBlob('lens', lens) workspace.FeedBlob('boundaries', boundaries) @@ -198,7 +198,7 @@ def test_batch_bucket_one_hot_shape_inference(self, x, seed, gc, dc): self.assertEqual(shapes[result], list(workspace.blobs[result].shape)) self.assertEqual( - shapes[result], [x.shape[0], lens.shape[0] + boundaries.shape[0]]) + shapes[result], [x.shape[0], lens.shape[0] + boundaries.shape[0]]) # type: ignore[attr-defined] self.assertEqual(types[result], core.DataType.FLOAT) diff --git a/caffe2/python/operator_test/onnx_while_test.py b/caffe2/python/operator_test/onnx_while_test.py index 5ad9c277239d1..5e4bed7ba331b 100644 --- a/caffe2/python/operator_test/onnx_while_test.py +++ b/caffe2/python/operator_test/onnx_while_test.py @@ -19,7 +19,7 @@ class TestONNXWhile(serial.SerializedTestCase): save_scopes=st.booleans(), disable_scopes=st.booleans(), seed=st.integers(0, 65535), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_onnx_while_fibb( self, condition, max_trip_count, save_scopes, disable_scopes, seed, gc, dc): @@ -68,7 +68,7 @@ def test_onnx_while_fibb( disable_scopes=disable_scopes, ) - condition_arr = np.array(condition).astype(np.bool) + condition_arr = np.array(condition).astype(np.bool) # type: ignore[attr-defined] max_trip_count_arr = np.array(max_trip_count).astype(np.int64) first_init = np.array([1]).astype(np.float32) second_init = np.array([1]).astype(np.float32) diff --git a/caffe2/python/operator_test/pack_ops_test.py b/caffe2/python/operator_test/pack_ops_test.py index 698fbb76df88b..e62667f2e0bce 100644 --- a/caffe2/python/operator_test/pack_ops_test.py +++ b/caffe2/python/operator_test/pack_ops_test.py @@ -20,7 +20,7 @@ def pack_segments_ref(lengths, data, max_length=max_length): arr = [] constant_values = 0 if data.dtype.char == 'S': - constant_values = '' + constant_values = '' # type: ignore[assignment] if max_length is None: max_length = np.max(lengths) start = 0 @@ -47,7 +47,7 @@ def pack_segments_ref(lengths, data, max_length=max_length): pad_length = max_length - length presence_arr.append( np.pad( - np.ones((length), dtype=np.bool), ((0, pad_length)), + np.ones((length), dtype=np.bool), ((0, pad_length)), # type: ignore[attr-defined] mode=str("constant") ) ) @@ -182,7 +182,7 @@ def test_pack_ops(self, num_seq, cell_size, gc, dc): assert((workspace.FetchBlob('newd') == workspace.FetchBlob('d')).all()) @given( - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_pack_ops_str(self, gc, dc): # GPU does not support string. Test CPU implementation only. @@ -305,7 +305,7 @@ def test_presence_mask(self, gc, dc): presence_mask = workspace.FetchBlob('p') expected_presence_mask = np.array( [[True, False, False], [True, True, False], [True, True, True]], - dtype=np.bool + dtype=np.bool # type: ignore[attr-defined] ) self.assertEqual(presence_mask.shape, expected_presence_mask.shape) np.testing.assert_array_equal(presence_mask, expected_presence_mask) @@ -325,7 +325,7 @@ def test_presence_mask_empty(self): expected_output_shape = (0, 0) self.assertEquals(output.shape, expected_output_shape) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_out_of_bounds(self, gc, dc): # Copy pasted from test_pack_ops but with 3 changed to 4 @@ -348,7 +348,7 @@ def test_out_of_bounds(self, gc, dc): exception=RuntimeError ) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_under_bounds(self, gc, dc): # Copy pasted from test_pack_ops but with 3 changed to 2 diff --git a/caffe2/python/operator_test/pooling_test.py b/caffe2/python/operator_test/pooling_test.py index 7ef98249bd793..47119ea529c95 100644 --- a/caffe2/python/operator_test/pooling_test.py +++ b/caffe2/python/operator_test/pooling_test.py @@ -64,7 +64,7 @@ def test_pooling_separate_stride_pad(self, stride_h, stride_w, @unittest.skipIf(not os.getenv('CAFFE2_DEBUG'), "This is a test that reproduces a cudnn error. If you " "want to run it, set env variable CAFFE2_DEBUG=1.") - @given(**hu.gcs_cuda_only) + @given(**hu.gcs_cuda_only) # type: ignore[arg-type] def test_pooling_big_batch(self, gc, dc): op = core.CreateOperator( "AveragePool", @@ -195,7 +195,7 @@ def test_global_pooling_3d(self, kernel, size, input_channels, size=st.integers(7, 9), input_channels=st.integers(1, 3), batch_size=st.integers(0, 3), - **hu.gcs_gpu_only) + **hu.gcs_gpu_only) # type: ignore[arg-type] def test_pooling_with_index(self, stride, pad, kernel, size, input_channels, batch_size, gc, dc): assume(pad < kernel) diff --git a/caffe2/python/operator_test/rand_quantization_op_speed_test.py b/caffe2/python/operator_test/rand_quantization_op_speed_test.py index 1c56faff645f3..17bf6b513b3ca 100644 --- a/caffe2/python/operator_test/rand_quantization_op_speed_test.py +++ b/caffe2/python/operator_test/rand_quantization_op_speed_test.py @@ -72,17 +72,17 @@ def test_speed_of_rand_quantization(self, bitwidth_, random_, data_shape_, gc, d start = time.time() workspace.RunNet(sub_scale_sum_net) end = time.time() - sub_scale_sum_time += end - start + sub_scale_sum_time += end - start # type: ignore[assignment] start = time.time() workspace.RunNet(enc_net) end = time.time() - enc_time += end - start + enc_time += end - start # type: ignore[assignment] start = time.time() workspace.RunNet(dec_net) end = time.time() - dec_time += end - start + dec_time += end - start # type: ignore[assignment] print("Sub+Scale+Sum time: {} ms".format(sub_scale_sum_time / times * 1000)) print( diff --git a/caffe2/python/operator_test/rank_loss_operator_test.py b/caffe2/python/operator_test/rank_loss_operator_test.py index 2d52da2931273..188b6da3c7bf4 100644 --- a/caffe2/python/operator_test/rank_loss_operator_test.py +++ b/caffe2/python/operator_test/rank_loss_operator_test.py @@ -17,7 +17,7 @@ class TestPairWiseLossOps(serial.SerializedTestCase): label=hu.arrays(dims=[2, 1], elements=st.integers(min_value=0, max_value=1), dtype=np.float32), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_pair_wise_loss_predictions(self, X, label, gc, dc): workspace.FeedBlob('X', X) workspace.FeedBlob('label', label) @@ -54,7 +54,7 @@ def test_pair_wise_loss_predictions(self, X, label, gc, dc): dtype=np.float32), dY=hu.arrays(dims=[1], elements=hu.floats(min_value=1, max_value=10)), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_pair_wise_loss_gradient(self, X, label, dY, gc, dc): workspace.FeedBlob('X', X) workspace.FeedBlob('dY', dY) diff --git a/caffe2/python/operator_test/recurrent_network_test.py b/caffe2/python/operator_test/recurrent_network_test.py index 33ada4d6881c8..81a8bb3b093c6 100644 --- a/caffe2/python/operator_test/recurrent_network_test.py +++ b/caffe2/python/operator_test/recurrent_network_test.py @@ -141,7 +141,7 @@ def reference(input, initial_input): workspace.blobs[output_t_prev] = result_t res_all[t_cur] = result_t - workspace.SwitchWorkspace(global_ws_name) + workspace.SwitchWorkspace(global_ws_name) # type: ignore[call-overload] shape = list(input.shape) shape[0] = 1 diff --git a/caffe2/python/operator_test/reduce_ops_test.py b/caffe2/python/operator_test/reduce_ops_test.py index 7b79b3b81aed1..fe8b5dd2a4b1b 100644 --- a/caffe2/python/operator_test/reduce_ops_test.py +++ b/caffe2/python/operator_test/reduce_ops_test.py @@ -95,7 +95,7 @@ def test_reduce_mean(self, X, keepdims, num_axes, gc, dc): "ReduceMean", X, keepdims, num_axes, np.mean, gc, dc) @given(n=st.integers(1, 3), m=st.integers(1, 3), k=st.integers(1, 3), - keepdims=st.booleans(), num_axes=st.integers(1, 3), **hu.gcs_cpu_only) + keepdims=st.booleans(), num_axes=st.integers(1, 3), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_reduce_l1(self, n, m, k, keepdims, num_axes, gc, dc): X = np.arange(n * m * k, dtype=np.float32) - 0.5 diff --git a/caffe2/python/operator_test/resize_op_test.py b/caffe2/python/operator_test/resize_op_test.py index cd90656f607dc..75dbd7a2b22b4 100644 --- a/caffe2/python/operator_test/resize_op_test.py +++ b/caffe2/python/operator_test/resize_op_test.py @@ -116,8 +116,8 @@ def test_nearest_grad(self, height_scale, width_scale, height, width, def ref(dY, X): dX = np.zeros_like(X) - for i in range(output_height): - for j in range(output_width): + for i in range(output_height): # type: ignore[call-overload] + for j in range(output_width): # type: ignore[call-overload] input_i = np.minimum(i / height_scale, height - 1).astype(np.int32) input_j = np.minimum(j / width_scale, width - 1).astype(np.int32) if order == "NCHW": @@ -233,8 +233,8 @@ def test_nearest_onnx_grad(self, height_scale, width_scale, height, width, def ref(dY, X, scales): dX = np.zeros_like(X) - for i in range(output_height): - for j in range(output_width): + for i in range(output_height): # type: ignore[call-overload] + for j in range(output_width): # type: ignore[call-overload] input_i = np.minimum(i / scales[0], height - 1).astype(np.int32) input_j = np.minimum(j / scales[1], width - 1).astype(np.int32) diff --git a/caffe2/python/operator_test/rmac_regions_op_test.py b/caffe2/python/operator_test/rmac_regions_op_test.py index 084d7402df5f3..339ca8689da5b 100644 --- a/caffe2/python/operator_test/rmac_regions_op_test.py +++ b/caffe2/python/operator_test/rmac_regions_op_test.py @@ -39,9 +39,9 @@ def ref_op(X): Wd = 0 Hd = 0 if H < W: - Wd = idx + Wd = idx # type: ignore[assignment] elif H > W: - Hd = idx + Hd = idx # type: ignore[assignment] regions_xywh = [] for l in range(1, scales + 1): diff --git a/caffe2/python/operator_test/rnn_cell_test.py b/caffe2/python/operator_test/rnn_cell_test.py index 8fe037ccb70c1..db22b188612d1 100644 --- a/caffe2/python/operator_test/rnn_cell_test.py +++ b/caffe2/python/operator_test/rnn_cell_test.py @@ -837,7 +837,7 @@ def generate_input_state(shape): if final_dropout: # dropout ratio of 0.0 used to test mechanism but not interfere # with numerical tests - attention_cell = rnn_cell.DropoutCell( + attention_cell = rnn_cell.DropoutCell( # type: ignore[assignment] internal_cell=attention_cell, dropout_ratio=0.0, name='dropout', @@ -846,7 +846,7 @@ def generate_input_state(shape): ) attention_cell = ( - attention_cell if T is None + attention_cell if T is None # type: ignore[assignment] else rnn_cell.UnrolledCell(attention_cell, T) ) @@ -898,7 +898,7 @@ def prepare_mul_rnn(model, input_blob, shape, T, outputs_with_grad, num_layers): cells = [MulCell(name="layer_{}".format(i)) for i in range(num_layers)] cell = rnn_cell.MultiRNNCell(name="multi_mul_rnn", cells=cells) if T is not None: - cell = rnn_cell.UnrolledCell(cell, T=T) + cell = rnn_cell.UnrolledCell(cell, T=T) # type: ignore[assignment] states = [ model.param_init_net.ConstantFill( [], "initial_state_{}".format(i), value=1.0, shape=[1, n, d]) @@ -961,7 +961,7 @@ def test_unroll_mul(self, input_tensor, num_layers, outputs_with_grad): def test_unroll_lstm(self, input_tensor, dim_out, outputs_with_grads, **kwargs): lstms = [ - _prepare_rnn( + _prepare_rnn( # type: ignore[misc] *input_tensor.shape, create_rnn=rnn_cell.LSTM, outputs_with_grads=outputs_with_grads, @@ -1064,7 +1064,7 @@ def test_unroll_attention(self, input_tensor, encoder_length, def test_layered_lstm(self, input_tensor, **kwargs): for outputs_with_grads in [[0], [1], [0, 1, 2, 3]]: for memory_optim in [False, True]: - _, net, inputs = _prepare_rnn( + _, net, inputs = _prepare_rnn( # type: ignore[misc] *input_tensor.shape, create_rnn=rnn_cell.LSTM, outputs_with_grads=outputs_with_grads, diff --git a/caffe2/python/operator_test/segment_ops_test.py b/caffe2/python/operator_test/segment_ops_test.py index f991a7dde2112..e1a9aae5acf84 100644 --- a/caffe2/python/operator_test/segment_ops_test.py +++ b/caffe2/python/operator_test/segment_ops_test.py @@ -39,7 +39,7 @@ def sparse_lengths_mean_ref(D, I, L): class TesterBase: def segment_reduce_op(self, data, segment_ids, reducer, indices=None): - segments = self.split(data, segment_ids, indices) + segments = self.split(data, segment_ids, indices) # type: ignore[attr-defined] output = np.zeros((len(segments), ) + data.shape[1:]) for i, segment in enumerate(segments): if len(segment) > 0: @@ -57,12 +57,12 @@ def segment_reduce_grad_op( output, indices=None ): - segments = self.split(data, segment_ids, indices) + segments = self.split(data, segment_ids, indices) # type: ignore[attr-defined] segment_grads = [ reducer_grad(grad_out[i], [output[i]], [segment]) for i, segment in enumerate(segments) ] - return self.unsplit(data.shape[1:], segment_grads, segment_ids) + return self.unsplit(data.shape[1:], segment_grads, segment_ids) # type: ignore[attr-defined] def _test(self, prefix, input_strategy, refs, gpu=False, **kwargs): tester = self @@ -113,7 +113,7 @@ def seg_reduce_grad(grad_out, outputs, inputs): kwargs = {} if grad_check: kwargs['output_to_grad'] = 'output' - kwargs['grad_reference'] = seg_reduce_grad + kwargs['grad_reference'] = seg_reduce_grad # type: ignore[assignment] self.assertReferenceChecks( device_option=gc, op=op, @@ -382,7 +382,7 @@ def test_lengths_ops(self): max_value=5, allow_empty=True ), - REFERENCES_ALL + REFERENCES_LENGTHS_ONLY, + REFERENCES_ALL + REFERENCES_LENGTHS_ONLY, # type: ignore[operator] )(self) def test_sparse_lengths_ops(self): @@ -629,7 +629,7 @@ def test_sparse_lengths_indices_in_gradient_mean_gpu(self, gc, dc): ) self.assertDeviceChecks(dc, op, [X, Y, Z], [0]) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_legacy_sparse_and_lengths_sum_gradient(self, gc, dc): X = np.random.rand(3, 64).astype(np.float32) Y = np.asarray([20, 20, 10]).astype(np.int32) diff --git a/caffe2/python/operator_test/self_binning_histogram_test.py b/caffe2/python/operator_test/self_binning_histogram_test.py index afcf5ea57e3e7..7a2d26bbc1322 100644 --- a/caffe2/python/operator_test/self_binning_histogram_test.py +++ b/caffe2/python/operator_test/self_binning_histogram_test.py @@ -17,9 +17,9 @@ def _check_histogram(self, arrays, num_bins, expected_values=None, expected_coun # Check that sizes match and counts add up. values = workspace.FetchBlob("histogram_values") counts = workspace.FetchBlob("histogram_counts") - self.assertTrue(np.size(values) == num_bins) - self.assertTrue(np.size(counts) == num_bins) - self.assertTrue(np.sum(counts) == sum([np.size(array) for array in arrays])) + self.assertTrue(np.size(values) == num_bins) # type: ignore[attr-defined] + self.assertTrue(np.size(counts) == num_bins) # type: ignore[attr-defined] + self.assertTrue(np.sum(counts) == sum([np.size(array) for array in arrays])) # type: ignore[attr-defined] # Check counts if expected_counts is None: @@ -33,27 +33,27 @@ def _check_histogram(self, arrays, num_bins, expected_values=None, expected_coun if values[pos] > input_val: found = True break - self.assertTrue(found, f"input value must fit inside values array: " + self.assertTrue(found, f"input value must fit inside values array: " # type: ignore[attr-defined] f"input={input_val}, last_value={values[-1]}") if self.bin_spacing == "linear": - self.assertTrue(pos > 0, + self.assertTrue(pos > 0, # type: ignore[attr-defined] f"input should not be smaller than the first bin value: " f"input={input_val}, 1st bin value={values[pos]}") if pos == 0: - self.assertEqual(self.bin_spacing, "logarithmic") + self.assertEqual(self.bin_spacing, "logarithmic") # type: ignore[attr-defined] expected_counts[pos] += 1 else: expected_counts[pos - 1] += 1 - self.assertTrue(np.array_equal(expected_counts, counts), f"expected:{expected_counts}\ncounts:{counts}") + self.assertTrue(np.array_equal(expected_counts, counts), f"expected:{expected_counts}\ncounts:{counts}") # type: ignore[attr-defined] # Check values if expected_values is not None: - self.assertTrue(np.allclose(expected_values, values, rtol=1e-02, atol=1e-05), + self.assertTrue(np.allclose(expected_values, values, rtol=1e-02, atol=1e-05), # type: ignore[attr-defined] f"expected:{expected_values}\nvalues:{values}") # Ideally, the output values are sorted in a non-decreasing order. for idx in range(len(values) - 1): - self.assertTrue(values[idx] <= values[idx + 1]) + self.assertTrue(values[idx] <= values[idx + 1]) # type: ignore[attr-defined] if self.abs: - self.assertTrue(values[0] >= 0) + self.assertTrue(values[0] >= 0) # type: ignore[attr-defined] def _run_single_op_net(self, arrays, num_bins, logspacing_start=None): @@ -81,7 +81,7 @@ def _run_single_op_net(self, arrays, num_bins, logspacing_start=None): ) workspace.RunNetOnce(net) - @given(rows=st.integers(1, 1000), cols=st.integers(1, 1000), **hu.gcs_cpu_only) + @given(rows=st.integers(1, 1000), cols=st.integers(1, 1000), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_histogram_device_consistency(self, rows, cols, gc, dc): X = np.random.rand(rows, cols) @@ -92,7 +92,7 @@ def test_histogram_device_consistency(self, rows, cols, gc, dc): num_bins=1000, bin_spacing=self.bin_spacing, ) - self.assertDeviceChecks(dc, op, [X], [0]) + self.assertDeviceChecks(dc, op, [X], [0]) # type: ignore[attr-defined] def test_histogram_bin_to_fewer(self): X = np.array([-2.0, -2.0, 0.0, 0.0, 0.0, 1.0, 2.0, 3.0, 4.0, 6.0, 9.0], dtype=self.dtype) @@ -147,7 +147,7 @@ def test_histogram_bin_to_two(self): def test_histogram_min_max_equal(self): """This test uses exact value match, so is only relevant for float type.""" X = np.array([0., 0., 0., 0., 0.], dtype='f') - logspacing_start = np.float(1e-24) + logspacing_start = np.float(1e-24) # type: ignore[attr-defined] self._run_single_op_net([X], 3, logspacing_start) if self.bin_spacing == "linear": self._check_histogram( @@ -157,7 +157,7 @@ def test_histogram_min_max_equal(self): expected_counts=[5, 0, 0, 0] ) else: - self.assertEqual(self.bin_spacing, "logarithmic") + self.assertEqual(self.bin_spacing, "logarithmic") # type: ignore[attr-defined] self._check_histogram( [X], 4, @@ -238,7 +238,7 @@ def test_histogram_very_small_range_for_stride_underflow(self): def test_histogram_insufficient_bins(self): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Number of bins must be greater than or equal to 1." ): self._run_single_op_net([np.random.rand(111)], 0) diff --git a/caffe2/python/operator_test/sequence_ops_test.py b/caffe2/python/operator_test/sequence_ops_test.py index 65c0669abfb00..52348f16c3a04 100644 --- a/caffe2/python/operator_test/sequence_ops_test.py +++ b/caffe2/python/operator_test/sequence_ops_test.py @@ -252,7 +252,7 @@ def op_grad_ref(grad_out, outputs, inputs): indices=st.lists(st.integers(min_value=0, max_value=9), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_remove_data_blocks(self, data, indices, gc, dc): indices = np.array(indices) @@ -277,7 +277,7 @@ def op_ref(data, indices): @given(elements=st.lists(st.integers(min_value=0, max_value=9), min_size=0, max_size=10), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_find_duplicate_elements(self, elements, gc, dc): mapping = { diff --git a/caffe2/python/operator_test/shape_inference_test.py b/caffe2/python/operator_test/shape_inference_test.py index 702effc226d63..5693db0b20dbc 100644 --- a/caffe2/python/operator_test/shape_inference_test.py +++ b/caffe2/python/operator_test/shape_inference_test.py @@ -474,7 +474,7 @@ def testCast(self): model = model_helper.ModelHelper(name="test_model") types = [ - ('bool', np.bool, caffe2_pb2.TensorProto.BOOL), + ('bool', np.bool, caffe2_pb2.TensorProto.BOOL), # type: ignore[attr-defined] #('byte', None, caffe2_pb2.TensorProto.BYTE), ('int8', np.int8, caffe2_pb2.TensorProto.INT8), ('uint8', np.uint8, caffe2_pb2.TensorProto.UINT8), @@ -636,9 +636,9 @@ def InferTensorRunAndCompare(self, model, expected_uninferred_blobs=None): elif arr.dtype == np.dtype('float64'): correct_types[b] = caffe2_pb2.TensorProto.DOUBLE else: - correct_types[b] = "unknown {}".format(arr.dtype) + correct_types[b] = "unknown {}".format(arr.dtype) # type: ignore[assignment] else: - correct_types[b] = str(type(arr)) + correct_types[b] = str(type(arr)) # type: ignore[assignment] if expected_uninferred_blobs is None: expected_uninferred_blobs = [] diff --git a/caffe2/python/operator_test/sinusoid_position_encoding_op_test.py b/caffe2/python/operator_test/sinusoid_position_encoding_op_test.py index 6e8cae62dbff2..a2349385cc0e4 100644 --- a/caffe2/python/operator_test/sinusoid_position_encoding_op_test.py +++ b/caffe2/python/operator_test/sinusoid_position_encoding_op_test.py @@ -31,7 +31,7 @@ class TestSinusoidPositionEncodingOp(serial.SerializedTestCase): batch_size=st.integers(1, MAX_TEST_BATCH_SIZE), alpha=st.floats(MIN_TEST_ALPHA, MAX_TEST_ALPHA), amplitude=st.floats(MIN_TEST_AMPLITUDE, MAX_TEST_AMPLITUDE), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=1000) def test_sinusoid_embedding( diff --git a/caffe2/python/operator_test/softmax_ops_test.py b/caffe2/python/operator_test/softmax_ops_test.py index 3ae26de6b5137..e0398db88c6fe 100644 --- a/caffe2/python/operator_test/softmax_ops_test.py +++ b/caffe2/python/operator_test/softmax_ops_test.py @@ -257,7 +257,7 @@ def label_softmax_crossent(X, label): gc, op, [X, label], 0, [1], stepsize=1e-4, threshold=1e-2) @unittest.skipIf(not workspace.has_gpu_support, "No gpu support") - @given(**hu.gcs_gpu_only) + @given(**hu.gcs_gpu_only) # type: ignore[arg-type] def test_softmax_with_loss_large(self, gc, dc): np.random.seed(2603) for n in [32]: diff --git a/caffe2/python/operator_test/sparse_dropout_with_replacement_op_test.py b/caffe2/python/operator_test/sparse_dropout_with_replacement_op_test.py index 2ba21bb6d44fc..0379dfa089f3a 100644 --- a/caffe2/python/operator_test/sparse_dropout_with_replacement_op_test.py +++ b/caffe2/python/operator_test/sparse_dropout_with_replacement_op_test.py @@ -10,7 +10,7 @@ class SparseDropoutWithReplacementTest(hu.HypothesisTestCase): - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_no_dropout(self, gc, dc): X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.int64) Lengths = np.array([2, 2, 2, 2, 2]).astype(np.int32) @@ -28,7 +28,7 @@ def test_no_dropout(self, gc, dc): self.assertListEqual(Lengths.tolist(), OutputLengths.tolist(), "Lengths should stay unchanged.") - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_all_dropout(self, gc, dc): X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.int64) Lengths = np.array([2, 2, 2, 2, 2]).astype(np.int32) @@ -48,7 +48,7 @@ def test_all_dropout(self, gc, dc): self.assertEqual(length, 1) self.assertEqual(sum(lengths), len(y)) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_all_dropout_empty_input(self, gc, dc): X = np.array([]).astype(np.int64) Lengths = np.array([0]).astype(np.int32) diff --git a/caffe2/python/operator_test/sparse_gradient_checker_test.py b/caffe2/python/operator_test/sparse_gradient_checker_test.py index f1f85b1f9bec0..3248740608ffb 100644 --- a/caffe2/python/operator_test/sparse_gradient_checker_test.py +++ b/caffe2/python/operator_test/sparse_gradient_checker_test.py @@ -18,7 +18,7 @@ class TestSparseGradient(hu.HypothesisTestCase): N=st.integers(min_value=5, max_value=20), K=st.integers(min_value=5, max_value=15), sparsity=st.floats(min_value=0.1, max_value=1.0), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_sparse_gradient(self, M, N, K, sparsity, gc, dc): X = np.random.randn(M, K).astype(np.float32) diff --git a/caffe2/python/operator_test/sparse_lp_regularizer_test.py b/caffe2/python/operator_test/sparse_lp_regularizer_test.py index 7ea32bd69a29f..43f1bdd719221 100644 --- a/caffe2/python/operator_test/sparse_lp_regularizer_test.py +++ b/caffe2/python/operator_test/sparse_lp_regularizer_test.py @@ -33,7 +33,7 @@ def ref_lpnorm(param_in, p, reg_lambda): p=st.integers(min_value=1, max_value=2), reg_lambda=st.floats(min_value=1e-4, max_value=1e-1), data_strategy=st.data(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_sparse_lpnorm(self, inputs, p, reg_lambda, data_strategy, gc, dc): param, = inputs diff --git a/caffe2/python/operator_test/sparse_normalize_test.py b/caffe2/python/operator_test/sparse_normalize_test.py index 30beda3e464c3..32299adffef6c 100644 --- a/caffe2/python/operator_test/sparse_normalize_test.py +++ b/caffe2/python/operator_test/sparse_normalize_test.py @@ -23,7 +23,7 @@ def ref_normalize(param_in, use_max_norm, norm): norm=st.floats(min_value=1.0, max_value=4.0), data_strategy=st.data(), use_fp16=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_sparse_normalize( self, inputs, use_max_norm, norm, data_strategy, use_fp16, gc, dc diff --git a/caffe2/python/operator_test/sparse_to_dense_mask_op_test.py b/caffe2/python/operator_test/sparse_to_dense_mask_op_test.py index 41ec8808bb6ac..3d3a95d1b5a1f 100644 --- a/caffe2/python/operator_test/sparse_to_dense_mask_op_test.py +++ b/caffe2/python/operator_test/sparse_to_dense_mask_op_test.py @@ -13,7 +13,7 @@ class TestFcOperator(hu.HypothesisTestCase): @given(n=st.integers(1, 10), k=st.integers(1, 5), - use_length=st.booleans(), **hu.gcs_cpu_only) + use_length=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_sparse_to_dense_mask(self, n, k, use_length, gc, dc): lengths = np.random.randint(k, size=n).astype(np.int32) + 1 @@ -46,7 +46,7 @@ def test_sparse_to_dense_mask(self, n, k, use_length, gc, dc): gc, op, input_data, 1, [0]) @given(n=st.integers(1, 10), k=st.integers(1, 5), - use_length=st.booleans(), **hu.gcs_cpu_only) + use_length=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_sparse_to_dense_mask_with_int64(self, n, k, use_length, gc, dc): lengths = np.random.randint(k, size=n).astype(np.int32) + 1 @@ -80,7 +80,7 @@ def test_sparse_to_dense_mask_with_int64(self, n, k, use_length, gc, dc): gc, op, input_data, 1, [0]) @given(n=st.integers(1, 10), k=st.integers(1, 5), - dim=st.integers(1, 3), **hu.gcs_cpu_only) + dim=st.integers(1, 3), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_sparse_to_dense_mask_high_dim(self, n, k, dim, gc, dc): lengths = np.random.randint(k, size=n).astype(np.int32) + 1 diff --git a/caffe2/python/operator_test/spatial_bn_op_test.py b/caffe2/python/operator_test/spatial_bn_op_test.py index 88a0ebbd066c8..7cdb077834e56 100644 --- a/caffe2/python/operator_test/spatial_bn_op_test.py +++ b/caffe2/python/operator_test/spatial_bn_op_test.py @@ -213,8 +213,8 @@ def batch_norm_ref(X, scale, bias, running_mean, running_var): C = X.shape[1] reduce_size = batch_size * size * size - saved_mean = np.mean(X, (0, 2, 3)) - saved_var = np.var(X, (0, 2, 3)) + saved_mean = np.mean(X, (0, 2, 3)) # type: ignore[assignment] + saved_var = np.var(X, (0, 2, 3)) # type: ignore[assignment] if reduce_size == 1: unbias_scale = float('inf') else: diff --git a/caffe2/python/operator_test/specialized_segment_ops_test.py b/caffe2/python/operator_test/specialized_segment_ops_test.py index 4f1842ac4664f..61ccd97943bf0 100644 --- a/caffe2/python/operator_test/specialized_segment_ops_test.py +++ b/caffe2/python/operator_test/specialized_segment_ops_test.py @@ -169,7 +169,7 @@ def sparse_lengths_weightedsum_ref(Tbl, Weights, Indices, Lengths): blocksize=st.sampled_from([8, 16, 17, 26, 32, 64, 85, 96, 128, 148, 163]), normalize_by_lengths=st.booleans(), empty_indices=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_sparse_lengths_weightedsum_8BitsRowwiseOp_cpu( self, batchsize, blocksize, normalize_by_lengths, empty_indices, gc, dc @@ -236,7 +236,7 @@ def sparse_lengths_weightedsum_8BitsRowwiseOp_cpu_ref( blocksize=st.sampled_from([8, 16, 17, 26, 32, 64, 85, 96, 128, 148, 163]), normalize_by_lengths=st.booleans(), empty_indices=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_sparse_lengths_sum_8BitsRowwiseOp_cpu( self, batchsize, blocksize, normalize_by_lengths, empty_indices, gc, dc @@ -294,7 +294,7 @@ def sparse_lengths_sum_8BitsRowwiseOp_cpu_reg( batchsize=st.integers(1, 20), blocksize=st.sampled_from([8, 16, 17, 26, 32, 64, 85, 96, 128, 148, 163]), normalize_by_lengths=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_sparse_lengths_sum_8BitsRowwiseOp_cpu_invalid_index( diff --git a/caffe2/python/operator_test/stats_put_ops_test.py b/caffe2/python/operator_test/stats_put_ops_test.py index 12a9e6826fd1b..dc7199f32853d 100644 --- a/caffe2/python/operator_test/stats_put_ops_test.py +++ b/caffe2/python/operator_test/stats_put_ops_test.py @@ -16,7 +16,7 @@ def test_default_value(self): count_postfix = "/stat_value/count".encode("ascii") default_value = 16.0 - workspace.FeedBlob("value", np.array([], dtype=np.float)) + workspace.FeedBlob("value", np.array([], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "AveragePut", @@ -48,7 +48,7 @@ def test_clamp(self): sum_postfix = "/stat_value/sum".encode("ascii") count_postfix = "/stat_value/count".encode("ascii") - workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) + workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "AveragePut", @@ -79,7 +79,7 @@ def test_clamp_with_out_of_bounds(self): sum_postfix = "/stat_value/sum".encode("ascii") count_postfix = "/stat_value/count".encode("ascii") - workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) + workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "AveragePut", @@ -110,7 +110,7 @@ def test_avg_put_ops(self): sum_postfix = "/stat_value/sum".encode("ascii") count_postfix = "/stat_value/count".encode("ascii") - workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) + workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "AveragePut", @@ -139,7 +139,7 @@ def test_increment_put_ops(self): stat_name = "i1".encode('ascii') member_postfix = "/stat_value".encode("ascii") - workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) + workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "IncrementPut", @@ -169,7 +169,7 @@ def test_stddev_put_ops(self): sumoffset_postfix = "/stat_value/sumoffset".encode("ascii") sumsqoffset_postfix = "/stat_value/sumsqoffset".encode("ascii") - workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) + workspace.FeedBlob("value", np.array([put_value], dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(core.CreateOperator( "StdDevPut", diff --git a/caffe2/python/operator_test/storm_test.py b/caffe2/python/operator_test/storm_test.py index c97f631d21600..72cbf09ff077e 100644 --- a/caffe2/python/operator_test/storm_test.py +++ b/caffe2/python/operator_test/storm_test.py @@ -23,7 +23,7 @@ class TestStorm(hu.HypothesisTestCase): allow_nan=False, allow_infinity=False), beta=st.floats(min_value=0.1, max_value=10.0, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_storm_dense(self, inputs, grad_sq_sum, lr, momentum, beta, gc, dc): param, moment, grad = inputs grad_sq_sum = np.array([grad_sq_sum], dtype=np.float32) @@ -66,7 +66,7 @@ def ref_dense(param, moment, grad_sq_sum, grad, lr, momentum, beta): allow_nan=False, allow_infinity=False), beta=st.floats(min_value=0.1, max_value=10.0, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_storm_sparse(self, inputs, grad_sq_sum, lr, momentum, beta, gc, dc): param, moment, grad = inputs @@ -123,7 +123,7 @@ def ref_sparse(param, moment, grad_sq_sum, grad, indices, beta=st.floats(min_value=0.1, max_value=10.0, allow_nan=False, allow_infinity=False), data_strategy=st.data(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_storm_sparse_empty(self, inputs, grad_sq_sum, lr, momentum, beta, data_strategy, gc, dc): param, moment = inputs diff --git a/caffe2/python/operator_test/string_ops_test.py b/caffe2/python/operator_test/string_ops_test.py index a0c56a6866664..f8ca4336759aa 100644 --- a/caffe2/python/operator_test/string_ops_test.py +++ b/caffe2/python/operator_test/string_ops_test.py @@ -28,7 +28,7 @@ def test_string_prefix(self, strings): # an invalid utf-8 string. The goal here is just to avoid python # complaining about the unicode -> str conversion. strings = np.array( - [a.encode('utf-8') for a in strings], dtype=np.object + [a.encode('utf-8') for a in strings], dtype=np.object # type: ignore[attr-defined] ) def string_prefix_ref(strings): @@ -52,7 +52,7 @@ def string_prefix_ref(strings): def test_string_suffix(self, strings): length = 3 strings = np.array( - [a.encode('utf-8') for a in strings], dtype=np.object + [a.encode('utf-8') for a in strings], dtype=np.object # type: ignore[attr-defined] ) def string_suffix_ref(strings): @@ -76,7 +76,7 @@ def string_suffix_ref(strings): def test_string_starts_with(self, strings): prefix = 'a' strings = np.array( - [str(a) for a in strings], dtype=np.object + [str(a) for a in strings], dtype=np.object # type: ignore[attr-defined] ) def string_starts_with_ref(strings): @@ -100,7 +100,7 @@ def string_starts_with_ref(strings): def test_string_ends_with(self, strings): suffix = 'a' strings = np.array( - [str(a) for a in strings], dtype=np.object + [str(a) for a in strings], dtype=np.object # type: ignore[attr-defined] ) def string_ends_with_ref(strings): @@ -127,7 +127,7 @@ def test_string_equals(self, strings): text = strings[0] strings = np.array( - [str(a) for a in strings], dtype=np.object + [str(a) for a in strings], dtype=np.object # type: ignore[attr-defined] ) def string_equals_ref(strings): diff --git a/caffe2/python/operator_test/text_file_reader_test.py b/caffe2/python/operator_test/text_file_reader_test.py index 8889ddb9f53c1..8e53c70d3d5d5 100644 --- a/caffe2/python/operator_test/text_file_reader_test.py +++ b/caffe2/python/operator_test/text_file_reader_test.py @@ -22,7 +22,7 @@ def test_text_file_reader(self): ['l1f2', 'l2f2', 'l3f2', 'l4f2'], [0.456, 0.789, 0.10101, -24342.64], ] - row_data = list(zip(*col_data)) + row_data = list(zip(*col_data)) # type: ignore[call-overload] with tempfile.NamedTemporaryFile(mode='w+', delete=False) as txt_file: txt_file.write( '\n'.join( diff --git a/caffe2/python/operator_test/tile_op_test.py b/caffe2/python/operator_test/tile_op_test.py index d39dfeee0ad72..4a6fa89929ca3 100644 --- a/caffe2/python/operator_test/tile_op_test.py +++ b/caffe2/python/operator_test/tile_op_test.py @@ -32,7 +32,7 @@ def test_tile(self, M, K, N, tiles, axis, gc, dc): ) def tile_ref(X, tiles, axis): - dims = np.asarray([1, 1, 1], dtype=np.int) + dims = np.asarray([1, 1, 1], dtype=np.int) # type: ignore[attr-defined] dims[axis] = tiles tiled_data = np.tile(X, dims) return (tiled_data,) @@ -61,7 +61,7 @@ def test_tile_grad(self, M, N, tiles, gc, dc): ) def tile_ref(X, tiles, axis): - dims = np.asarray([1, 1], dtype=np.int) + dims = np.asarray([1, 1], dtype=np.int) # type: ignore[attr-defined] dims[axis] = tiles tiled_data = np.tile(X, dims) return (tiled_data,) @@ -99,7 +99,7 @@ def test_tilewinput(self, M, K, N, tiles, axis, gc, dc): ) def tile_ref(X, tiles, axis): - dims = np.asarray([1, 1, 1], dtype=np.int) + dims = np.asarray([1, 1, 1], dtype=np.int) # type: ignore[attr-defined] dims[axis] = tiles tiled_data = np.tile(X, dims) return (tiled_data,) diff --git a/caffe2/python/operator_test/top_k_test.py b/caffe2/python/operator_test/top_k_test.py index fa628456c3a41..2cc0052f325bb 100644 --- a/caffe2/python/operator_test/top_k_test.py +++ b/caffe2/python/operator_test/top_k_test.py @@ -18,7 +18,7 @@ def top_k_ref(self, X, k, flatten_indices, axis=-1): in_dims = X.shape out_dims = list(in_dims) out_dims[axis] = k - out_dims = tuple(out_dims) + out_dims = tuple(out_dims) # type: ignore[assignment] if axis == -1: axis = len(in_dims) - 1 prev_dims = 1 diff --git a/caffe2/python/operator_test/torch_integration_test.py b/caffe2/python/operator_test/torch_integration_test.py index e568f8bdff74d..1f3a9f3c3a682 100644 --- a/caffe2/python/operator_test/torch_integration_test.py +++ b/caffe2/python/operator_test/torch_integration_test.py @@ -122,7 +122,7 @@ class TorchIntegration(hu.HypothesisTestCase): rotated=st.booleans(), angle_bound_on=st.booleans(), clip_angle_thresh=st.sampled_from([-1.0, 1.0]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_bbox_transform( self, @@ -181,7 +181,7 @@ def bbox_transform_ref(): angle_bound_on=st.booleans(), clip_angle_thresh=st.sampled_from([-1.0, 1.0]), batch_splits_dtype=st.sampled_from([torch.float32, torch.int32]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_box_with_nms_limits( self, diff --git a/caffe2/python/operator_test/transpose_op_test.py b/caffe2/python/operator_test/transpose_op_test.py index 4ccec250e22b3..e3d798ef30a45 100644 --- a/caffe2/python/operator_test/transpose_op_test.py +++ b/caffe2/python/operator_test/transpose_op_test.py @@ -55,7 +55,7 @@ def transpose_ref(X): @unittest.skipIf(not workspace.has_cuda_support, "no cuda support") @given(X=hu.tensor(dtype=np.float32), use_axes=st.booleans(), - **hu.gcs_cuda_only) + **hu.gcs_cuda_only) # type: ignore[arg-type] def test_transpose_cudnn(self, X, use_axes, gc, dc): ndim = len(X.shape) axes = np.arange(ndim) diff --git a/caffe2/python/operator_test/unique_ops_test.py b/caffe2/python/operator_test/unique_ops_test.py index b49f4765539ec..10f13c53a57c9 100644 --- a/caffe2/python/operator_test/unique_ops_test.py +++ b/caffe2/python/operator_test/unique_ops_test.py @@ -44,7 +44,7 @@ class TestUniqueOps(serial.SerializedTestCase): # allow negatives elements=st.integers(min_value=-10, max_value=10)), return_remapping=st.booleans(), - **hu.gcs_no_hip + **hu.gcs_no_hip # type: ignore[arg-type] ) @settings(deadline=10000) def test_unique_op(self, X, return_remapping, gc, dc): diff --git a/caffe2/python/operator_test/unique_uniform_fill_op_test.py b/caffe2/python/operator_test/unique_uniform_fill_op_test.py index 1026745db7249..809cccec172f3 100644 --- a/caffe2/python/operator_test/unique_uniform_fill_op_test.py +++ b/caffe2/python/operator_test/unique_uniform_fill_op_test.py @@ -27,7 +27,7 @@ class TestUniqueUniformFillOp(hu.HypothesisTestCase): ] ), s=st.integers(10, 500), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_unique_uniform_int_fill(self, r, avoid, dtypes, s, gc, dc): net = core.Net("net") diff --git a/caffe2/python/operator_test/upsample_op_test.py b/caffe2/python/operator_test/upsample_op_test.py index 61b01644bcf5d..d63b74f3ed071 100644 --- a/caffe2/python/operator_test/upsample_op_test.py +++ b/caffe2/python/operator_test/upsample_op_test.py @@ -83,13 +83,13 @@ def ref(X, scales=None): if output_width > 1 else float(0)) - for i in range(output_height): + for i in range(output_height): # type: ignore[call-overload] h1r = rheight * i h1 = int(h1r) h1p = 1 if h1 < height - 1 else 0 h1lambda = h1r - h1 h0lambda = float(1) - h1lambda - for j in range(output_width): + for j in range(output_width): # type: ignore[call-overload] w1r = rwidth * j w1 = int(w1r) w1p = 1 if w1 < width - 1 else 0 @@ -166,13 +166,13 @@ def ref(dY, X, scales=None): if output_width > 1 else float(0)) - for i in range(output_height): + for i in range(output_height): # type: ignore[call-overload] h1r = rheight * i h1 = int(h1r) h1p = 1 if h1 < height - 1 else 0 h1lambda = h1r - h1 h0lambda = float(1) - h1lambda - for j in range(output_width): + for j in range(output_width): # type: ignore[call-overload] w1r = rwidth * j w1 = int(w1r) w1p = 1 if w1 < width - 1 else 0 diff --git a/caffe2/python/operator_test/utility_ops_test.py b/caffe2/python/operator_test/utility_ops_test.py index aeefbf596afeb..f832e8fff0e5f 100644 --- a/caffe2/python/operator_test/utility_ops_test.py +++ b/caffe2/python/operator_test/utility_ops_test.py @@ -42,7 +42,7 @@ def slice_ref(X): "Slice", ["X", "starts", "ends"], ["Y"], device_option=gc ) - def slice_ref(x, starts, ends): + def slice_ref(x, starts, ends): # type: ignore[misc] slc = [slice(None)] * x.ndim slc[dim] = slice(slice_start, slice_end) return [x[slc]] @@ -331,7 +331,7 @@ def sum_op_ref(*args): min_value=0, max_value=len(tup[1]) - 1)), ) ), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_lengths_gather(self, inputs, gc, dc): items = inputs[0] @@ -358,7 +358,7 @@ def lengths_gather_op(items, lengths, indices): @given( inputs=hu.lengths_tensor(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_lengths_to_ranges(self, inputs, gc, dc): _, lengths = inputs @@ -452,7 +452,7 @@ def test_range(self, gc, dc): (2, 10000, 20000), (2, 10000, -1), ): - inputs = [np.array(v) for v in inputs] + inputs = [np.array(v) for v in inputs] # type: ignore[attr-defined] op = core.CreateOperator( "Range", names[len(inputs) - 1], diff --git a/caffe2/python/operator_test/video_input_op_test.py b/caffe2/python/operator_test/video_input_op_test.py index f21f219bd90eb..1adf274b07630 100644 --- a/caffe2/python/operator_test/video_input_op_test.py +++ b/caffe2/python/operator_test/video_input_op_test.py @@ -31,37 +31,37 @@ def create_video_db(self, list_file, output_file, use_list=False): env = lmdb.open(output_file, map_size=LMDB_MAP_SIZE) total_size = 0 - file_name = [] - start_frame = [] - label = [] + file_name = [] # type: ignore[var-annotated] + start_frame = [] # type: ignore[var-annotated] + label = [] # type: ignore[var-annotated] index = 0 with env.begin(write=True) as txn: with open(list_file, "r") as data: for line in data: p = line.split() - file_name = p[0] - start_frame = int(p[1]) - label = int(p[2]) + file_name = p[0] # type: ignore[assignment] + start_frame = int(p[1]) # type: ignore[assignment] + label = int(p[2]) # type: ignore[assignment] if not use_list: - with open(file_name, mode="rb") as file: + with open(file_name, mode="rb") as file: # type: ignore[call-overload] video_data = file.read() else: video_data = file_name tensor_protos = caffe2_pb2.TensorProtos() video_tensor = tensor_protos.protos.add() - video_tensor.data_type = 4 # string data + video_tensor.data_type = 4 # string data # type: ignore[assignment, assignment] video_tensor.string_data.append(video_data) label_tensor = tensor_protos.protos.add() - label_tensor.data_type = 2 - label_tensor.int32_data.append(label) + label_tensor.data_type = 2 # type: ignore[assignment] + label_tensor.int32_data.append(label) # type: ignore[arg-type] start_frame_tensor = tensor_protos.protos.add() - start_frame_tensor.data_type = 2 - start_frame_tensor.int32_data.append(start_frame) + start_frame_tensor.data_type = 2 # type: ignore[assignment] + start_frame_tensor.int32_data.append(start_frame) # type: ignore[arg-type] txn.put( "{}".format(index).encode("ascii"), diff --git a/caffe2/python/operator_test/weighted_multi_sample_test.py b/caffe2/python/operator_test/weighted_multi_sample_test.py index 830a9f9849c7f..3f4284a82d8e3 100644 --- a/caffe2/python/operator_test/weighted_multi_sample_test.py +++ b/caffe2/python/operator_test/weighted_multi_sample_test.py @@ -17,14 +17,14 @@ class TestWeightedMultiSample(hu.HypothesisTestCase): @given( num_samples=st.integers(min_value=0, max_value=128), data_len=st.integers(min_value=0, max_value=10000), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_weighted_multi_sample(self, num_samples, data_len, gc, dc): weights = np.zeros((data_len)) - expected_indices = [] + expected_indices = [] # type: ignore[var-annotated] if data_len > 0: weights[-1] = 1.5 - expected_indices = np.repeat(data_len - 1, num_samples) + expected_indices = np.repeat(data_len - 1, num_samples) # type: ignore[assignment] workspace.FeedBlob("weights", weights.astype(np.float32)) diff --git a/caffe2/python/operator_test/weighted_sample_test.py b/caffe2/python/operator_test/weighted_sample_test.py index 032e9e9d755ed..7e33ff15c42aa 100644 --- a/caffe2/python/operator_test/weighted_sample_test.py +++ b/caffe2/python/operator_test/weighted_sample_test.py @@ -34,8 +34,8 @@ def test_weighted_sample(self, batch, weights_len, gc, dc): weights[i, rand_tmp] = 1.0 values[i, rand_tmp] = rand_val - rand_indices = np.array(rand_indices, dtype=np.float32) - rand_values = np.array(rand_values, dtype=np.float32) + rand_indices = np.array(rand_indices, dtype=np.float32) # type: ignore[assignment] + rand_values = np.array(rand_values, dtype=np.float32) # type: ignore[assignment] workspace.FeedBlob("weights", weights.astype(np.float32)) workspace.FeedBlob("values", values.astype(np.float32)) diff --git a/caffe2/python/operator_test/weighted_sum_test.py b/caffe2/python/operator_test/weighted_sum_test.py index 2c7dffe92672d..18c4b855335f8 100644 --- a/caffe2/python/operator_test/weighted_sum_test.py +++ b/caffe2/python/operator_test/weighted_sum_test.py @@ -60,7 +60,7 @@ def weighted_sum_op_ref(*args): @given(n=st.integers(1, 8), m=st.integers(1, 10), d=st.integers(1, 4), grad_on_w=st.booleans(), - seed=st.integers(min_value=0, max_value=65535), **hu.gcs_cpu_only) + seed=st.integers(min_value=0, max_value=65535), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_weighted_sum_grad( self, n, m, d, grad_on_w, seed, gc, dc): diff --git a/caffe2/python/operator_test/wngrad_test.py b/caffe2/python/operator_test/wngrad_test.py index 48fe0f94731e8..93850c0ddf791 100644 --- a/caffe2/python/operator_test/wngrad_test.py +++ b/caffe2/python/operator_test/wngrad_test.py @@ -85,7 +85,7 @@ class TestWngrad(serial.SerializedTestCase): allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=10000) def test_wngrad_dense_base(self, inputs, seq_b, lr, epsilon, gc, dc): param, grad = inputs @@ -112,7 +112,7 @@ def test_wngrad_dense_base(self, inputs, seq_b, lr, epsilon, gc, dc): allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_wngrad_dense_output_effective_lr(self, inputs, seq_b, lr, epsilon, gc, dc): @@ -141,7 +141,7 @@ def test_wngrad_dense_output_effective_lr(self, inputs, seq_b, allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_wngrad_dense_output_effective_lr_and_update( self, inputs, seq_b, lr, epsilon, gc, dc): @@ -173,7 +173,7 @@ def test_wngrad_dense_output_effective_lr_and_update( allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] def test_sparse_wngrad(self, inputs, seq_b, lr, epsilon, gc, dc): return wngrad_sparse_test_helper(self, inputs, seq_b, lr, epsilon, None, gc, dc) @@ -185,7 +185,7 @@ def test_sparse_wngrad(self, inputs, seq_b, lr, epsilon, gc, dc): allow_nan=False, allow_infinity=False), epsilon=st.floats(min_value=0.01, max_value=0.99, allow_nan=False, allow_infinity=False), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=1000) def test_sparse_wngrad_empty(self, inputs, seq_b, lr, epsilon, gc, dc): param = inputs[0] diff --git a/caffe2/python/optimizer.py b/caffe2/python/optimizer.py index 6d0c9f28aead2..902b33a0af19c 100644 --- a/caffe2/python/optimizer.py +++ b/caffe2/python/optimizer.py @@ -16,7 +16,7 @@ _LEARNING_RATE_INJECTION = "lr_injection" AuxOptimizerParams = namedtuple("AuxOptimizerParams", ["local", "shared"]) -_optimizer_instance_count = defaultdict(int) +_optimizer_instance_count = defaultdict(int) # type: ignore[var-annotated] FP16_ENGINES = ["SIMD_Q_FP16", "SIMD_Q_STOC_FP16", "SIMD_Q_STOC_MKL_FP16"] diff --git a/caffe2/python/optimizer_test.py b/caffe2/python/optimizer_test.py index 914ef78c079b9..025b6cf42a573 100644 --- a/caffe2/python/optimizer_test.py +++ b/caffe2/python/optimizer_test.py @@ -368,8 +368,8 @@ def caffe2_yellowfin(self, zero_debias, grad_coef, n_dim, n_iter, gpu): # a hack to create an object with __dict__ param_info = lambda: None - param_info.blob = w - param_info.grad = grad + param_info.blob = w # type: ignore[attr-defined] + param_info.grad = grad # type: ignore[attr-defined] optimizer.YellowFinOptimizer( alpha=alpha, diff --git a/caffe2/python/optimizer_test_util.py b/caffe2/python/optimizer_test_util.py index beb8a37818327..6fe2494f74dc2 100644 --- a/caffe2/python/optimizer_test_util.py +++ b/caffe2/python/optimizer_test_util.py @@ -44,12 +44,12 @@ def _createDense(self, dtype=core.DataType.FLOAT): sq = model.SquaredL2Distance([out, 'label']) loss = model.AveragedLoss(sq, "avg_loss") grad_map = model.AddGradientOperators([loss]) - self.assertIsInstance(grad_map['fc_w'], core.BlobReference) + self.assertIsInstance(grad_map['fc_w'], core.BlobReference) # type: ignore[attr-defined] return (model, perfect_model, data, label) def testDense(self): model, perfect_model, data, label = self._createDense() - optimizer = self.build_optimizer(model) + optimizer = self.build_optimizer(model) # type: ignore[attr-defined] workspace.FeedBlob('data', data[0]) workspace.FeedBlob('label', label[0]) workspace.RunNetOnce(model.param_init_net) @@ -65,7 +65,7 @@ def testDense(self): workspace.FetchBlob('fc_w'), atol=1e-2 ) - self.check_optimizer(optimizer) + self.check_optimizer(optimizer) # type: ignore[attr-defined] @unittest.skipIf(not workspace.has_gpu_support, "No gpu support") def testGPUDense(self, dtype=core.DataType.FLOAT): @@ -84,9 +84,9 @@ def testGPUDense(self, dtype=core.DataType.FLOAT): brew.fc(model, 'fc_cpu', 'fc2', dim_in=1, dim_out=10, axis=0) # Create optimizer in default device scope - self.build_optimizer(model) + self.build_optimizer(model) # type: ignore[attr-defined] - if self._skip_gpu: + if self._skip_gpu: # type: ignore[attr-defined] return # Run net to see it does not crash @@ -116,8 +116,8 @@ def testSparse(self): sq = model.SquaredL2Distance([out, 'label']) loss = model.AveragedLoss(sq, "avg_loss") grad_map = model.AddGradientOperators([loss]) - self.assertIsInstance(grad_map['w'], core.GradientSlice) - optimizer = self.build_optimizer(model) + self.assertIsInstance(grad_map['w'], core.GradientSlice) # type: ignore[attr-defined] + optimizer = self.build_optimizer(model) # type: ignore[attr-defined] workspace.CreateBlob('indices') workspace.CreateBlob('label') @@ -145,7 +145,7 @@ def testSparse(self): workspace.FetchBlob('w'), atol=1e-2 ) - self.check_optimizer(optimizer) + self.check_optimizer(optimizer) # type: ignore[attr-defined] class LRModificationTestBase(object): @@ -175,8 +175,8 @@ def _gradient_ratio_reference(self, model, params, max_gradient_norm): def test_global_norm_based_gradient_clipping(self): max_gradient_norm = 1.0 - model, perfect_model, data, label = self._createDense() - opt = self.build_optimizer(model, max_gradient_norm=max_gradient_norm) + model, perfect_model, data, label = self._createDense() # type: ignore[attr-defined] + opt = self.build_optimizer(model, max_gradient_norm=max_gradient_norm) # type: ignore[attr-defined] params = [] for param in model.GetParams(top_scope=True): @@ -191,7 +191,7 @@ def test_global_norm_based_gradient_clipping(self): workspace.FeedBlob('label', label[0]) workspace.RunNetOnce(model.param_init_net) workspace.CreateNet(model.net, True) - self.assertIsNotNone(opt._lr_multiplier) + self.assertIsNotNone(opt._lr_multiplier) # type: ignore[attr-defined] # Run net once idx = np.random.randint(data.shape[0]) @@ -207,13 +207,13 @@ def test_global_norm_based_gradient_clipping(self): norm_ratio = workspace.FetchBlob( 'norm_clipped_grad_update/norm_ratio') np.testing.assert_almost_equal(norm_ratio, reference) - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] reference < 1.0, "Bad test, gradient not being scaled." ) def test_lr_injection(self): - model, perfect_model, data, label = self._createDense() - opt = self.build_optimizer( + model, perfect_model, data, label = self._createDense() # type: ignore[attr-defined] + opt = self.build_optimizer( # type: ignore[attr-defined] model, max_gradient_norm=1, allow_lr_injection=True ) @@ -223,15 +223,15 @@ def test_lr_injection(self): workspace.CreateNet(model.net, True) # Test LR injection initialized properly - self.assertIsNotNone(opt._lr_multiplier) - self.assertEqual(optimizer.get_lr_injection(), 1) + self.assertIsNotNone(opt._lr_multiplier) # type: ignore[attr-defined] + self.assertEqual(optimizer.get_lr_injection(), 1) # type: ignore[attr-defined] # Test that we're able to modify the value of the lr_injection optimizer.set_lr_injection(0) - self.assertEqual(optimizer.get_lr_injection(), 0) + self.assertEqual(optimizer.get_lr_injection(), 0) # type: ignore[attr-defined] # Test that setting the lr_injector properly propagates to the # lr_multiplier. Here, we have both lr_injector and norm_ratio that # affect the lr_multiplier workspace.RunNet(model.net.Proto().name) - self.assertEqual(workspace.FetchBlob('lr_multiplier'), 0) + self.assertEqual(workspace.FetchBlob('lr_multiplier'), 0) # type: ignore[attr-defined] diff --git a/caffe2/python/parallelize_bmuf_distributed_test.py b/caffe2/python/parallelize_bmuf_distributed_test.py index c38a4ccc34d7e..ff7dadcf3ecb0 100644 --- a/caffe2/python/parallelize_bmuf_distributed_test.py +++ b/caffe2/python/parallelize_bmuf_distributed_test.py @@ -235,7 +235,7 @@ def test_bmuf_distributed(self, cpu_device, nesterov): def _test_bmuf_distributed(self, cpu_device=False, nesterov=False): processes = [] filestore_dir = tempfile.mkdtemp() - results = Manager().dict() + results = Manager().dict() # type: ignore[var-annotated] for idx in range(0, 2): process = Process( target=bmuf_process, diff --git a/caffe2/python/pipeline.py b/caffe2/python/pipeline.py index 4625d0b0458c4..e1c28dc298650 100644 --- a/caffe2/python/pipeline.py +++ b/caffe2/python/pipeline.py @@ -43,7 +43,7 @@ def _init_output(output, capacity, global_init_net, global_exit_net): writer = out_queue.writer() elif isinstance(output, Writer): assert capacity is None, 'capacity would not be used.' - out_queue = None + out_queue = None # type: ignore[assignment] writer = output elif hasattr(output, 'writer'): assert capacity is None, 'capacity would not be used.' @@ -425,7 +425,7 @@ def setup(self, init_net): def __call__(self, rec): assert not self._frozen prefix = NetBuilder.current().name + '/' - blob_remap = {} + blob_remap = {} # type: ignore[var-annotated] for net in self.thread_init_nets: new_net, _ = core.clone_and_bind_net( net, str(net) + prefix, prefix, blob_remap) diff --git a/caffe2/python/pipeline_test.py b/caffe2/python/pipeline_test.py index fe00933ac4e15..7ee18345a00ab 100644 --- a/caffe2/python/pipeline_test.py +++ b/caffe2/python/pipeline_test.py @@ -53,7 +53,7 @@ def proc2(rec): src_ds = Dataset(src_blobs) dst_ds = Dataset(dst_blobs) - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] out1 = pipe( src_ds.reader(), output=Queue( diff --git a/caffe2/python/predictor/predictor_py_utils.py b/caffe2/python/predictor/predictor_py_utils.py index 0a23ab5c2512a..d0a859d4e55bc 100644 --- a/caffe2/python/predictor/predictor_py_utils.py +++ b/caffe2/python/predictor/predictor_py_utils.py @@ -109,7 +109,7 @@ def GetBlobs(meta_net_def, key): def GetBlobsByTypePrefix(meta_net_def, blob_type_prefix): - blob_map = {} + blob_map = {} # type: ignore[var-annotated] for b in meta_net_def.blobs: if b.key.startswith(blob_type_prefix): for blob in b.value: diff --git a/caffe2/python/record_queue.py b/caffe2/python/record_queue.py index 1170c2bf3a829..f60a87a1d2ad7 100644 --- a/caffe2/python/record_queue.py +++ b/caffe2/python/record_queue.py @@ -32,13 +32,13 @@ def read(self, read_net): class _QueueWriter(Writer): def __init__(self, blobs_queue, schema): self.blobs_queue = blobs_queue - self.schema = schema + self.schema = schema # type: ignore[assignment] def write(self, writer_net, fields): if isinstance(fields, Field): fields = fields.field_blobs() writer_net.CheckDatasetConsistency( - fields, [], fields=self.schema.field_names()) + fields, [], fields=self.schema.field_names()) # type: ignore[attr-defined] status = writer_net.NextName() writer_net.SafeEnqueueBlobs( [self.blobs_queue] + fields, fields + [status]) diff --git a/caffe2/python/recurrent.py b/caffe2/python/recurrent.py index d4762f08c683e..3edcefa46db97 100644 --- a/caffe2/python/recurrent.py +++ b/caffe2/python/recurrent.py @@ -114,7 +114,7 @@ def s(name): backward_cell_net.Proto().external_input.extend(scratches) backward_cell_net.Proto().type = 'simple' else: - backward_cell_net = None + backward_cell_net = None # type: ignore[assignment] all_inputs = [i[1] for i in inputs] + [ x[1] for x in initial_cell_inputs] + references diff --git a/caffe2/python/regularizer_test.py b/caffe2/python/regularizer_test.py index ac46746c096f2..cb2dc06bcd184 100644 --- a/caffe2/python/regularizer_test.py +++ b/caffe2/python/regularizer_test.py @@ -89,7 +89,7 @@ def ref(X): eps=hu.floats(min_value=1e-6, max_value=1e-4), ub=hu.floats(min_value=-1.0, max_value=1.0), lb=hu.floats(min_value=-1.0, max_value=1.0), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_bounded_grad_proj(self, X, left_open, right_open, eps, ub, lb, gc, dc): if ub - (eps if right_open else 0.) < lb + (eps if left_open else 0.): diff --git a/caffe2/python/rnn_cell.py b/caffe2/python/rnn_cell.py index f6da5e126119d..70bf1ca13a7e3 100644 --- a/caffe2/python/rnn_cell.py +++ b/caffe2/python/rnn_cell.py @@ -831,10 +831,10 @@ def __init__( self.use_cudnn = use_cudnn super(DropoutCell, self).__init__(**kwargs) - self.prepare_input = internal_cell.prepare_input - self.get_output_state_index = internal_cell.get_output_state_index - self.get_state_names = internal_cell.get_state_names - self.get_output_dim = internal_cell.get_output_dim + self.prepare_input = internal_cell.prepare_input # type: ignore[assignment] + self.get_output_state_index = internal_cell.get_output_state_index # type: ignore[assignment] + self.get_state_names = internal_cell.get_state_names # type: ignore[assignment] + self.get_output_dim = internal_cell.get_output_dim # type: ignore[assignment] self.mask = 0 @@ -961,7 +961,7 @@ def __init__(self, cells, residual_output_layers=None, **kwargs): self.output_connected_layers.append(len(self.cells) - 1) self.output_indices.append(output_index_per_layer[-1]) - self.state_names = [] + self.state_names = [] # type: ignore[var-annotated] for i, cell in enumerate(self.cells): self.state_names.extend( map(self.layer_scoper(i), cell.get_state_names()) @@ -1454,7 +1454,7 @@ def __init__( forward_only=False, drop_states=False, ) - super(MILSTMWithAttentionCell, self).__init__( + super(MILSTMWithAttentionCell, self).__init__( # type: ignore[call-arg] encoder_output_dim=encoder_output_dim, encoder_outputs=encoder_outputs, decoder_cell=decoder_cell, @@ -1630,7 +1630,7 @@ def apply_over_sequence( ) all_states.append(states) - all_states = zip(*all_states) + all_states = zip(*all_states) # type: ignore[assignment] all_states = [ model.net.Concat( list(full_output), @@ -1786,7 +1786,7 @@ def init(layer, pname, input_type): param_extract_net = core.Net("lstm_param_extractor") param_extract_net.AddExternalInputs([input_blob, weights]) - param_extract_mapping = {} + param_extract_mapping = {} # type: ignore[var-annotated] # Populate the weights-blob from blobs containing parameters for # the individual components of the LSTM, such as forget/input gate diff --git a/caffe2/python/schema.py b/caffe2/python/schema.py index 60353ac38a256..eae355c139c2d 100644 --- a/caffe2/python/schema.py +++ b/caffe2/python/schema.py @@ -69,7 +69,7 @@ def _normalize_field(field_or_type_or_blob, keep_blobs=True): ) # pyre-fixme[16]: `FeatureSpec.__new__` has no attribute `__defaults__` -FeatureSpec.__new__.__defaults__ = (None, None, None, None, None, None) +FeatureSpec.__new__.__defaults__ = (None, None, None, None, None, None) # type: ignore[attr-defined] class Metadata( @@ -93,7 +93,7 @@ class Metadata( # pyre-fixme[16]: `Metadata.__new__` has no attribute `__defaults__` -Metadata.__new__.__defaults__ = (None, None, None) +Metadata.__new__.__defaults__ = (None, None, None) # type: ignore[attr-defined] class Field(object): @@ -403,8 +403,8 @@ def __init__(self, *fields): assert field[0] != 'lengths', ( 'Struct cannot contain a field named `lengths`.' ) - fields = [(name, _normalize_field(field)) for name, field in fields] - self.fields = OrderedDict() + fields = [(name, _normalize_field(field)) for name, field in fields] # type: ignore[assignment] + self.fields = OrderedDict() # type: ignore[var-annotated] for name, field in fields: if FIELD_SEPARATOR in name: name, field = self._struct_from_nested_name(name, field) @@ -973,7 +973,7 @@ def from_dtype(dtype, _outer_shape=()): if not dtype.fields: return Scalar(dtype) - struct_fields = [] + struct_fields = [] # type: ignore[var-annotated] for name, (fdtype, offset) in dtype.fields: assert offset == 0, ('Fields with byte offsets are not supported.') struct_fields += (name, from_dtype(fdtype, _outer_shape=shape)) @@ -1253,11 +1253,11 @@ def InitEmptyRecord(net, schema_or_record, enforce_types=False): _DATA_TYPE_FOR_DTYPE = [ - (np.str, core.DataType.STRING), + (np.str, core.DataType.STRING), # type: ignore[attr-defined] (np.float16, core.DataType.FLOAT16), (np.float32, core.DataType.FLOAT), (np.float64, core.DataType.DOUBLE), - (np.bool, core.DataType.BOOL), + (np.bool, core.DataType.BOOL), # type: ignore[attr-defined] (np.int8, core.DataType.INT8), (np.int16, core.DataType.INT16), (np.int32, core.DataType.INT32), diff --git a/caffe2/python/schema_test.py b/caffe2/python/schema_test.py index bb9536e4430b3..2457f00a67c70 100644 --- a/caffe2/python/schema_test.py +++ b/caffe2/python/schema_test.py @@ -94,12 +94,12 @@ def testTuple(self): s = schema.Tuple(np.int32, str, np.float32) s2 = schema.Struct( ('field_0', schema.Scalar(dtype=np.int32)), - ('field_1', schema.Scalar(dtype=np.str)), + ('field_1', schema.Scalar(dtype=np.str)), # type: ignore[attr-defined] ('field_2', schema.Scalar(dtype=np.float32)) ) self.assertEquals(s, s2) self.assertEquals(s[0], schema.Scalar(dtype=np.int32)) - self.assertEquals(s[1], schema.Scalar(dtype=np.str)) + self.assertEquals(s[1], schema.Scalar(dtype=np.str)) # type: ignore[attr-defined] self.assertEquals(s[2], schema.Scalar(dtype=np.float32)) self.assertEquals( s[2, 0], @@ -187,19 +187,19 @@ def testPreservesMetadata(self): ('a', schema.Scalar(np.float32)), ( 'b', schema.Scalar( np.int32, - metadata=schema.Metadata(categorical_limit=5) + metadata=schema.Metadata(categorical_limit=5) # type: ignore[call-arg] ) ), ( 'c', schema.List( schema.Scalar( np.int32, - metadata=schema.Metadata(categorical_limit=6) + metadata=schema.Metadata(categorical_limit=6) # type: ignore[call-arg] ) ) ) ) # attach metadata to lengths field - s.c.lengths.set_metadata(schema.Metadata(categorical_limit=7)) + s.c.lengths.set_metadata(schema.Metadata(categorical_limit=7)) # type: ignore[call-arg] self.assertEqual(None, s.a.metadata) self.assertEqual(5, s.b.metadata.categorical_limit) diff --git a/caffe2/python/serialized_test/coverage.py b/caffe2/python/serialized_test/coverage.py index 2014847242c4d..b2e1bd38eefdd 100644 --- a/caffe2/python/serialized_test/coverage.py +++ b/caffe2/python/serialized_test/coverage.py @@ -73,7 +73,7 @@ def gen_coverage_sets(source_dir): for op_name in core._GetRegisteredOperators(): s = OpSchema.get(op_name) - if s is not None and s.private: + if s is not None and s.private: # type: ignore[attr-defined] continue if s: if op_name not in covered_ops: diff --git a/caffe2/python/serialized_test/serialized_test_util.py b/caffe2/python/serialized_test/serialized_test_util.py index 621adca9454e6..c73860ab445ed 100644 --- a/caffe2/python/serialized_test/serialized_test_util.py +++ b/caffe2/python/serialized_test/serialized_test_util.py @@ -50,7 +50,7 @@ def _getGradientOrNone(op_proto): # necessary to support converting jagged lists into numpy arrays def _transformList(l): - ret = np.empty(len(l), dtype=np.object) + ret = np.empty(len(l), dtype=np.object) # type: ignore[attr-defined] for (i, arr) in enumerate(l): ret[i] = arr return ret diff --git a/caffe2/python/session.py b/caffe2/python/session.py index fb2b57c4f5eec..c34e009bf116b 100644 --- a/caffe2/python/session.py +++ b/caffe2/python/session.py @@ -73,7 +73,7 @@ class Session(object): will only be able to share blobs defined on a common parent Workspace. """ - _compiled_cache = {} + _compiled_cache = {} # type: ignore[var-annotated] def __init__(self): self._open = True @@ -188,7 +188,7 @@ def __init__(self, ws=None): @classmethod def _compile_task_group(cls, task_group, setup_net_list=None): - with Cluster(): + with Cluster(): # type: ignore[attr-defined] task = task_group.to_task() plan = core.Plan('task_group_plan') plan.AddStep(task.get_step()) diff --git a/caffe2/python/session_test.py b/caffe2/python/session_test.py index fa505c296820d..a4d3dd59ef9ff 100644 --- a/caffe2/python/session_test.py +++ b/caffe2/python/session_test.py @@ -47,7 +47,7 @@ def proc2(rec): src_ds = Dataset(src_blobs) dst_ds = Dataset(dst_blobs) - with TaskGroup() as tg: + with TaskGroup() as tg: # type: ignore[attr-defined] out1 = pipe(src_ds.reader(), processor=proc1) out2 = pipe(out1, processor=proc2) pipe(out2, dst_ds.writer()) diff --git a/caffe2/python/sparse_to_dense_mask_test.py b/caffe2/python/sparse_to_dense_mask_test.py index e62c7e6d41dc8..c51f57f97da69 100644 --- a/caffe2/python/sparse_to_dense_mask_test.py +++ b/caffe2/python/sparse_to_dense_mask_test.py @@ -21,12 +21,12 @@ def test_sparse_to_dense_mask_float(self): np.array([2, 4, 6, 1, 2, 999999999, 2], dtype=np.int32)) workspace.FeedBlob( 'values', - np.array([1, 2, 3, 4, 5, 6, 7], dtype=np.float)) - workspace.FeedBlob('default', np.array(-1, dtype=np.float)) + np.array([1, 2, 3, 4, 5, 6, 7], dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array(-1, dtype=np.float)) # type: ignore[attr-defined] workspace.FeedBlob('lengths', np.array([3, 4], dtype=np.int32)) workspace.RunOperatorOnce(op) output = workspace.FetchBlob('output') - expected = np.array([[-1, 1, 3], [6, 7, -1]], dtype=np.float) + expected = np.array([[-1, 1, 3], [6, 7, -1]], dtype=np.float) # type: ignore[attr-defined] self.assertEqual(output.shape, expected.shape) np.testing.assert_array_equal(output, expected) @@ -42,8 +42,8 @@ def test_sparse_to_dense_mask_invalid_inputs(self): np.array([2000000000000, 999999999, 2, 3, 4, 5], dtype=np.int32)) workspace.FeedBlob( 'values', - np.array([1, 2, 3, 4, 5, 6], dtype=np.float)) - workspace.FeedBlob('default', np.array(-1, dtype=np.float)) + np.array([1, 2, 3, 4, 5, 6], dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array(-1, dtype=np.float)) # type: ignore[attr-defined] workspace.FeedBlob('lengths', np.array([6], dtype=np.int32)) try: workspace.RunOperatorOnce(op) @@ -69,14 +69,14 @@ def test_sparse_to_dense_mask_subtensor(self): workspace.FeedBlob( 'values', np.array([[[1, -1]], [[2, -2]], [[3, -3]], [[4, -4]], [[5, -5]]], - dtype=np.float)) - workspace.FeedBlob('default', np.array([[-1, 0]], dtype=np.float)) + dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array([[-1, 0]], dtype=np.float)) # type: ignore[attr-defined] workspace.FeedBlob('lengths', np.array([2, 3], dtype=np.int32)) workspace.RunOperatorOnce(op) output = workspace.FetchBlob('output') expected = np.array([ [[[-1, 0]], [[1, -1]], [[-1, 0]], [[-1, 0]]], - [[[4, -4]], [[5, -5]], [[-1, 0]], [[3, -3]]]], dtype=np.float) + [[[4, -4]], [[5, -5]], [[-1, 0]], [[3, -3]]]], dtype=np.float) # type: ignore[attr-defined] self.assertEqual(output.shape, expected.shape) np.testing.assert_array_equal(output, expected) @@ -108,11 +108,11 @@ def test_sparse_to_dense_mask_empty_lengths(self): ['output'], mask=[1, 2, 6]) workspace.FeedBlob('indices', np.array([2, 4, 6], dtype=np.int32)) - workspace.FeedBlob('values', np.array([1, 2, 3], dtype=np.float)) - workspace.FeedBlob('default', np.array(-1, dtype=np.float)) + workspace.FeedBlob('values', np.array([1, 2, 3], dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array(-1, dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(op) output = workspace.FetchBlob('output') - expected = np.array([-1, 1, 3], dtype=np.float) + expected = np.array([-1, 1, 3], dtype=np.float) # type: ignore[attr-defined] self.assertEqual(output.shape, expected.shape) np.testing.assert_array_equal(output, expected) @@ -123,11 +123,11 @@ def test_sparse_to_dense_mask_no_lengths(self): ['output'], mask=[1, 2, 6]) workspace.FeedBlob('indices', np.array([2, 4, 6], dtype=np.int32)) - workspace.FeedBlob('values', np.array([1, 2, 3], dtype=np.float)) - workspace.FeedBlob('default', np.array(-1, dtype=np.float)) + workspace.FeedBlob('values', np.array([1, 2, 3], dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array(-1, dtype=np.float)) # type: ignore[attr-defined] workspace.RunOperatorOnce(op) output = workspace.FetchBlob('output') - expected = np.array([-1, 1, 3], dtype=np.float) + expected = np.array([-1, 1, 3], dtype=np.float) # type: ignore[attr-defined] self.assertEqual(output.shape, expected.shape) np.testing.assert_array_equal(output, expected) @@ -139,18 +139,18 @@ def test_sparse_to_dense_mask_presence_mask(self): mask=[11, 12], return_presence_mask=True) workspace.FeedBlob('indices', np.array([11, 12, 13], dtype=np.int32)) - workspace.FeedBlob('values', np.array([11, 12, 13], dtype=np.float)) - workspace.FeedBlob('default', np.array(-1, dtype=np.float)) + workspace.FeedBlob('values', np.array([11, 12, 13], dtype=np.float)) # type: ignore[attr-defined] + workspace.FeedBlob('default', np.array(-1, dtype=np.float)) # type: ignore[attr-defined] workspace.FeedBlob('lengths', np.array([1, 2], dtype=np.int32)) workspace.RunOperatorOnce(op) output = workspace.FetchBlob('output') presence_mask = workspace.FetchBlob('presence_mask') - expected_output = np.array([[11, -1], [-1, 12]], dtype=np.float) + expected_output = np.array([[11, -1], [-1, 12]], dtype=np.float) # type: ignore[attr-defined] expected_presence_mask = np.array( [[True, False], [False, True]], - dtype=np.bool) + dtype=np.bool) # type: ignore[attr-defined] self.assertEqual(output.shape, expected_output.shape) np.testing.assert_array_equal(output, expected_output) self.assertEqual(presence_mask.shape, expected_presence_mask.shape) diff --git a/caffe2/python/task.py b/caffe2/python/task.py index 332dec0d16c41..8ea661bb73930 100644 --- a/caffe2/python/task.py +++ b/caffe2/python/task.py @@ -103,8 +103,8 @@ class WorkspaceType(object): def get_setup_nets(key, steps_or_nets, target): init_net = core.Net(key + '/init') exit_net = core.Net(key + '/exit') - init_nets = [] - exit_nets = [] + init_nets = [] # type: ignore[var-annotated] + exit_nets = [] # type: ignore[var-annotated] objs = [] for step_or_net in steps_or_nets: if hasattr(step_or_net, 'get_all_attributes'): @@ -387,7 +387,7 @@ def get(self): def fetch(self): assert self._fetch_func is not None, ( 'Cannot fetch value for this output.') - fetched_vals = [self._fetch_func(v) for v in self._values] + fetched_vals = [self._fetch_func(v) for v in self._values] # type: ignore[union-attr] if self._is_scalar: return fetched_vals[0] elif self._schema: @@ -473,7 +473,7 @@ class Task(context.Managed): # Setup will run once for each instance of the task. TASK_INSTANCE_SETUP = 'task_instance_setup' REPORT_STEP = 'report_step' - _global_names_used = set() + _global_names_used = set() # type: ignore[var-annotated] @staticmethod def _get_next_name(node, group, name): @@ -549,14 +549,14 @@ def __enter__(self): return self def __exit__(self, type, value, traceback): - super(Task, self).__exit__(type, value, traceback) + super(Task, self).__exit__(type, value, traceback) # type: ignore[misc] self._net_builder.__exit__(type, value, traceback) if type is None: self.set_step(self._net_builder) if self.group is not None: self.group._tasks_to_add.append(self) - self._net_builder = None + self._net_builder = None # type: ignore[assignment] def workspace_type(self): return self._workspace_type diff --git a/caffe2/python/transformations.py b/caffe2/python/transformations.py index fc1bad34b2013..24f52a6215f65 100644 --- a/caffe2/python/transformations.py +++ b/caffe2/python/transformations.py @@ -28,10 +28,10 @@ def __init__(self): @classmethod def runTransform(cls, transform_name, net): pb = net.Proto().SerializeToString() - if C.transform_exists(transform_name): - output = C.run_transform(transform_name, pb) - elif C.workspace_transform_exists(transform_name): - output = C.run_workspace_transform(transform_name, pb) + if C.transform_exists(transform_name): # type: ignore[attr-defined] + output = C.run_transform(transform_name, pb) # type: ignore[attr-defined] + elif C.workspace_transform_exists(transform_name): # type: ignore[attr-defined] + output = C.run_workspace_transform(transform_name, pb) # type: ignore[attr-defined] else: raise AttributeError('Transformation {} not found.'.format(transform_name)) net.Proto().ParseFromString(output) @@ -42,17 +42,17 @@ def __getattr__(self, transform_name): def fuseNNPACKConvRelu(net): net.Proto().ParseFromString( - C.transform_fuseNNPACKConvRelu(net.Proto().SerializeToString()) + C.transform_fuseNNPACKConvRelu(net.Proto().SerializeToString()) # type: ignore[attr-defined] ) def optimizeForMKLDNN(net, training_mode = False): net.Proto().ParseFromString( - C.transform_optimizeForMKLDNN(net.Proto().SerializeToString(), training_mode) + C.transform_optimizeForMKLDNN(net.Proto().SerializeToString(), training_mode) # type: ignore[attr-defined] ) def fuseConvBN(net): net.Proto().ParseFromString( - C.transform_fuseConvBN(net.Proto().SerializeToString()) + C.transform_fuseConvBN(net.Proto().SerializeToString()) # type: ignore[attr-defined] ) diff --git a/caffe2/python/trt/test_pt_onnx_trt.py b/caffe2/python/trt/test_pt_onnx_trt.py index e066e8363a179..6c317e75fca2d 100644 --- a/caffe2/python/trt/test_pt_onnx_trt.py +++ b/caffe2/python/trt/test_pt_onnx_trt.py @@ -104,7 +104,7 @@ def _test_model(self, model_name, input_shape = (3, 224, 224), normalization_hin stream.synchronize() amax = np.argmax(h_output) - pred = self.labels[amax] + pred = self.labels[amax] # type: ignore[call-overload] if "_".join(pred.split()) not in\ os.path.splitext(os.path.basename(test_case))[0]: err_count = err_count + 1 diff --git a/caffe2/python/trt/test_trt.py b/caffe2/python/trt/test_trt.py index 6f9426d6a93aa..430dba09ef1ab 100644 --- a/caffe2/python/trt/test_trt.py +++ b/caffe2/python/trt/test_trt.py @@ -237,7 +237,7 @@ def test_resnet50_core(self): for _ in range(repeat): workspace.RunNet(pred_net.name) end = time.time() - c2_time = end - start + c2_time = end - start # type: ignore[assignment] output_values = [workspace.FetchBlob(name) for name in net_outputs] Y_c2 = namedtupledict('Outputs', net_outputs)(*output_values) workspace.ResetWorkspace() diff --git a/caffe2/python/trt/transform.py b/caffe2/python/trt/transform.py index 0e304ca4fae30..20bc2f957befd 100644 --- a/caffe2/python/trt/transform.py +++ b/caffe2/python/trt/transform.py @@ -41,7 +41,7 @@ def convert_onnx_model_to_trt_op(onnx_model, Convert the whole ONNX model to a TensorRT C2 op """ check_gpu_() - trt_str = C.onnx_to_trt_op(onnx_model.SerializeToString(), + trt_str = C.onnx_to_trt_op(onnx_model.SerializeToString(), # type: ignore[attr-defined] _get_output_shapes(onnx_model.graph.output), max_batch_size, max_workspace_size, @@ -96,7 +96,7 @@ def transform_caffe2_net( for k,v in input_shapes.items(): shape_hints[k] = v - pred_net_str = C.transform_trt(pred_net.SerializeToString(), + pred_net_str = C.transform_trt(pred_net.SerializeToString(), # type: ignore[attr-defined] shape_hints, max_batch_size, max_workspace_size, diff --git a/caffe2/python/tt_core.py b/caffe2/python/tt_core.py index 314718b76c9d6..d4f4da6f1c049 100644 --- a/caffe2/python/tt_core.py +++ b/caffe2/python/tt_core.py @@ -180,12 +180,12 @@ def matrix_to_tt(W, inp_sizes, out_sizes, tt_ranks): idx = 0 for i in range(len(inp_sizes)): shape = (tt_ranks[i], inp_sizes[i], out_sizes[i], tt_ranks[i + 1]) - current_core = cores[idx:idx + np.prod(shape)].reshape(shape) + current_core = cores[idx:idx + np.prod(shape)].reshape(shape) # type: ignore[misc] current_core = current_core.transpose((1, 3, 0, 2)) - new_cores[new_cores.shape[0] - idx - np.prod(shape): + new_cores[new_cores.shape[0] - idx - np.prod(shape): # type: ignore[misc] new_cores.shape[0] - idx] \ = current_core.flatten() - idx += np.prod(shape) + idx += np.prod(shape) # type: ignore[assignment] return new_cores diff --git a/caffe2/python/utils.py b/caffe2/python/utils.py index 289d107303fab..41280c315f4da 100644 --- a/caffe2/python/utils.py +++ b/caffe2/python/utils.py @@ -66,8 +66,9 @@ def Caffe2TensorToNumpyArray(tensor): return np.asarray( tensor.int64_data, dtype=np.int64).reshape(tensor.dims) elif tensor.data_type == caffe2_pb2.TensorProto.INT32: + # pb.INT32=>np.int use int32_data return np.asarray( - tensor.int32_data, dtype=np.int).reshape(tensor.dims) # pb.INT32=>np.int use int32_data + tensor.int32_data, dtype=np.int).reshape(tensor.dims) # type: ignore[attr-defined] elif tensor.data_type == caffe2_pb2.TensorProto.INT16: return np.asarray( tensor.int32_data, dtype=np.int16).reshape(tensor.dims) # pb.INT16=>np.int16 use int32_data @@ -92,28 +93,28 @@ def NumpyArrayToCaffe2Tensor(arr, name=None): if name: tensor.name = name if arr.dtype == np.float32: - tensor.data_type = caffe2_pb2.TensorProto.FLOAT + tensor.data_type = caffe2_pb2.TensorProto.FLOAT # type: ignore[assignment] tensor.float_data.extend(list(arr.flatten().astype(float))) elif arr.dtype == np.float64: - tensor.data_type = caffe2_pb2.TensorProto.DOUBLE + tensor.data_type = caffe2_pb2.TensorProto.DOUBLE # type: ignore[assignment] tensor.double_data.extend(list(arr.flatten().astype(np.float64))) elif arr.dtype == np.int64: - tensor.data_type = caffe2_pb2.TensorProto.INT64 + tensor.data_type = caffe2_pb2.TensorProto.INT64 # type: ignore[assignment] tensor.int64_data.extend(list(arr.flatten().astype(np.int64))) - elif arr.dtype == np.int or arr.dtype == np.int32: - tensor.data_type = caffe2_pb2.TensorProto.INT32 - tensor.int32_data.extend(arr.flatten().astype(np.int).tolist()) + elif arr.dtype == np.int or arr.dtype == np.int32: # type: ignore[attr-defined] + tensor.data_type = caffe2_pb2.TensorProto.INT32 # type: ignore[assignment] + tensor.int32_data.extend(arr.flatten().astype(np.int).tolist()) # type: ignore[attr-defined] elif arr.dtype == np.int16: - tensor.data_type = caffe2_pb2.TensorProto.INT16 + tensor.data_type = caffe2_pb2.TensorProto.INT16 # type: ignore[assignment] tensor.int32_data.extend(list(arr.flatten().astype(np.int16))) # np.int16=>pb.INT16 use int32_data elif arr.dtype == np.uint16: - tensor.data_type = caffe2_pb2.TensorProto.UINT16 + tensor.data_type = caffe2_pb2.TensorProto.UINT16 # type: ignore[assignment] tensor.int32_data.extend(list(arr.flatten().astype(np.uint16))) # np.uint16=>pb.UNIT16 use int32_data elif arr.dtype == np.int8: - tensor.data_type = caffe2_pb2.TensorProto.INT8 + tensor.data_type = caffe2_pb2.TensorProto.INT8 # type: ignore[assignment] tensor.int32_data.extend(list(arr.flatten().astype(np.int8))) # np.int8=>pb.INT8 use int32_data elif arr.dtype == np.uint8: - tensor.data_type = caffe2_pb2.TensorProto.UINT8 + tensor.data_type = caffe2_pb2.TensorProto.UINT8 # type: ignore[assignment] tensor.int32_data.extend(list(arr.flatten().astype(np.uint8))) # np.uint8=>pb.UNIT8 use int32_data else: # TODO: complete the data type: bool, float16, byte, string @@ -379,7 +380,7 @@ def EnumClassKeyVals(cls): # cls can only be derived from object assert type(cls) == type # Enum attribute keys are all capitalized and values are strings - enum = {} + enum = {} # type: ignore[var-annotated] for k in dir(cls): if k == k.upper(): v = getattr(cls, k) diff --git a/caffe2/python/workspace.py b/caffe2/python/workspace.py index ea546cb30a1be..4e86003bd4672 100644 --- a/caffe2/python/workspace.py +++ b/caffe2/python/workspace.py @@ -42,7 +42,7 @@ GetStats = C.get_stats CreateOfflineTensor = C.create_offline_tensor -operator_tracebacks = defaultdict(dict) +operator_tracebacks = defaultdict(dict) # type: ignore[var-annotated] is_asan = C.is_asan has_fbgemm = C.has_fbgemm @@ -59,7 +59,7 @@ GetCuDNNVersion = C.get_cudnn_version def GetGpuPeerAccessPattern(): - return np.asarray(C.get_cuda_peer_access_pattern()) + return np.asarray(C.get_cuda_peer_access_pattern()) # type: ignore[attr-defined] GetDeviceProperties = C.get_device_properties GetGPUMemoryInfo = C.get_gpu_memory_info @@ -78,7 +78,7 @@ def GetGpuPeerAccessPattern(): GetHIPVersion = C.get_hip_version def GetGpuPeerAccessPattern(): - return np.asarray(C.get_hip_peer_access_pattern()) + return np.asarray(C.get_hip_peer_access_pattern()) # type: ignore[attr-defined] GetDeviceProperties = C.get_device_properties GetGPUMemoryInfo = C.get_gpu_memory_info @@ -88,10 +88,10 @@ def GetGpuPeerAccessPattern(): GpuDeviceType = caffe2_pb2.CUDA # pyre-fixme[9]: incompatible type assignment NumGpuDevices = lambda: 0 # noqa - GetDeviceProperties = lambda x: None # noqa + GetDeviceProperties = lambda x: None # noqa # type: ignore[assignment, assignment, return-value] GetGpuPeerAccessPattern = lambda: np.array([]) # noqa # pyre-fixme[9]: incompatible type assignment - GetGPUMemoryInfo = lambda: None # noqa + GetGPUMemoryInfo = lambda: None # noqa # type: ignore[misc, misc, assignment] IsNUMAEnabled = C.is_numa_enabled GetNumNUMANodes = C.get_num_numa_nodes @@ -100,7 +100,7 @@ def GetGpuPeerAccessPattern(): def FillRandomNetworkInputs(net, input_dims, input_types): - C.fill_random_network_inputs(net.Proto().SerializeToString(), input_dims, input_types) + C.fill_random_network_inputs(net.Proto().SerializeToString(), input_dims, input_types) # type: ignore[attr-defined] def _GetFreeFlaskPort(): @@ -173,11 +173,11 @@ def StringifyProto(obj): def ResetWorkspace(root_folder=None): if root_folder is None: # Reset the workspace, but keep the current root folder setting. - return C.reset_workspace(C.root_folder()) + return C.reset_workspace(C.root_folder()) # type: ignore[attr-defined] else: if not os.path.exists(root_folder): os.makedirs(root_folder) - return C.reset_workspace(root_folder) + return C.reset_workspace(root_folder) # type: ignore[attr-defined] def CreateNet(net, overwrite=False, input_blobs=None): @@ -187,27 +187,27 @@ def CreateNet(net, overwrite=False, input_blobs=None): for input_blob in input_blobs: C.create_blob(input_blob) return CallWithExceptionIntercept( - C.create_net, - C.Workspace.current._last_failed_op_net_position, + C.create_net, # type: ignore[attr-defined] + C.Workspace.current._last_failed_op_net_position, # type: ignore[attr-defined] GetNetName(net), StringifyProto(net), overwrite, ) def Predictor(init_net, predict_net): - return C.Predictor(StringifyProto(init_net), StringifyProto(predict_net)) + return C.Predictor(StringifyProto(init_net), StringifyProto(predict_net)) # type: ignore[attr-defined] def GetOperatorCost(operator, blobs): - return C.get_operator_cost(StringifyProto(operator), blobs) + return C.get_operator_cost(StringifyProto(operator), blobs) # type: ignore[attr-defined] def RunOperatorOnce(operator): - return C.run_operator_once(StringifyProto(operator)) + return C.run_operator_once(StringifyProto(operator)) # type: ignore[attr-defined] def RunOperatorMultiple(operator, num_runs): - return C.run_operator_multiple(StringifyProto(operator), num_runs) + return C.run_operator_multiple(StringifyProto(operator), num_runs) # type: ignore[attr-defined] def RunOperatorsOnce(operators): @@ -219,7 +219,7 @@ def RunOperatorsOnce(operators): def ClearGlobalNetObserver(): - return C.clear_global_net_observer() + return C.clear_global_net_observer() # type: ignore[attr-defined] def CallWithExceptionIntercept(func, op_id_fetcher, net_name, *args, **kwargs): @@ -242,8 +242,8 @@ def CallWithExceptionIntercept(func, op_id_fetcher, net_name, *args, **kwargs): def RunNetOnce(net): return CallWithExceptionIntercept( - C.run_net_once, - C.Workspace.current._last_failed_op_net_position, + C.run_net_once, # type: ignore[attr-defined] + C.Workspace.current._last_failed_op_net_position, # type: ignore[attr-defined] GetNetName(net), StringifyProto(net), ) @@ -260,8 +260,8 @@ def RunNet(name, num_iter=1, allow_fail=False): True or an exception. """ return CallWithExceptionIntercept( - C.run_net, - C.Workspace.current._last_failed_op_net_position, + C.run_net, # type: ignore[attr-defined] + C.Workspace.current._last_failed_op_net_position, # type: ignore[attr-defined] GetNetName(name), StringifyNetName(name), num_iter, allow_fail, ) @@ -272,7 +272,7 @@ def RunPlan(plan_or_step): import caffe2.python.core as core if isinstance(plan_or_step, core.ExecutionStep): plan_or_step = core.Plan(plan_or_step) - return C.run_plan(StringifyProto(plan_or_step)) + return C.run_plan(StringifyProto(plan_or_step)) # type: ignore[attr-defined] def RunPlanInBackground(plan_or_step): @@ -280,7 +280,7 @@ def RunPlanInBackground(plan_or_step): import caffe2.python.core as core if isinstance(plan_or_step, core.ExecutionStep): plan_or_step = core.Plan(plan_or_step) - return C.run_plan_in_background(StringifyProto(plan_or_step)) + return C.run_plan_in_background(StringifyProto(plan_or_step)) # type: ignore[attr-defined] def InferShapesAndTypes(nets, blob_dimensions=None, nets_proto=False, @@ -302,13 +302,13 @@ def InferShapesAndTypes(nets, blob_dimensions=None, nets_proto=False, net_protos = [StringifyProto(n.Proto()) for n in nets] if blob_dimensions is None: assert blob_types is None - blobdesc_prototxt = C.infer_shapes_and_types_from_workspace(net_protos) + blobdesc_prototxt = C.infer_shapes_and_types_from_workspace(net_protos) # type: ignore[attr-defined] elif blob_types is None: - blobdesc_prototxt = C.infer_shapes_and_types_from_map( + blobdesc_prototxt = C.infer_shapes_and_types_from_map( # type: ignore[attr-defined] net_protos, blob_dimensions ) else: - blobdesc_prototxt = C.infer_shapes_and_types_from_map( + blobdesc_prototxt = C.infer_shapes_and_types_from_map( # type: ignore[attr-defined] net_protos, blob_dimensions, blob_types ) blobdesc_proto = caffe2_pb2.TensorShapes() @@ -383,7 +383,7 @@ def FetchBlob(name): Returns: Fetched blob (numpy array or string) if successful """ - result = C.fetch_blob(StringifyBlobName(name)) + result = C.fetch_blob(StringifyBlobName(name)) # type: ignore[attr-defined] if isinstance(result, tuple): raise TypeError( "Use FetchInt8Blob to fetch Int8 Blob {}".format( @@ -414,7 +414,7 @@ def FetchInt8Blob(name): scale: float, fake quantization scale zero_point: int, fake quantization offset """ - result = C.fetch_blob(StringifyBlobName(name)) + result = C.fetch_blob(StringifyBlobName(name)) # type: ignore[attr-defined] assert isinstance(result, tuple), \ 'You are not fetching an Int8Blob {}. Please use FetchBlob'.format( StringifyBlobName(name)) @@ -429,7 +429,7 @@ def FetchInt8BlobRealVal(name): Returns: real value representation of int8 numpy array """ - result = C.fetch_blob(StringifyBlobName(name)) + result = C.fetch_blob(StringifyBlobName(name)) # type: ignore[attr-defined] assert isinstance(result, tuple), \ 'You are not fetching an Int8Blob {}. Please use FetchBlob'.format( StringifyBlobName(name)) @@ -456,7 +456,7 @@ def _Workspace_fetch_int8_blob(ws, name): return Int8Tensor(*result) -C.Workspace.fetch_int8_blob = _Workspace_fetch_int8_blob +C.Workspace.fetch_int8_blob = _Workspace_fetch_int8_blob # type: ignore[assignment] def ApplyTransform(transform_key, net): @@ -470,7 +470,7 @@ def ApplyTransform(transform_key, net): Transformed NetDef protobuf object. """ transformed_net = caffe2_pb2.NetDef() - transformed_str = C.apply_transform( + transformed_str = C.apply_transform( # type: ignore[attr-defined] str(transform_key).encode('utf-8'), net.SerializeToString(), ) @@ -509,7 +509,7 @@ def ApplyTransformIfFaster(transform_key, net, init_net, **kwargs): if 'improvement_threshold' in kwargs else 1.01 transformed_net = caffe2_pb2.NetDef() - transformed_str = C.apply_transform_if_faster( + transformed_str = C.apply_transform_if_faster( # type: ignore[attr-defined] str(transform_key).encode('utf-8'), net.SerializeToString(), init_net.SerializeToString(), @@ -582,7 +582,7 @@ def WorkspaceGuard(workspace_name): current = CurrentWorkspace() SwitchWorkspace(workspace_name, True) yield - SwitchWorkspace(current) + SwitchWorkspace(current) # type: ignore[call-overload] def StartImmediate(i_know=False): @@ -704,7 +704,7 @@ def _Workspace_feed_blob(ws, name, arr, device_option=None): arr = utils.Caffe2TensorToNumpyArray(arr) if type(arr) is np.ndarray and arr.dtype.kind in 'SU': # Plain NumPy strings are weird, let's use objects instead - arr = arr.astype(np.object) + arr = arr.astype(np.object) # type: ignore[attr-defined] if device_option is None: device_option = scope.CurrentDeviceScope() @@ -730,10 +730,10 @@ def _Workspace_remove_blob(ws, blob): Workspace = C.Workspace -Workspace.create_net = _Workspace_create_net_with_exception_intercept -Workspace.run = _Workspace_run -Workspace.feed_blob = _Workspace_feed_blob -Workspace.remove_blob = _Workspace_remove_blob +Workspace.create_net = _Workspace_create_net_with_exception_intercept # type: ignore[assignment] +Workspace.run = _Workspace_run # type: ignore[assignment] +Workspace.feed_blob = _Workspace_feed_blob # type: ignore[assignment] +Workspace.remove_blob = _Workspace_remove_blob # type: ignore[assignment] # C.Blob methods. @@ -745,7 +745,7 @@ def _Blob_feed(blob, arg, device_option=None): if isinstance(arg, torch.Tensor): assert device_option is None, \ "device_option doesn't make sense with PyTorch tensors" - handle = torch._C._tensor_impl_raw_handle(arg) + handle = torch._C._tensor_impl_raw_handle(arg) # type: ignore[attr-defined] blob._wrap_tensor_impl(handle) return True # _feed() returns True for some reason if device_option is not None: @@ -753,7 +753,7 @@ def _Blob_feed(blob, arg, device_option=None): return blob._feed(arg, device_option) -C.Blob.feed = _Blob_feed +C.Blob.feed = _Blob_feed # type: ignore[assignment] def _Tensor_to_torch(tensor): @@ -766,9 +766,9 @@ def _Tensor_to_torch(tensor): # avoiding circular dependency import torch handle = tensor._tensor_impl_raw_handle() - return torch._C._wrap_tensor_impl(handle) + return torch._C._wrap_tensor_impl(handle) # type: ignore[attr-defined] -C.TensorCPU.to_torch = _Tensor_to_torch +C.TensorCPU.to_torch = _Tensor_to_torch # type: ignore[assignment] def _Blob_to_torch(blob): @@ -776,4 +776,4 @@ def _Blob_to_torch(blob): raise RuntimeError("Blob has to be a tensor") return blob.as_tensor().to_torch() -C.Blob.to_torch = _Blob_to_torch +C.Blob.to_torch = _Blob_to_torch # type: ignore[assignment] diff --git a/caffe2/python/workspace_test.py b/caffe2/python/workspace_test.py index 7f4e235cbe4fb..3db21f77a8c92 100644 --- a/caffe2/python/workspace_test.py +++ b/caffe2/python/workspace_test.py @@ -44,7 +44,7 @@ def testRunOperatorOnce(self): self.assertEqual(workspace.HasBlob("testblob"), True) blobs = workspace.Blobs() self.assertEqual(len(blobs), 1) - self.assertEqual(blobs[0], "testblob") + self.assertEqual(blobs[0], "testblob") # type: ignore[index] def testGetOperatorCost(self): op = core.CreateOperator( @@ -113,20 +113,20 @@ def testTensorAccess(self): """ test in-place modification """ ws.create_blob("tensor").feed(np.array([1.1, 1.2, 1.3])) tensor = ws.blobs["tensor"].tensor() - tensor.data[0] = 3.3 + tensor.data[0] = 3.3 # type: ignore[attr-defined] val = np.array([3.3, 1.2, 1.3]) - np.testing.assert_array_equal(tensor.data, val) + np.testing.assert_array_equal(tensor.data, val) # type: ignore[attr-defined] np.testing.assert_array_equal(ws.blobs["tensor"].fetch(), val) """ test in-place initialization """ tensor.init([2, 3], core.DataType.INT32) for x in range(2): for y in range(3): - tensor.data[x, y] = 0 - tensor.data[1, 1] = 100 + tensor.data[x, y] = 0 # type: ignore[attr-defined] + tensor.data[1, 1] = 100 # type: ignore[attr-defined] val = np.zeros([2, 3], dtype=np.int32) val[1, 1] = 100 - np.testing.assert_array_equal(tensor.data, val) + np.testing.assert_array_equal(tensor.data, val) # type: ignore[attr-defined] np.testing.assert_array_equal(ws.blobs["tensor"].fetch(), val) """ strings cannot be initialized from python """ @@ -134,22 +134,22 @@ def testTensorAccess(self): tensor.init([3, 4], core.DataType.STRING) """ feed (copy) data into tensor """ - val = np.array([[b'abc', b'def'], [b'ghi', b'jkl']], dtype=np.object) - tensor.feed(val) - self.assertEquals(tensor.data[0, 0], b'abc') + val = np.array([[b'abc', b'def'], [b'ghi', b'jkl']], dtype=np.object) # type: ignore[attr-defined] + tensor.feed(val) # type: ignore[attr-defined] + self.assertEquals(tensor.data[0, 0], b'abc') # type: ignore[attr-defined] np.testing.assert_array_equal(ws.blobs["tensor"].fetch(), val) val = np.array([1.1, 10.2]) - tensor.feed(val) + tensor.feed(val) # type: ignore[attr-defined] val[0] = 5.2 - self.assertEquals(tensor.data[0], 1.1) + self.assertEquals(tensor.data[0], 1.1) # type: ignore[attr-defined] """ fetch (copy) data from tensor """ val = np.array([1.1, 1.2]) - tensor.feed(val) - val2 = tensor.fetch() - tensor.data[0] = 5.2 - val3 = tensor.fetch() + tensor.feed(val) # type: ignore[attr-defined] + val2 = tensor.fetch() # type: ignore[attr-defined] + tensor.data[0] = 5.2 # type: ignore[attr-defined] + val3 = tensor.fetch() # type: ignore[attr-defined] np.testing.assert_array_equal(val, val2) self.assertEquals(val3[0], 5.2) @@ -180,7 +180,7 @@ def testFetchFeedBlobViaBlobReference(self): np.testing.assert_array_equal(fetched_again, 2.0) def testFetchFeedBlobTypes(self): - for dtype in [np.float16, np.float32, np.float64, np.bool, + for dtype in [np.float16, np.float32, np.float64, np.bool, # type: ignore[attr-defined] np.int8, np.int16, np.int32, np.int64, np.uint8, np.uint16]: try: @@ -196,16 +196,16 @@ def testFetchFeedBlobTypes(self): def testFetchFeedBlobBool(self): """Special case for bool to ensure coverage of both true and false.""" - data = np.zeros((2, 3, 4)).astype(np.bool) - data.flat[::2] = True + data = np.zeros((2, 3, 4)).astype(np.bool) # type: ignore[attr-defined] + data.flat[::2] = True # type: ignore[index] self.assertEqual(workspace.FeedBlob("testblob_types", data), True) fetched_back = workspace.FetchBlob("testblob_types") self.assertEqual(fetched_back.shape, (2, 3, 4)) - self.assertEqual(fetched_back.dtype, np.bool) + self.assertEqual(fetched_back.dtype, np.bool) # type: ignore[attr-defined] np.testing.assert_array_equal(fetched_back, data) def testGetBlobSizeBytes(self): - for dtype in [np.float16, np.float32, np.float64, np.bool, + for dtype in [np.float16, np.float32, np.float64, np.bool, # type: ignore[attr-defined] np.int8, np.int16, np.int32, np.int64, np.uint8, np.uint16]: data = np.random.randn(2, 3).astype(dtype) @@ -314,7 +314,7 @@ def testTorchInterop(self): class TestMultiWorkspaces(unittest.TestCase): def setUp(self): - workspace.SwitchWorkspace("default") + workspace.SwitchWorkspace("default") # type: ignore[call-overload] workspace.ResetWorkspace() def testCreateWorkspace(self): @@ -326,12 +326,12 @@ def testCreateWorkspace(self): self.assertEqual(workspace.HasBlob("testblob"), True) self.assertEqual(workspace.SwitchWorkspace("test", True), None) self.assertEqual(workspace.HasBlob("testblob"), False) - self.assertEqual(workspace.SwitchWorkspace("default"), None) + self.assertEqual(workspace.SwitchWorkspace("default"), None) # type: ignore[call-overload] self.assertEqual(workspace.HasBlob("testblob"), True) try: # The following should raise an error. - workspace.SwitchWorkspace("non-existing") + workspace.SwitchWorkspace("non-existing") # type: ignore[call-overload] # so this should never happen. self.assertEqual(True, False) except RuntimeError: @@ -468,7 +468,7 @@ def testEnforce(self): class TestCWorkspace(htu.HypothesisTestCase): def test_net_execution(self): ws = workspace.C.Workspace() - self.assertEqual(ws.nets, {}) + self.assertEqual(ws.nets, {}) # type: ignore[attr-defined] self.assertEqual(ws.blobs, {}) net = core.Net("test-net") net.ConstantFill([], "testblob", shape=[1, 2, 3, 4], value=1.0) @@ -481,10 +481,10 @@ def test_net_execution(self): # Overwrite can also be a kwarg. ws.create_net(net, overwrite=True) self.assertIn("testblob", ws.blobs) - self.assertEqual(len(ws.nets), 1) + self.assertEqual(len(ws.nets), 1) # type: ignore[attr-defined] net_name = net.Proto().name self.assertIn("test-net", net_name) - net = ws.nets[net_name].run() + net = ws.nets[net_name].run() # type: ignore[attr-defined] blob = ws.blobs["testblob"] np.testing.assert_array_equal( np.ones((1, 2, 3, 4), dtype=np.float32), @@ -509,7 +509,7 @@ def test_net_run(self, blob_name, net_name, value): net.ConstantFill([], [blob_name], shape=[1], value=value) ws.run(net) self.assertIn(blob_name, ws.blobs) - self.assertNotIn(net_name, ws.nets) + self.assertNotIn(net_name, ws.nets) # type: ignore[attr-defined] np.testing.assert_allclose( [value], ws.blobs[blob_name].fetch(), atol=1e-4, rtol=1e-4) @@ -527,7 +527,7 @@ def test_plan_run(self, blob_name, plan_name, net_name, value): ws.run(plan) self.assertIn(blob_name, ws.blobs) - self.assertIn(net.Name(), ws.nets) + self.assertIn(net.Name(), ws.nets) # type: ignore[attr-defined] np.testing.assert_allclose( [value], ws.blobs[blob_name].fetch(), atol=1e-4, rtol=1e-4) @@ -540,7 +540,7 @@ def test_net_create(self, blob_name, net_name, value): net.ConstantFill([], [blob_name], shape=[1], value=value) ws.create_net(net).run() self.assertIn(blob_name, ws.blobs) - self.assertIn(net.Name(), ws.nets) + self.assertIn(net.Name(), ws.nets) # type: ignore[attr-defined] np.testing.assert_allclose( [value], ws.blobs[blob_name].fetch(), atol=1e-4, rtol=1e-4) @@ -554,7 +554,7 @@ def test_array_serde(self, name, value, device_option): blob = ws.blobs[name] np.testing.assert_equal(value, ws.blobs[name].fetch()) serde_blob = ws.create_blob("{}_serde".format(name)) - serde_blob.deserialize(blob.serialize(name)) + serde_blob.deserialize(blob.serialize(name)) # type: ignore[attr-defined] np.testing.assert_equal(value, serde_blob.fetch()) @given(name=st.text(), value=st.text()) @@ -566,7 +566,7 @@ def test_string_serde(self, name, value): blob = ws.blobs[name] self.assertEqual(value, ws.blobs[name].fetch()) serde_blob = ws.create_blob("{}_serde".format(name)) - serde_blob.deserialize(blob.serialize(name)) + serde_blob.deserialize(blob.serialize(name)) # type: ignore[attr-defined] self.assertEqual(value, serde_blob.fetch()) def test_exception(self): @@ -715,7 +715,7 @@ def multi_input(self, x: torch.Tensor, y: torch.Tensor, z: int = 2) -> torch.Ten return x + y + z @torch.jit.script_method - def multi_input_tensor_list(self, tensor_list): # pyre-ignore: PT type annotations + def multi_input_tensor_list(self, tensor_list): # pyre-ignore: PT type annotations # type: ignore[name-defined, name-defined, name-defined] # type: (List[Tensor]) -> Tensor return tensor_list[0] + tensor_list[1] + tensor_list[2] @@ -813,7 +813,7 @@ def testSerialization(self): try: shutil.rmtree(tmpdir) except OSError as e: - if e.errno != errno.ENOENT: + if e.errno != errno.ENOENT: # type: ignore[name-defined] raise diff --git a/caffe2/quantization/server/batch_matmul_dnnlowp_op_test.py b/caffe2/quantization/server/batch_matmul_dnnlowp_op_test.py index 198c6f972894e..277f8e3975425 100644 --- a/caffe2/quantization/server/batch_matmul_dnnlowp_op_test.py +++ b/caffe2/quantization/server/batch_matmul_dnnlowp_op_test.py @@ -26,7 +26,7 @@ class DNNLowPBatchMatMulOpTest(hu.HypothesisTestCase): n=st.integers(4, 32), k=st.integers(4, 32), batch_size=st.integers(0, 4), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_dnnlowp_batch_matmul_int(self, m, n, k, batch_size, gc, dc): @@ -122,7 +122,7 @@ def test_dnnlowp_batch_matmul_int(self, m, n, k, batch_size, gc, dc): A_quantized=st.booleans(), B_quantized=st.booleans(), out_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=2000) def test_dnnlowp_batch_matmul_int_constant_B( @@ -184,7 +184,7 @@ def test_dnnlowp_batch_matmul_int_constant_B( for trans_a, trans_b in product([0, 1], [0, 1]): Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("BatchMatMul", ""), diff --git a/caffe2/quantization/server/batch_permutation_dnnlowp_op_test.py b/caffe2/quantization/server/batch_permutation_dnnlowp_op_test.py index 1d3fd2cc369d3..c286979d09a4f 100644 --- a/caffe2/quantization/server/batch_permutation_dnnlowp_op_test.py +++ b/caffe2/quantization/server/batch_permutation_dnnlowp_op_test.py @@ -12,7 +12,7 @@ class DNNLowPBatchPermutationOpTest(hu.HypothesisTestCase): - @given(N=st.integers(min_value=1, max_value=100), **hu.gcs_cpu_only) + @given(N=st.integers(min_value=1, max_value=100), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(max_examples=10, deadline=None) def test_batch_permutation(self, N, gc, dc): X = np.round(np.random.rand(N, 10, 20, 3) * 255).astype(np.float32) diff --git a/caffe2/quantization/server/channel_shuffle_dnnlowp_op_test.py b/caffe2/quantization/server/channel_shuffle_dnnlowp_op_test.py index 24a2269cc850a..adc23ef8b324b 100644 --- a/caffe2/quantization/server/channel_shuffle_dnnlowp_op_test.py +++ b/caffe2/quantization/server/channel_shuffle_dnnlowp_op_test.py @@ -17,7 +17,7 @@ class DNNLowPChannelShuffleOpsTest(hu.HypothesisTestCase): groups=st.sampled_from([1, 4, 8, 9]), n=st.integers(0, 2), order=st.sampled_from(["NCHW", "NHWC"]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_channel_shuffle(self, channels_per_group, groups, n, order, gc, dc): @@ -69,7 +69,7 @@ def channel_shuffle_ref(X): @given( channels_per_group=st.integers(min_value=32, max_value=128), n=st.integers(0, 2), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_channel_shuffle_fast_path(self, channels_per_group, n, gc, dc): diff --git a/caffe2/quantization/server/compute_equalization_scale_test.py b/caffe2/quantization/server/compute_equalization_scale_test.py index 06c7f29807795..1ebc4dcbfd5b5 100644 --- a/caffe2/quantization/server/compute_equalization_scale_test.py +++ b/caffe2/quantization/server/compute_equalization_scale_test.py @@ -27,7 +27,7 @@ class TestComputeEqualizationScaleOp(hu.HypothesisTestCase): n=st.integers(1, 50), k=st.integers(1, 50), rnd_seed=st.integers(1, 5), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_compute_equalization_scale(self, m, n, k, rnd_seed, gc, dc): np.random.seed(rnd_seed) diff --git a/caffe2/quantization/server/concat_dnnlowp_op_test.py b/caffe2/quantization/server/concat_dnnlowp_op_test.py index fc7e897993d4e..fd3f8be2731eb 100644 --- a/caffe2/quantization/server/concat_dnnlowp_op_test.py +++ b/caffe2/quantization/server/concat_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPConcatOpTest(hu.HypothesisTestCase): axis=st.integers(0, 1), in_quantized=st.booleans(), out_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_concat_int( self, dim1, dim2, axis, in_quantized, out_quantized, gc, dc diff --git a/caffe2/quantization/server/conv_depthwise_dnnlowp_op_test.py b/caffe2/quantization/server/conv_depthwise_dnnlowp_op_test.py index a605ea3fc49ea..f58374bf282da 100644 --- a/caffe2/quantization/server/conv_depthwise_dnnlowp_op_test.py +++ b/caffe2/quantization/server/conv_depthwise_dnnlowp_op_test.py @@ -32,7 +32,7 @@ class DNNLowPOpConvDepthWiseTest(hu.HypothesisTestCase): preserve_weight_sparsity=st.booleans(), quantize_groupwise=st.booleans(), relu=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_dnnlowp_depthwise_3x3_conv( @@ -74,7 +74,7 @@ def test_dnnlowp_depthwise_3x3_conv( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] if relu: op_engine_list = [ @@ -187,7 +187,7 @@ def test_dnnlowp_depthwise_3x3_conv( preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), quantize_groupwise=st.just(True), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_dnnlowp_depthwise_3x3x3_conv( @@ -231,7 +231,7 @@ def test_dnnlowp_depthwise_3x3x3_conv( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op = "ConvRelu" if fuse_relu else "Conv" op_engine_list = [(op, ""), (op, "DNNLOWP"), ("Int8" + op, "DNNLOWP")] diff --git a/caffe2/quantization/server/conv_dnnlowp_acc16_op_test.py b/caffe2/quantization/server/conv_dnnlowp_acc16_op_test.py index 68c14b69f058a..fed181091e618 100644 --- a/caffe2/quantization/server/conv_dnnlowp_acc16_op_test.py +++ b/caffe2/quantization/server/conv_dnnlowp_acc16_op_test.py @@ -42,7 +42,7 @@ class DNNLowPOpConvAcc16OpTest(hu.HypothesisTestCase): share_col_buffer=st.booleans(), preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_dnnlowp_conv_acc16_int( @@ -115,7 +115,7 @@ def test_dnnlowp_conv_acc16_int( b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), @@ -219,7 +219,7 @@ def test_dnnlowp_conv_acc16_int( share_col_buffer=st.booleans(), preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=10000) def test_dnnlowp_conv_acc16_outlier( @@ -282,7 +282,7 @@ def test_dnnlowp_conv_acc16_outlier( b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), diff --git a/caffe2/quantization/server/conv_dnnlowp_op_test.py b/caffe2/quantization/server/conv_dnnlowp_op_test.py index 11cd12a4d5bc1..126b615a4139d 100644 --- a/caffe2/quantization/server/conv_dnnlowp_op_test.py +++ b/caffe2/quantization/server/conv_dnnlowp_op_test.py @@ -37,7 +37,7 @@ class DNNLowPOpConvTest(hu.HypothesisTestCase): share_col_buffer=st.booleans(), preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_dnnlowp_conv_int( @@ -79,7 +79,7 @@ def test_dnnlowp_conv_int( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), @@ -207,7 +207,7 @@ def test_dnnlowp_conv_int( batch_size=st.integers(0, 3), order=st.sampled_from(["NCHW", "NHWC"]), share_col_buffer=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_dnnlowp_conv_relu_int( @@ -242,7 +242,7 @@ def test_dnnlowp_conv_relu_int( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), @@ -342,7 +342,7 @@ def _test_dnnlowp_nd_int( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [("Conv", ""), ("Conv", "DNNLOWP_16"), ("Int8Conv", "DNNLOWP")] @@ -451,7 +451,7 @@ def _test_dnnlowp_nd_int( batch_size=st.integers(0, 2), order=st.sampled_from(["NCHW", "NHWC"]), prepack_weight=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None, max_examples=50) def test_dnnlowp_conv3d_int( @@ -499,7 +499,7 @@ def test_dnnlowp_conv3d_int( batch_size=st.integers(0, 2), order=st.sampled_from(["NCHW", "NHWC"]), prepack_weight=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_conv1d_int( self, diff --git a/caffe2/quantization/server/conv_groupwise_dnnlowp_acc16_op_test.py b/caffe2/quantization/server/conv_groupwise_dnnlowp_acc16_op_test.py index 715b6f8c01a89..9b13812ad2e7f 100644 --- a/caffe2/quantization/server/conv_groupwise_dnnlowp_acc16_op_test.py +++ b/caffe2/quantization/server/conv_groupwise_dnnlowp_acc16_op_test.py @@ -41,7 +41,7 @@ class GroupWiseDNNLowPOpConvAcc16OpTest(hu.HypothesisTestCase): share_col_buffer=st.booleans(), preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None) def test_groupwise_dnnlowp_conv_acc16_int( @@ -118,7 +118,7 @@ def test_groupwise_dnnlowp_conv_acc16_int( b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), @@ -194,7 +194,7 @@ def test_groupwise_dnnlowp_conv_acc16_int( prepack_weight=st.booleans(), nbits_in_non_outlier=st.sampled_from((0, 1, 6, 8)), share_col_buffer=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_groupwise_dnnlowp_conv_acc16_outlier( self, @@ -251,7 +251,7 @@ def test_groupwise_dnnlowp_conv_acc16_outlier( b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), diff --git a/caffe2/quantization/server/conv_groupwise_dnnlowp_op_test.py b/caffe2/quantization/server/conv_groupwise_dnnlowp_op_test.py index 99e914c294b96..bdfbeaefa5049 100644 --- a/caffe2/quantization/server/conv_groupwise_dnnlowp_op_test.py +++ b/caffe2/quantization/server/conv_groupwise_dnnlowp_op_test.py @@ -35,7 +35,7 @@ class GroupWiseDNNLowPOpConvTest(hu.HypothesisTestCase): prepack_weight=st.booleans(), preserve_activation_sparsity=st.booleans(), preserve_weight_sparsity=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_groupwise_dnnlowp_conv_int( @@ -76,7 +76,7 @@ def test_groupwise_dnnlowp_conv_int( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), @@ -184,7 +184,7 @@ def test_groupwise_dnnlowp_conv_int( output_channels_per_group=st.integers(2, 16), batch_size=st.integers(0, 3), order=st.sampled_from(["NCHW", "NHWC"]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_groupwise_dnnlowp_conv_relu_int( @@ -219,7 +219,7 @@ def test_groupwise_dnnlowp_conv_relu_int( ) Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("Conv", ""), diff --git a/caffe2/quantization/server/dequantize_dnnlowp_op_test.py b/caffe2/quantization/server/dequantize_dnnlowp_op_test.py index 5694a553e744e..d42205f02e219 100644 --- a/caffe2/quantization/server/dequantize_dnnlowp_op_test.py +++ b/caffe2/quantization/server/dequantize_dnnlowp_op_test.py @@ -15,7 +15,7 @@ class DNNLowPDequantizeOpTest(hu.HypothesisTestCase): - @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) + @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_dequantize(self, size, is_empty, gc, dc): if is_empty: size = 0 diff --git a/caffe2/quantization/server/dnnlowp_test_utils.py b/caffe2/quantization/server/dnnlowp_test_utils.py index 0d56ea6ac1278..a273391b6c424 100644 --- a/caffe2/quantization/server/dnnlowp_test_utils.py +++ b/caffe2/quantization/server/dnnlowp_test_utils.py @@ -215,7 +215,7 @@ def generate_convnd_inputs( if depthwise_convolution and groupwise_quantization: # For depthwise convolution, it's not enough to set input channel 0 # to all X_min to avoid overflow from vpmaddubsw - X_range /= 2 + X_range /= 2 # type: ignore[assignment] X = np.round( np.random.rand(*((batch_size,) + tuple(sizes) + (input_channels,))) * X_range + X_min @@ -391,7 +391,7 @@ def run_conv_or_fc( Output = collections.namedtuple("Output", ["Y", "op_type", "engine", "order"]) else: # FC - Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) + Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) # type: ignore[no-redef] # We run DNNLOWP ops multiple times to test their first runs that # do caching so exercises different code paths from the subsequent @@ -416,7 +416,7 @@ def run_conv_or_fc( if order: outputs.append(Output(Y=Y, op_type=op_type, engine=engine, order=order)) else: - outputs.append(Output(Y=Y, op_type=op_type, engine=engine)) + outputs.append(Output(Y=Y, op_type=op_type, engine=engine)) # type: ignore[call-arg] # workspace.CreateNet + workspace.RunNet reuses the same operator if engine != "": @@ -437,4 +437,4 @@ def run_conv_or_fc( if order: outputs.append(Output(Y=Y, op_type=op_type, engine=engine, order=order)) else: - outputs.append(Output(Y=Y, op_type=op_type, engine=engine)) + outputs.append(Output(Y=Y, op_type=op_type, engine=engine)) # type: ignore[call-arg] diff --git a/caffe2/quantization/server/elementwise_add_dnnlowp_op_test.py b/caffe2/quantization/server/elementwise_add_dnnlowp_op_test.py index 75bd2f8e4d440..08127f5153448 100644 --- a/caffe2/quantization/server/elementwise_add_dnnlowp_op_test.py +++ b/caffe2/quantization/server/elementwise_add_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPAddOpTest(hu.HypothesisTestCase): in_quantized=st.booleans(), out_quantized=st.booleans(), in_place=st.sampled_from([(False, False), (True, False), (False, True)]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_elementwise_add_int( self, N, is_empty, in_quantized, out_quantized, in_place, gc, dc @@ -102,7 +102,7 @@ def test_dnnlowp_elementwise_add_int( check_quantized_results_close(outputs) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_elementwise_add_broadcast(self, gc, dc): # Set broadcast and no axis, i.e. broadcasting last dimensions. min_ = -100 @@ -144,7 +144,7 @@ def test_dnnlowp_elementwise_add_broadcast(self, gc, dc): check_quantized_results_close(outputs) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_elementwise_add_broadcast_axis(self, gc, dc): for bdim, axis in [ ((3, 4), 1), # broadcasting intermediate dimensions diff --git a/caffe2/quantization/server/elementwise_linear_dnnlowp_op_test.py b/caffe2/quantization/server/elementwise_linear_dnnlowp_op_test.py index af1cd0f80684a..4cbc7d96b0b7e 100644 --- a/caffe2/quantization/server/elementwise_linear_dnnlowp_op_test.py +++ b/caffe2/quantization/server/elementwise_linear_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPElementwiseLinearOpTest(hu.HypothesisTestCase): empty_batch=st.booleans(), in_quantized=st.booleans(), out_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_elementwise_linear_int( self, N, D, empty_batch, in_quantized, out_quantized, gc, dc diff --git a/caffe2/quantization/server/elementwise_mul_dnnlowp_op_test.py b/caffe2/quantization/server/elementwise_mul_dnnlowp_op_test.py index e31b9d179071d..cfe04e4f3429c 100644 --- a/caffe2/quantization/server/elementwise_mul_dnnlowp_op_test.py +++ b/caffe2/quantization/server/elementwise_mul_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPMulOpTest(hu.HypothesisTestCase): in_quantized=st.booleans(), out_quantized=st.booleans(), in_place=st.sampled_from([(False, False), (True, False), (False, True)]), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None) def test_dnnlowp_elementwise_mul_int( @@ -99,7 +99,7 @@ def test_dnnlowp_elementwise_mul_int( check_quantized_results_close(outputs) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None) def test_dnnlowp_elementwise_mul_broadcast(self, gc, dc): # Set broadcast and no axis, i.e. broadcasting last dimensions. @@ -139,7 +139,7 @@ def test_dnnlowp_elementwise_mul_broadcast(self, gc, dc): check_quantized_results_close(outputs) - @given(**hu.gcs_cpu_only) + @given(**hu.gcs_cpu_only) # type: ignore[arg-type] @settings(deadline=None) def test_dnnlowp_elementwise_mul_broadcast_axis(self, gc, dc): for bdim, axis in [ diff --git a/caffe2/quantization/server/elementwise_sum_dnnlowp_op_test.py b/caffe2/quantization/server/elementwise_sum_dnnlowp_op_test.py index faf526b8c48dc..90753874870cd 100644 --- a/caffe2/quantization/server/elementwise_sum_dnnlowp_op_test.py +++ b/caffe2/quantization/server/elementwise_sum_dnnlowp_op_test.py @@ -20,7 +20,7 @@ class DNNLowPOpSumOpTest(hu.HypothesisTestCase): N=st.integers(32, 256), M=st.integers(1, 3), is_empty=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_elementwise_sum_int(self, N, M, is_empty, gc, dc): if is_empty: @@ -84,7 +84,7 @@ def test_dnnlowp_elementwise_sum_int(self, N, M, is_empty, gc, dc): check_quantized_results_close(outputs) # correctness test with no quantization error in inputs - @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) + @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_elementwise_sum_int_inplace(self, N, M, gc, dc): # All inputs have scale 1, so exactly represented after quantization inputs = M * [None] @@ -150,7 +150,7 @@ def test_dnnlowp_elementwise_sum_int_inplace(self, N, M, gc, dc): check_quantized_results_close(outputs) # correctness test with no quantization error in inputs - @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) + @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_elementwise_sum_relu_int(self, N, M, gc, dc): # All inputs have scale 1, so exactly represented after quantization inputs = M * [None] @@ -214,7 +214,7 @@ def test_dnnlowp_elementwise_sum_relu_int(self, N, M, gc, dc): check_quantized_results_close(outputs) # correctness test with no quantization error in inputs - @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) + @given(N=st.integers(32, 256), M=st.integers(1, 3), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_elementwise_sum_relu_int_inplace(self, N, M, gc, dc): # All inputs have scale 1, so exactly represented after quantization inputs = M * [None] diff --git a/caffe2/quantization/server/fully_connected_dnnlowp_acc16_op_test.py b/caffe2/quantization/server/fully_connected_dnnlowp_acc16_op_test.py index 5d77eceb8e042..5258312737eaf 100644 --- a/caffe2/quantization/server/fully_connected_dnnlowp_acc16_op_test.py +++ b/caffe2/quantization/server/fully_connected_dnnlowp_acc16_op_test.py @@ -27,7 +27,7 @@ class DNNLowPFullyConnectedAcc16OpTest(hu.HypothesisTestCase): batch_size=st.sampled_from([0, 32, 64, 128, 256]), in_quantized=st.booleans(), out_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_fully_connected_acc16_int( self, @@ -72,7 +72,7 @@ def test_dnnlowp_fully_connected_acc16_int( b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("FC", ""), @@ -122,7 +122,7 @@ def test_dnnlowp_fully_connected_acc16_int( in_quantized=st.booleans(), out_quantized=st.booleans(), prepack_weight=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_fully_connected_acc16_outlier( self, @@ -167,7 +167,7 @@ def test_dnnlowp_fully_connected_acc16_outlier( # No input quantization error in bias b = np.round(np.random.randn(output_channels)).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("FC", ""), diff --git a/caffe2/quantization/server/fully_connected_dnnlowp_op_test.py b/caffe2/quantization/server/fully_connected_dnnlowp_op_test.py index 3a8b0c14931e5..41b9e868b69ab 100644 --- a/caffe2/quantization/server/fully_connected_dnnlowp_op_test.py +++ b/caffe2/quantization/server/fully_connected_dnnlowp_op_test.py @@ -34,7 +34,7 @@ class DNNLowPFullyConnectedOpTest(hu.HypothesisTestCase): fuse_relu=st.booleans(), output_packed_bias=st.booleans(), use_input_qparam=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_fully_connected_int( self, @@ -96,7 +96,7 @@ def test_dnnlowp_fully_connected_int( b = np.random.randn(output_channels).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [("FC", "")] if fuse_relu: @@ -253,7 +253,7 @@ def test_dnnlowp_fully_connected_int( bias_int32 = self.ws.blobs["B_q32"].fetch() if do_quantize_weight: np.testing.assert_equal( - bias_int32[0], np.round(b / (x_q_param.scale * w_q_param.scale)) + bias_int32[0], np.round(b / (x_q_param.scale * w_q_param.scale)) # type: ignore[union-attr] ) np.testing.assert_equal(bias_int32[0].dtype, np.int32) diff --git a/caffe2/quantization/server/fully_connected_fp16_test.py b/caffe2/quantization/server/fully_connected_fp16_test.py index be1e2c8a1ab5f..a77e5e6753ec3 100644 --- a/caffe2/quantization/server/fully_connected_fp16_test.py +++ b/caffe2/quantization/server/fully_connected_fp16_test.py @@ -24,7 +24,7 @@ class FullyConnectedFP16Test(hu.HypothesisTestCase): output_channels=st.integers(128, 256), batch_size=st.integers(128, 256), empty_batch=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_fully_connected(self, input_channels, output_channels, batch_size, empty_batch, gc, dc): if empty_batch: diff --git a/caffe2/quantization/server/fully_connected_rowwise_dnnlowp_op_test.py b/caffe2/quantization/server/fully_connected_rowwise_dnnlowp_op_test.py index 284ae56d743e6..1cc2d03b0f721 100644 --- a/caffe2/quantization/server/fully_connected_rowwise_dnnlowp_op_test.py +++ b/caffe2/quantization/server/fully_connected_rowwise_dnnlowp_op_test.py @@ -28,7 +28,7 @@ class RowWiseDNNLowPFullyConnectedOpTest(hu.HypothesisTestCase): in_quantized=st.booleans(), out_quantized=st.booleans(), prepack_weight=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_rowwise_dnnlowp_fully_connected_int( self, @@ -85,7 +85,7 @@ def test_rowwise_dnnlowp_fully_connected_int( b = np.random.randn(output_channels).astype(np.float32) Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("FC", ""), diff --git a/caffe2/quantization/server/gather_dnnlowp_op_test.py b/caffe2/quantization/server/gather_dnnlowp_op_test.py index c2c7f35a66d45..646a9b28cb1e1 100644 --- a/caffe2/quantization/server/gather_dnnlowp_op_test.py +++ b/caffe2/quantization/server/gather_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPGatherOpTest(hu.HypothesisTestCase): is_empty=st.booleans(), in_quantized=st.booleans(), out_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_gather(self, dim1, dim2, is_empty, in_quantized, out_quantized, gc, dc): if is_empty: diff --git a/caffe2/quantization/server/group_norm_dnnlowp_op_test.py b/caffe2/quantization/server/group_norm_dnnlowp_op_test.py index 30051d95b59c2..9295a783917fd 100644 --- a/caffe2/quantization/server/group_norm_dnnlowp_op_test.py +++ b/caffe2/quantization/server/group_norm_dnnlowp_op_test.py @@ -26,7 +26,7 @@ class DNNLowPOpGroupNormTest(hu.HypothesisTestCase): in_quantized=st.booleans(), out_quantized=st.booleans(), weight_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_group_norm( self, @@ -51,7 +51,7 @@ def test_dnnlowp_group_norm( beta = np.random.randn(C).astype(np.float32) - 0.5 Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("GroupNorm", ""), diff --git a/caffe2/quantization/server/int8_gen_quant_params_min_max_test.py b/caffe2/quantization/server/int8_gen_quant_params_min_max_test.py index dd27074db5c41..c6c426d7e8a22 100644 --- a/caffe2/quantization/server/int8_gen_quant_params_min_max_test.py +++ b/caffe2/quantization/server/int8_gen_quant_params_min_max_test.py @@ -30,7 +30,7 @@ class TestInt8GenQuantParamsMinMaxOperator(hu.HypothesisTestCase): m=st.integers(10, 10), preserve_sparsity=st.booleans(), rnd_seed=st.integers(1, 5), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_int8_gen_quant_params_min_max_op( self, n, m, preserve_sparsity, rnd_seed, gc, dc diff --git a/caffe2/quantization/server/int8_gen_quant_params_test.py b/caffe2/quantization/server/int8_gen_quant_params_test.py index d208d6f9b575a..396e0e90c703f 100644 --- a/caffe2/quantization/server/int8_gen_quant_params_test.py +++ b/caffe2/quantization/server/int8_gen_quant_params_test.py @@ -39,7 +39,7 @@ class TestInt8GenQuantParamsOperator(hu.HypothesisTestCase): ), preserve_sparsity=st.booleans(), rnd_seed=st.integers(1, 5), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_int8_gen_quant_params_op( self, n, m, k, quantization_kind, preserve_sparsity, rnd_seed, gc, dc diff --git a/caffe2/quantization/server/int8_quant_scheme_blob_fill_test.py b/caffe2/quantization/server/int8_quant_scheme_blob_fill_test.py index 70f9b0c2f1fa5..0dac35b95860f 100644 --- a/caffe2/quantization/server/int8_quant_scheme_blob_fill_test.py +++ b/caffe2/quantization/server/int8_quant_scheme_blob_fill_test.py @@ -22,7 +22,7 @@ class TestInt8QuantSchemeBlobFillOperator(hu.HypothesisTestCase): @given( - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_int8_quant_scheme_blob_fill_op( self, gc, dc diff --git a/caffe2/quantization/server/lstm_unit_dnnlowp_op_test.py b/caffe2/quantization/server/lstm_unit_dnnlowp_op_test.py index bcf06ce0274ea..83c77a84ce24b 100644 --- a/caffe2/quantization/server/lstm_unit_dnnlowp_op_test.py +++ b/caffe2/quantization/server/lstm_unit_dnnlowp_op_test.py @@ -18,7 +18,7 @@ class DNNLowPLSTMUnitOpTest(hu.HypothesisTestCase): N=st.integers(0, 64), D=st.integers(4, 64), forget_bias=st.integers(0, 4), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=10, deadline=None) def test_dnnlowp_lstm_unit(self, N, D, forget_bias, gc, dc): diff --git a/caffe2/quantization/server/pool_dnnlowp_op_test.py b/caffe2/quantization/server/pool_dnnlowp_op_test.py index fedc87ee732ae..c0fe092636121 100644 --- a/caffe2/quantization/server/pool_dnnlowp_op_test.py +++ b/caffe2/quantization/server/pool_dnnlowp_op_test.py @@ -24,7 +24,7 @@ class DNNLowPOpPoolTest(hu.HypothesisTestCase): batch_size=st.integers(1, 3), order=st.sampled_from(["NCHW", "NHWC"]), in_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_max_pool( self, @@ -111,7 +111,7 @@ def test_dnnlowp_max_pool( batch_size=st.integers(2, 2), order=st.sampled_from(["NCHW", "NHWC"]), in_quantized=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_average_pool( self, diff --git a/caffe2/quantization/server/quantize_dnnlowp_op_test.py b/caffe2/quantization/server/quantize_dnnlowp_op_test.py index e61a28b4b9303..57a81b05d6703 100644 --- a/caffe2/quantization/server/quantize_dnnlowp_op_test.py +++ b/caffe2/quantization/server/quantize_dnnlowp_op_test.py @@ -16,7 +16,7 @@ class DNNLowPQuantizeOpTest(hu.HypothesisTestCase): @given(size=st.integers(1024, 2048), is_empty=st.booleans(), absorb=st.booleans(), - **hu.gcs_cpu_only) + **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(max_examples=10, deadline=None) def test_dnnlowp_quantize(self, size, is_empty, absorb, gc, dc): if is_empty: diff --git a/caffe2/quantization/server/relu_dnnlowp_op_test.py b/caffe2/quantization/server/relu_dnnlowp_op_test.py index 68b5aed049f1c..6f08c6d6f4e3a 100644 --- a/caffe2/quantization/server/relu_dnnlowp_op_test.py +++ b/caffe2/quantization/server/relu_dnnlowp_op_test.py @@ -15,7 +15,7 @@ class DNNLowPReluOpTest(hu.HypothesisTestCase): - @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) + @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_relu(self, size, is_empty, gc, dc): if is_empty: size = 0 diff --git a/caffe2/quantization/server/resize_nearest_3d_dnnlowp_op_test.py b/caffe2/quantization/server/resize_nearest_3d_dnnlowp_op_test.py index 67017ee0afcc0..d21c43da73f77 100644 --- a/caffe2/quantization/server/resize_nearest_3d_dnnlowp_op_test.py +++ b/caffe2/quantization/server/resize_nearest_3d_dnnlowp_op_test.py @@ -21,7 +21,7 @@ class DNNLowPResizeNearest3DOpTest(hu.HypothesisTestCase): scale_t=st.floats(0.25, 4.0) | st.just(2.0), scale_w=st.floats(0.25, 4.0) | st.just(2.0), scale_h=st.floats(0.25, 4.0) | st.just(2.0), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(max_examples=5, deadline=None) def test_resize_nearest(self, N, T, H, W, C, scale_t, scale_w, scale_h, gc, dc): diff --git a/caffe2/quantization/server/resize_nearest_dnnlowp_op_test.py b/caffe2/quantization/server/resize_nearest_dnnlowp_op_test.py index b12b3908aafa0..d78fd5a9a9f97 100644 --- a/caffe2/quantization/server/resize_nearest_dnnlowp_op_test.py +++ b/caffe2/quantization/server/resize_nearest_dnnlowp_op_test.py @@ -19,7 +19,7 @@ class DNNLowPResizeNearestOpTest(hu.HypothesisTestCase): C=st.integers(1, 32), scale_w=st.floats(0.25, 4.0) | st.just(2.0), scale_h=st.floats(0.25, 4.0) | st.just(2.0), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) @settings(deadline=None, max_examples=50) def test_resize_nearest(self, N, H, W, C, scale_w, scale_h, gc, dc): diff --git a/caffe2/quantization/server/sigmoid_dnnlowp_op_test.py b/caffe2/quantization/server/sigmoid_dnnlowp_op_test.py index 836745dcf543b..b1b821c2ec0f9 100644 --- a/caffe2/quantization/server/sigmoid_dnnlowp_op_test.py +++ b/caffe2/quantization/server/sigmoid_dnnlowp_op_test.py @@ -14,7 +14,7 @@ class DNNLowPSigmoidOpTest(hu.HypothesisTestCase): - @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) + @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] def test_dnnlowp_sigmoid(self, size, is_empty, gc, dc): if is_empty: size = 0 diff --git a/caffe2/quantization/server/spatial_batch_norm_dnnlowp_op_test.py b/caffe2/quantization/server/spatial_batch_norm_dnnlowp_op_test.py index d7253b1675f41..1c0cb02fbcd9d 100644 --- a/caffe2/quantization/server/spatial_batch_norm_dnnlowp_op_test.py +++ b/caffe2/quantization/server/spatial_batch_norm_dnnlowp_op_test.py @@ -26,7 +26,7 @@ class DNNLowPOpSpatialBNTest(hu.HypothesisTestCase): in_quantized=st.booleans(), out_quantized=st.booleans(), fuse_relu=st.booleans(), - **hu.gcs_cpu_only + **hu.gcs_cpu_only # type: ignore[arg-type] ) def test_dnnlowp_spatial_bn_int( self, @@ -60,7 +60,7 @@ def test_dnnlowp_spatial_bn_int( X = utils.NHWC2NCHW(X) Output = collections.namedtuple("Output", ["Y", "op_type", "engine"]) - outputs = [] + outputs = [] # type: ignore[var-annotated] op_engine_list = [ ("SpatialBN", ""), diff --git a/caffe2/quantization/server/tanh_dnnlowp_op_test.py b/caffe2/quantization/server/tanh_dnnlowp_op_test.py index f73befd25e262..86ef2cded975c 100644 --- a/caffe2/quantization/server/tanh_dnnlowp_op_test.py +++ b/caffe2/quantization/server/tanh_dnnlowp_op_test.py @@ -14,7 +14,7 @@ class DNNLowPTanhOpTest(hu.HypothesisTestCase): - @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) + @given(size=st.integers(1024, 2048), is_empty=st.booleans(), **hu.gcs_cpu_only) # type: ignore[arg-type] @settings(max_examples=10, deadline=None) def test_dnnlowp_tanh(self, size, is_empty, gc, dc): if is_empty: diff --git a/caffe2/quantization/server/utils.py b/caffe2/quantization/server/utils.py index 9e137cb5f6af2..046dda014ed7c 100644 --- a/caffe2/quantization/server/utils.py +++ b/caffe2/quantization/server/utils.py @@ -169,7 +169,7 @@ def fuse_first_bn(net, params, removed_tensors, begin_op_index): def fuse_bn(net, params, ignore_failure): # Run until we hit a fixed point - removed_tensors = [] + removed_tensors = [] # type: ignore[var-annotated] begin_op_index = 0 while True: (next_net, next_params, removed_tensors, begin_op_index) = fuse_first_bn( @@ -228,7 +228,7 @@ def fuse_first_scale(net, params, removed_tensors): def fuse_scale(net, params, ignore_failure): # Run until we hit a fixed point - removed_tensors = [] + removed_tensors = [] # type: ignore[var-annotated] while True: (next_net, next_params, removed_tensors) = fuse_first_scale( net, params, removed_tensors @@ -367,7 +367,7 @@ def add_version_to_conv_bias(net, init_net): scale for each of the ops. To achieve this, we just duplicate those bias blobs that are used by multiple Conv ops before performing int8 rewrite. """ - bias_count = defaultdict(int) + bias_count = defaultdict(int) # type: ignore[var-annotated] for op in net._net.op: if "Conv" in op.type and len(op.input) >= 3: bias_count[op.input[2]] += 1 @@ -377,7 +377,7 @@ def add_version_to_conv_bias(net, init_net): if bias_count[op.output[0]] > 1: bias_fill_op[op.output[0]] = op - bias_version = defaultdict(int) + bias_version = defaultdict(int) # type: ignore[var-annotated] for op in net._net.op: if "Conv" in op.type and len(op.input) >= 3: bias = op.input[2] diff --git a/torch/_C/_distributed_rpc.pyi b/torch/_C/_distributed_rpc.pyi index 17bdcba5d4d82..681e3364a5e81 100644 --- a/torch/_C/_distributed_rpc.pyi +++ b/torch/_C/_distributed_rpc.pyi @@ -24,7 +24,7 @@ class RpcBackendOptions: ): ... class WorkerInfo: - def __init__(self, name: str, worker_id: int): ... + def __init__(self, name: str, worker_id: int): ... # type: ignore[here] @property def name(self) -> str: ... @property @@ -59,7 +59,7 @@ class PyRRef: def _serialize(self) -> Tuple: ... @staticmethod def _deserialize(tp: Tuple) -> 'PyRRef': ... - def _get_type(self) -> Any: ... + def _get_type(self) -> Any: ... # type: ignore[here] def _get_future(self) -> Future: ... def _get_profiling_future(self) -> Future: ... def _set_profiling_future(self, profilingFuture: Future): ... diff --git a/torch/_appdirs.py b/torch/_appdirs.py index fc87e0a61dfa4..84c9eb320a1bb 100644 --- a/torch/_appdirs.py +++ b/torch/_appdirs.py @@ -512,7 +512,7 @@ def _get_win_folder_from_registry(csidl_name): def _get_win_folder_with_pywin32(csidl_name): - from win32com.shell import shellcon, shell + from win32com.shell import shellcon, shell # type: ignore[import] dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) # Try to make this a unicode path because SHGetFolderPath does # not return unicode strings when there is unicode data in the @@ -529,7 +529,7 @@ def _get_win_folder_with_pywin32(csidl_name): break if has_high_char: try: - import win32api + import win32api # type: ignore[import] dir = win32api.GetShortPathName(dir) except ImportError: pass @@ -548,7 +548,7 @@ def _get_win_folder_with_ctypes(csidl_name): }[csidl_name] buf = ctypes.create_unicode_buffer(1024) - ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) # type: ignore[attr-defined] # Downgrade to short path name if have highbit chars. See # . @@ -559,18 +559,18 @@ def _get_win_folder_with_ctypes(csidl_name): break if has_high_char: buf2 = ctypes.create_unicode_buffer(1024) - if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): # type: ignore[attr-defined] buf = buf2 return buf.value def _get_win_folder_with_jna(csidl_name): import array - from com.sun import jna - from com.sun.jna.platform import win32 + from com.sun import jna # type: ignore[import] + from com.sun.jna.platform import win32 # type: ignore[import] buf_size = win32.WinDef.MAX_PATH * 2 - buf = array.zeros('c', buf_size) + buf = array.zeros('c', buf_size) # type: ignore[attr-defined] shell = win32.Shell32.INSTANCE shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) dir = jna.Native.toString(buf.tostring()).rstrip("\0") @@ -583,7 +583,7 @@ def _get_win_folder_with_jna(csidl_name): has_high_char = True break if has_high_char: - buf = array.zeros('c', buf_size) + buf = array.zeros('c', buf_size) # type: ignore[attr-defined] kernel = win32.Kernel32.INSTANCE if kernel.GetShortPathName(dir, buf, buf_size): dir = jna.Native.toString(buf.tostring()).rstrip("\0") @@ -592,15 +592,15 @@ def _get_win_folder_with_jna(csidl_name): if system == "win32": try: - import win32com.shell + import win32com.shell # type: ignore[import] _get_win_folder = _get_win_folder_with_pywin32 except ImportError: try: - from ctypes import windll + from ctypes import windll # type: ignore[attr-defined] _get_win_folder = _get_win_folder_with_ctypes except ImportError: try: - import com.sun.jna + import com.sun.jna # type: ignore[import] _get_win_folder = _get_win_folder_with_jna except ImportError: _get_win_folder = _get_win_folder_from_registry diff --git a/torch/distributed/elastic/agent/server/api.py b/torch/distributed/elastic/agent/server/api.py index 04788446c29b9..0656b6080f648 100644 --- a/torch/distributed/elastic/agent/server/api.py +++ b/torch/distributed/elastic/agent/server/api.py @@ -506,8 +506,8 @@ def _set_master_addr_port( if master_addr is None: master_addr = _get_fq_hostname() - store.set("MASTER_ADDR", master_addr.encode(encoding="UTF-8")) - store.set("MASTER_PORT", str(master_port).encode(encoding="UTF-8")) + store.set("MASTER_ADDR", master_addr.encode(encoding="UTF-8")) # type: ignore[arg-type] + store.set("MASTER_PORT", str(master_port).encode(encoding="UTF-8")) # type: ignore[arg-type] @staticmethod def _get_master_addr_port(store: Store) -> Tuple[str, int]: @@ -528,13 +528,13 @@ def _rendezvous(self, worker_group: WorkerGroup) -> None: spec = worker_group.spec store, group_rank, group_world_size = spec.rdzv_handler.next_rendezvous() - self._store = store + self._store = store # type: ignore[assignment] workers = self._assign_worker_ranks(store, group_rank, group_world_size, spec) worker_group.workers = workers - worker_group.store = store - worker_group.group_rank = group_rank - worker_group.group_world_size = group_world_size + worker_group.store = store # type: ignore[assignment] + worker_group.group_rank = group_rank # type: ignore[assignment] + worker_group.group_world_size = group_world_size # type: ignore[assignment] if group_rank == 0: self._set_master_addr_port(store, spec.master_addr, spec.master_port) @@ -750,8 +750,8 @@ def _construct_event( global_rank = worker.global_rank worker_id = str(worker.id) else: - global_rank = None - worker_id = None + global_rank = None # type: ignore[assignment] + worker_id = None # type: ignore[assignment] md_str = json.dumps(md) metadata = { "run_id": spec.rdzv_handler.get_run_id(), @@ -768,7 +768,7 @@ def _construct_event( "agent_restarts": spec.max_restarts - self._remaining_restarts, } return Event( - f"torchelastic.worker.status.{state}", source=source, metadata=metadata + f"torchelastic.worker.status.{state}", source=source, metadata=metadata # type: ignore[arg-type] ) def _record_metrics(self, group_results: RunResult): @@ -883,8 +883,8 @@ def _exit_barrier(self): try: store_util.barrier( self._store, - self._worker_group.group_rank, - self._worker_group.group_world_size, + self._worker_group.group_rank, # type: ignore[arg-type] + self._worker_group.group_world_size, # type: ignore[arg-type] key_prefix=_TERMINAL_STATE_SYNC_ID, barrier_timeout=self._exit_barrier_timeout, ) diff --git a/torch/multiprocessing/pool.py b/torch/multiprocessing/pool.py index 85281e7e729fd..75083dada6a72 100644 --- a/torch/multiprocessing/pool.py +++ b/torch/multiprocessing/pool.py @@ -6,7 +6,7 @@ def clean_worker(*args, **kwargs): import gc - multiprocessing.pool.worker(*args, **kwargs) + multiprocessing.pool.worker(*args, **kwargs) # type: ignore[attr-defined] # Regular multiprocessing workers don't fully clean up after themselves, # so we have to explicitly trigger garbage collection to make sure that all # destructors are called... @@ -28,15 +28,15 @@ def _repopulate_pool(self): """Bring the number of pool processes up to the specified number, for use after reaping workers which have exited. """ - for i in range(self._processes - len(self._pool)): + for i in range(self._processes - len(self._pool)): # type: ignore[attr-defined] # changed worker -> clean_worker args = (self._inqueue, self._outqueue, - self._initializer, - self._initargs, self._maxtasksperchild) + self._initializer, # type: ignore[attr-defined] + self._initargs, self._maxtasksperchild) # type: ignore[attr-defined] if hasattr(self, '_wrap_exception'): - args += (self._wrap_exception,) - w = self.Process(target=clean_worker, args=args) - self._pool.append(w) + args += (self._wrap_exception,) # type: ignore[assignment, attr-defined] + w = self.Process(target=clean_worker, args=args) # type: ignore[attr-defined] + self._pool.append(w) # type: ignore[attr-defined] w.name = w.name.replace('Process', 'PoolWorker') w.daemon = True w.start() diff --git a/torch/nn/modules/pooling.py b/torch/nn/modules/pooling.py index 78aae504083b0..98b27cdfd464a 100644 --- a/torch/nn/modules/pooling.py +++ b/torch/nn/modules/pooling.py @@ -315,8 +315,8 @@ def __init__(self, kernel_size: _size_1_t, stride: Optional[_size_1_t] = None, p self.padding = _single(padding) def forward(self, input: Tensor, indices: Tensor, output_size: Optional[List[int]] = None) -> Tensor: - return F.max_unpool1d(input, indices, self.kernel_size, self.stride, - self.padding, output_size) + return F.max_unpool1d(input, indices, self.kernel_size, self.stride, # type: ignore[arg-type] + self.padding, output_size) # type: ignore[arg-type] class MaxUnpool2d(_MaxUnpoolNd): @@ -392,8 +392,8 @@ def __init__(self, kernel_size: _size_2_t, stride: Optional[_size_2_t] = None, p self.padding = _pair(padding) def forward(self, input: Tensor, indices: Tensor, output_size: Optional[List[int]] = None) -> Tensor: - return F.max_unpool2d(input, indices, self.kernel_size, self.stride, - self.padding, output_size) + return F.max_unpool2d(input, indices, self.kernel_size, self.stride, # type: ignore[arg-type] + self.padding, output_size) # type: ignore[arg-type] class MaxUnpool3d(_MaxUnpoolNd): @@ -458,8 +458,8 @@ def __init__(self, kernel_size: _size_3_t, stride: Optional[_size_3_t] = None, p self.padding = _triple(padding) def forward(self, input: Tensor, indices: Tensor, output_size: Optional[List[int]] = None) -> Tensor: - return F.max_unpool3d(input, indices, self.kernel_size, self.stride, - self.padding, output_size) + return F.max_unpool3d(input, indices, self.kernel_size, self.stride, # type: ignore[arg-type] + self.padding, output_size) # type: ignore[arg-type] class _AvgPoolNd(Module): @@ -752,15 +752,15 @@ def __init__(self, kernel_size: _size_2_t, output_size: Optional[_size_2_t] = No self.kernel_size = _pair(kernel_size) self.return_indices = return_indices self.register_buffer('_random_samples', _random_samples) - self.output_size = _pair(output_size) if output_size is not None else None - self.output_ratio = _pair(output_ratio) if output_ratio is not None else None + self.output_size = _pair(output_size) if output_size is not None else None # type: ignore[assignment] + self.output_ratio = _pair(output_ratio) if output_ratio is not None else None # type: ignore[assignment] if output_size is None and output_ratio is None: raise ValueError("FractionalMaxPool2d requires specifying either " "an output size, or a pooling ratio") if output_size is not None and output_ratio is not None: raise ValueError("only one of output_size and output_ratio may be specified") if self.output_ratio is not None: - if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1): + if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1): # type: ignore[index] raise ValueError("output_ratio must be between 0 and 1 (got {})" .format(output_ratio)) @@ -815,15 +815,15 @@ def __init__(self, kernel_size: _size_3_t, output_size: Optional[_size_3_t] = No self.kernel_size = _triple(kernel_size) self.return_indices = return_indices self.register_buffer('_random_samples', _random_samples) - self.output_size = _triple(output_size) if output_size is not None else None - self.output_ratio = _triple(output_ratio) if output_ratio is not None else None + self.output_size = _triple(output_size) if output_size is not None else None # type: ignore[assignment] + self.output_ratio = _triple(output_ratio) if output_ratio is not None else None # type: ignore[assignment] if output_size is None and output_ratio is None: raise ValueError("FractionalMaxPool3d requires specifying either " "an output size, or a pooling ratio") if output_size is not None and output_ratio is not None: raise ValueError("only one of output_size and output_ratio may be specified") if self.output_ratio is not None: - if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1 and 0 < self.output_ratio[2] < 1): + if not (0 < self.output_ratio[0] < 1 and 0 < self.output_ratio[1] < 1 and 0 < self.output_ratio[2] < 1): # type: ignore[index] raise ValueError("output_ratio must be between 0 and 1 (got {})" .format(output_ratio)) diff --git a/torch/nn/parallel/distributed.pyi b/torch/nn/parallel/distributed.pyi index a75713afb8282..d3426c56ddec0 100644 --- a/torch/nn/parallel/distributed.pyi +++ b/torch/nn/parallel/distributed.pyi @@ -15,7 +15,7 @@ class DistributedDataParallel(Module): bucket_bytes_cap: float = ... # TODO type process_group once `distributed` module is stubbed - def __init__(self, module: Module, device_ids: Optional[_devices_t] = ..., + def __init__(self, module: Module, device_ids: Optional[_devices_t] = ..., # type: ignore[here] output_device: Optional[_device_t] = ..., dim: int = ..., broadcast_buffers: bool = ..., process_group: Optional[Any] = ..., bucket_cap_mb: float = ..., find_unused_parameters: bool = ..., check_reduction: bool = ...) -> None: ... diff --git a/torch/overrides.py b/torch/overrides.py index 4a0ee2b8e2012..f7510828af48b 100644 --- a/torch/overrides.py +++ b/torch/overrides.py @@ -98,16 +98,16 @@ def get_ignored_functions() -> Set[Callable]: torch.from_numpy, torch.get_device, torch.tensor, - torch.default_generator, - torch.has_cuda, - torch.has_cudnn, - torch.has_lapack, + torch.default_generator, # type: ignore[arg-type] + torch.has_cuda, # type: ignore[arg-type] + torch.has_cudnn, # type: ignore[arg-type] + torch.has_lapack, # type: ignore[arg-type] torch.device, torch.dtype, torch.finfo, - torch.has_mkl, - torch.has_mkldnn, - torch.has_openmp, + torch.has_mkl, # type: ignore[arg-type] + torch.has_mkldnn, # type: ignore[arg-type] + torch.has_openmp, # type: ignore[arg-type] torch.iinfo, torch.memory_format, torch.qscheme, @@ -170,10 +170,10 @@ def get_ignored_functions() -> Set[Callable]: torch.nn.functional.upsample, torch.nn.functional.upsample_bilinear, torch.nn.functional.upsample_nearest, - torch.nn.functional.has_torch_function, - torch.nn.functional.has_torch_function_unary, - torch.nn.functional.has_torch_function_variadic, - torch.nn.functional.handle_torch_function, + torch.nn.functional.has_torch_function, # type: ignore[attr-defined] + torch.nn.functional.has_torch_function_unary, # type: ignore[attr-defined] + torch.nn.functional.has_torch_function_variadic, # type: ignore[attr-defined] + torch.nn.functional.handle_torch_function, # type: ignore[attr-defined] torch.nn.functional.sigmoid, torch.nn.functional.hardsigmoid, torch.nn.functional.tanh, @@ -193,9 +193,9 @@ def get_ignored_functions() -> Set[Callable]: torch.unify_type_list, torch.is_warn_always_enabled, torch.set_warn_always, - torch.vitals_enabled, - torch.set_vital, - Tensor.__delitem__, + torch.vitals_enabled, # type: ignore[attr-defined] + torch.set_vital, # type: ignore[attr-defined] + Tensor.__delitem__, # type: ignore[attr-defined] Tensor.__dir__, Tensor.__getattribute__, Tensor.__init__, @@ -206,7 +206,7 @@ def get_ignored_functions() -> Set[Callable]: Tensor.__torch_function__, Tensor.__new__, Tensor.__class__, - Tensor.__subclasshook__, + Tensor.__subclasshook__, # type: ignore[attr-defined] Tensor.as_subclass, Tensor.reinforce, Tensor.new, @@ -929,39 +929,39 @@ def get_testing_overrides() -> Dict[Callable, Callable]: Tensor.__repr__: lambda self: -1, Tensor.__setitem__: lambda self, k, v: -1, Tensor.__setstate__: lambda self, d: -1, - Tensor.T.__get__: lambda self: -1, - Tensor._backward_hooks.__get__: lambda self: -1, - Tensor._base.__get__: lambda self: -1, - Tensor._cdata.__get__: lambda self: -1, - Tensor.grad.__get__: lambda self: -1, - Tensor._grad.__get__: lambda self: -1, + Tensor.T.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor._backward_hooks.__get__: lambda self: -1, # type: ignore[union-attr] + Tensor._base.__get__: lambda self: -1, # type: ignore[union-attr] + Tensor._cdata.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.grad.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor._grad.__get__: lambda self: -1, # type: ignore[union-attr] Tensor._grad_fn.__get__: lambda self: -1, Tensor.grad_fn.__get__: lambda self: -1, - Tensor._version.__get__: lambda self: -1, - Tensor.data.__get__: lambda self: -1, + Tensor._version.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.data.__get__: lambda self: -1, # type: ignore[attr-defined] Tensor.device.__get__: lambda self: -1, - Tensor.dtype.__get__: lambda self: -1, - Tensor.is_cuda.__get__: lambda self: -1, - Tensor.is_xpu.__get__: lambda self: -1, - Tensor.is_leaf.__get__: lambda self: -1, - Tensor.is_meta.__get__: lambda self: -1, - Tensor.is_mlc.__get__: lambda self: -1, - Tensor.is_mkldnn.__get__: lambda self: -1, - Tensor.is_quantized.__get__: lambda self: -1, - Tensor.is_sparse.__get__: lambda self: -1, - Tensor.is_sparse_csr.__get__: lambda self: -1, - Tensor.is_vulkan.__get__: lambda self: -1, - Tensor.layout.__get__: lambda self: -1, - Tensor.name.__get__: lambda self: -1, - Tensor.names.__get__: lambda self: -1, - Tensor.ndim.__get__: lambda self: -1, - Tensor.output_nr.__get__: lambda self: -1, - Tensor.requires_grad.__get__: lambda self: -1, - Tensor.shape.__get__: lambda self: -1, - Tensor.volatile.__get__: lambda self: -1, - Tensor.real.__get__: lambda self: -1, - Tensor.imag.__get__: lambda self: -1, - Tensor.__cuda_array_interface__.__get__: lambda self: -1, + Tensor.dtype.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_cuda.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_xpu.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_leaf.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_meta.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_mlc.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_mkldnn.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_quantized.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_sparse.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_sparse_csr.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.is_vulkan.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.layout.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.name.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.names.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.ndim.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.output_nr.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.requires_grad.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.shape.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.volatile.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.real.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.imag.__get__: lambda self: -1, # type: ignore[attr-defined] + Tensor.__cuda_array_interface__.__get__: lambda self: -1, # type: ignore[attr-defined] Tensor.type: lambda self, dtype=None, non_blocking=False, **kwargs: -1, Tensor._coalesced_: lambda self: -1, Tensor._dimI: lambda self: -1, @@ -990,7 +990,7 @@ def get_testing_overrides() -> Dict[Callable, Callable]: Tensor.copy_: lambda self, src, non_blocking=False: -1, Tensor.cpu: lambda self, memory_format=torch.preserve_format: -1, Tensor.cuda: lambda self, memory_format=torch.preserve_format: -1, - Tensor.xpu: lambda self, memory_format=torch.preserve_format: -1, + Tensor.xpu: lambda self, memory_format=torch.preserve_format: -1, # type: ignore[attr-defined] Tensor.data_ptr: lambda self: -1, Tensor.dense_dim: lambda self: -1, Tensor.dim: lambda self: -1, diff --git a/torch/testing/_internal/common_quantization.py b/torch/testing/_internal/common_quantization.py index 03d265b5f19cb..f184e48ef19b1 100644 --- a/torch/testing/_internal/common_quantization.py +++ b/torch/testing/_internal/common_quantization.py @@ -129,7 +129,7 @@ def update(self, val, n=1): self.val = val self.sum += val * n self.count += n - self.avg = self.sum / self.count + self.avg = self.sum / self.count # type: ignore[assignment] def __str__(self): fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' @@ -187,7 +187,7 @@ def run_ddp(rank, world_size, prepared): prepared.to(rank) model_with_ddp = prepared optimizer = torch.optim.SGD(model_with_ddp.parameters(), lr=0.0001) - train_one_epoch(model_with_ddp, criterion, optimizer, dataset, rank, 1) + train_one_epoch(model_with_ddp, criterion, optimizer, dataset, rank, 1) # type: ignore[name-defined] ddp_cleanup() @@ -254,8 +254,8 @@ def skipIfNoFBGEMM(fn): reason = 'Quantized operations require FBGEMM. FBGEMM is only optimized for CPUs with instruction set support AVX2 or newer.' if isinstance(fn, type): if 'fbgemm' not in torch.backends.quantized.supported_engines: - fn.__unittest_skip__ = True - fn.__unittest_skip_why__ = reason + fn.__unittest_skip__ = True # type: ignore[attr-defined] + fn.__unittest_skip_why__ = reason # type: ignore[attr-defined] return fn @functools.wraps(fn) @@ -282,7 +282,7 @@ def lengths_to_offsets(t, offset_type=np.int64, use_begin_offset=True): """ tt = np.zeros((t.shape[0] + 1,), dtype=offset_type) tt[1:] = t - tt = torch.from_numpy(np.cumsum(tt, dtype=offset_type)) + tt = torch.from_numpy(np.cumsum(tt, dtype=offset_type)) # type: ignore[assignment] if use_begin_offset: return tt[:-1] return tt[1:] @@ -541,7 +541,7 @@ def checkGraphModuleNodes( expected_node, expected_node_occurrence, expected_node_list: see docs for checkGraphModeFxOp """ - nodes_in_graph = dict() + nodes_in_graph = dict() # type: ignore[var-annotated] node_list = [] modules = dict(graph_module.named_modules(remove_duplicate=False)) for node in graph_module.graph.nodes: @@ -633,7 +633,7 @@ def _get_underlying_op_type( node: Node, gm: GraphModule ) -> Union[Callable, str]: if node.op == 'call_module': - mod = getattr(gm, node.target) + mod = getattr(gm, node.target) # type: ignore[arg-type] return type(mod) else: assert node.op in ('call_function', 'call_method') @@ -842,8 +842,8 @@ def checkEmbeddingSerialization(self, qemb, num_embeddings, embedding_dim, indic embedding_unpack = torch.ops.quantized.embedding_bag_unpack # Check unpacked weight values explicitly for key in emb_dict: - if isinstance(emb_dict[key], torch._C.ScriptObject): - assert isinstance(loaded_dict[key], torch._C.ScriptObject) + if isinstance(emb_dict[key], torch._C.ScriptObject): # type: ignore[attr-defined] + assert isinstance(loaded_dict[key], torch._C.ScriptObject) # type: ignore[attr-defined] emb_weight = embedding_unpack(emb_dict[key]) loaded_weight = embedding_unpack(loaded_dict[key]) self.assertEqual(emb_weight, loaded_weight) @@ -853,7 +853,7 @@ def checkEmbeddingSerialization(self, qemb, num_embeddings, embedding_dim, indic loaded_qemb = nnq.EmbeddingBag(num_embeddings=num_embeddings, embedding_dim=embedding_dim, include_last_offset=True, mode='sum', dtype=dtype) else: - loaded_qemb = nnq.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim, dtype=dtype) + loaded_qemb = nnq.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim, dtype=dtype) # type: ignore[assignment] self.check_eager_serialization(qemb, loaded_qemb, inputs) loaded_qemb.load_state_dict(loaded_dict) @@ -869,13 +869,13 @@ def checkEmbeddingSerialization(self, qemb, num_embeddings, embedding_dim, indic float_embedding = torch.nn.EmbeddingBag(num_embeddings=num_embeddings, embedding_dim=embedding_dim, include_last_offset=True, scale_grad_by_freq=False, mode='sum') else: - float_embedding = torch.nn.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim) + float_embedding = torch.nn.Embedding(num_embeddings=num_embeddings, embedding_dim=embedding_dim) # type: ignore[assignment] if set_qconfig: float_qparams_observer = PerChannelMinMaxObserver.with_args(dtype=dtype, qscheme=torch.per_channel_affine_float_qparams, ch_axis=0) - float_embedding.qconfig = QConfigDynamic(activation=default_dynamic_quant_observer, + float_embedding.qconfig = QConfigDynamic(activation=default_dynamic_quant_observer, # type: ignore[assignment] weight=float_qparams_observer) prepare_dynamic(float_embedding) @@ -931,7 +931,7 @@ def __init__(self, mod_type): if mod_type == 'GRU': self.mod = torch.nn.GRU(2, 2).to(dtype=torch.float) if mod_type == 'LSTM': - self.mod = torch.nn.LSTM(2, 2).to(dtype=torch.float) + self.mod = torch.nn.LSTM(2, 2).to(dtype=torch.float) # type: ignore[assignment] def forward(self, x): x = self.mod(x) @@ -944,11 +944,11 @@ def __init__(self, mod_type): if mod_type == 'GRUCell': self.mod = torch.nn.GRUCell(2, 2).to(dtype=torch.float) if mod_type == 'LSTMCell': - self.mod = torch.nn.LSTMCell(2, 2).to(dtype=torch.float) + self.mod = torch.nn.LSTMCell(2, 2).to(dtype=torch.float) # type: ignore[assignment] if mod_type == 'RNNReLU': - self.mod = torch.nn.RNNCell(2, 2, nonlinearity='relu').to(dtype=torch.float) + self.mod = torch.nn.RNNCell(2, 2, nonlinearity='relu').to(dtype=torch.float) # type: ignore[assignment] if mod_type == 'RNNTanh': - self.mod = torch.nn.RNNCell(2, 2, nonlinearity='tanh').to(dtype=torch.float) + self.mod = torch.nn.RNNCell(2, 2, nonlinearity='tanh').to(dtype=torch.float) # type: ignore[assignment] def forward(self, x): x = self.mod(x) @@ -1171,12 +1171,12 @@ def __init__(self, qengine): self.sub1 = LinearReluModel() self.sub2 = TwoLayerLinearModel() self.fc3 = QuantWrapper(torch.nn.Linear(5, 5).to(dtype=torch.float)) - self.fc3.qconfig = default_qconfig - self.sub2.fc1 = QuantWrapper(self.sub2.fc1) + self.fc3.qconfig = default_qconfig # type: ignore[assignment] + self.sub2.fc1 = QuantWrapper(self.sub2.fc1) # type: ignore[assignment] if qengine == 'fbgemm': - self.sub2.fc1.qconfig = default_per_channel_qconfig + self.sub2.fc1.qconfig = default_per_channel_qconfig # type: ignore[assignment] else: - self.sub2.fc1.qconfig = default_qconfig + self.sub2.fc1.qconfig = default_qconfig # type: ignore[assignment] def forward(self, x): x = self.sub1(x) @@ -1190,8 +1190,8 @@ def __init__(self): self.sub1 = LinearReluModel() self.sub2 = QuantWrapper(TwoLayerLinearModel()) self.fc3 = QuantWrapper(torch.nn.Linear(5, 5).to(dtype=torch.float)) - self.fc3.qconfig = default_qconfig - self.sub2.qconfig = default_qconfig + self.fc3.qconfig = default_qconfig # type: ignore[assignment] + self.sub2.qconfig = default_qconfig # type: ignore[assignment] def forward(self, x): x = self.sub1(x) @@ -1205,8 +1205,8 @@ def __init__(self): self.sub1 = LinearReluModel() self.sub2 = TwoLayerLinearModel() self.fc3 = QuantWrapper(torch.nn.Linear(5, 5).to(dtype=torch.float)) - self.fc3.qconfig = default_qconfig - self.sub2.qconfig = default_qconfig + self.fc3.qconfig = default_qconfig # type: ignore[assignment] + self.sub2.qconfig = default_qconfig # type: ignore[assignment] custom_options = { 'dtype': torch.quint8, @@ -1214,10 +1214,10 @@ def __init__(self): } custom_qconfig = QConfig(activation=default_observer.with_args(**custom_options), weight=default_weight_observer) - self.sub2.fc1.qconfig = custom_qconfig + self.sub2.fc1.qconfig = custom_qconfig # type: ignore[assignment] - self.sub2.fc1 = QuantWrapper(self.sub2.fc1) - self.sub2.fc2 = QuantWrapper(self.sub2.fc2) + self.sub2.fc1 = QuantWrapper(self.sub2.fc1) # type: ignore[assignment] + self.sub2.fc2 = QuantWrapper(self.sub2.fc2) # type: ignore[assignment] def forward(self, x): x = self.sub1(x) @@ -1230,9 +1230,9 @@ def __init__(self): super().__init__() self.sub1 = LinearReluModel() self.sub2 = QuantWrapper(TwoLayerLinearModel()) - self.sub2.qconfig = default_qconfig + self.sub2.qconfig = default_qconfig # type: ignore[assignment] self.fc3 = torch.nn.Linear(5, 5).to(dtype=torch.float) - self.fc3.qconfig = default_qconfig + self.fc3.qconfig = default_qconfig # type: ignore[assignment] def forward(self, x): x = self.sub1(x) @@ -1288,13 +1288,13 @@ def __init__(self, qengine): self.sub = QuantWrapper(InnerModule()) self.fc = torch.nn.Linear(5, 5).to(dtype=torch.float) # don't quantize this fc - self.fc.qconfig = None + self.fc.qconfig = None # type: ignore[assignment] def forward(self, x): return self.fc(self.sub(x)) def fuse_modules(self): - self.sub.module.fuse_modules() + self.sub.module.fuse_modules() # type: ignore[operator] class QuantStubModel(torch.nn.Module): r"""A Module with manually inserted `QuantStub` and `DeQuantStub` @@ -1353,7 +1353,7 @@ def forward(self, x): class SubModelForFusion(nn.Module): def __init__(self): super().__init__() - self.conv = nn.Conv2d(2, 2, 1, bias=None).to(dtype=torch.float) + self.conv = nn.Conv2d(2, 2, 1, bias=None).to(dtype=torch.float) # type: ignore[arg-type] self.bn = nn.BatchNorm2d(2).to(dtype=torch.float) def forward(self, x): @@ -1365,7 +1365,7 @@ def forward(self, x): class SubModelWithoutFusion(nn.Module): def __init__(self): super().__init__() - self.conv = nn.Conv2d(2, 2, 1, bias=None).to(dtype=torch.float) + self.conv = nn.Conv2d(2, 2, 1, bias=None).to(dtype=torch.float) # type: ignore[arg-type] self.relu = nn.ReLU(inplace=False).to(dtype=torch.float) def forward(self, x): @@ -1374,7 +1374,7 @@ def forward(self, x): class ModelForFusion(nn.Module): def __init__(self, qconfig): super().__init__() - self.conv1 = nn.Conv2d(3, 2, 1, bias=None).to(dtype=torch.float) + self.conv1 = nn.Conv2d(3, 2, 1, bias=None).to(dtype=torch.float) # type: ignore[arg-type] self.bn1 = nn.BatchNorm2d(2).to(dtype=torch.float) self.relu1 = nn.ReLU(inplace=True).to(dtype=torch.float) self.sub1 = SubModelForFusion() @@ -1383,7 +1383,7 @@ def __init__(self, qconfig): self.quant = QuantStub() self.dequant = DeQuantStub() self.qconfig = qconfig - self.conv2 = nn.Conv3d(3, 2, (1, 1, 1), bias=None).to(dtype=torch.float) + self.conv2 = nn.Conv3d(3, 2, (1, 1, 1), bias=None).to(dtype=torch.float) # type: ignore[arg-type] self.relu2 = nn.ReLU(inplace=False).to(dtype=torch.float) self.bn2 = nn.BatchNorm3d(2).to(dtype=torch.float) self.relu3 = nn.ReLU(inplace=True).to(dtype=torch.float) @@ -1391,8 +1391,8 @@ def __init__(self, qconfig): self.bn3 = nn.BatchNorm1d(3).to(dtype=torch.float) self.relu4 = nn.ReLU(inplace=True).to(dtype=torch.float) # don't quantize sub2 - self.sub2.qconfig = None - self.fc.qconfig = None + self.sub2.qconfig = None # type: ignore[assignment] + self.fc.qconfig = None # type: ignore[assignment] def forward(self, x): x = x.squeeze(2) @@ -1629,7 +1629,7 @@ def __init__(self): super().__init__() self.emb = torch.nn.Embedding(num_embeddings=10, embedding_dim=12) self.fc = torch.nn.Linear(5, 5) - self.emb.qconfig = float_qparams_weight_only_qconfig + self.emb.qconfig = float_qparams_weight_only_qconfig # type: ignore[assignment] self.qconfig = default_qconfig def forward(self, indices, linear_in): diff --git a/torch/testing/_internal/distributed/ddp_under_dist_autograd_test.py b/torch/testing/_internal/distributed/ddp_under_dist_autograd_test.py index 80faab9c67e6c..e55d208fb42a3 100644 --- a/torch/testing/_internal/distributed/ddp_under_dist_autograd_test.py +++ b/torch/testing/_internal/distributed/ddp_under_dist_autograd_test.py @@ -148,7 +148,7 @@ def __init__( if process_group_for_ddp is not None: self.non_ddp_params, self.ddp_params = ( tuple(self.fc1.parameters()), - tuple(self.fc2.parameters()), + tuple(self.fc2.parameters()), # type: ignore[assignment] ) gLogger.info("Use DDP for the second local net.") self.fc2 = DistributedDataParallel( @@ -200,9 +200,9 @@ def __init__( ) if ddp_mode == DdpMode.OUTSIDE: gLogger.info("Wrapping the whole hybrid module into DDP.") - self.ddp_params += self.non_ddp_params + self.ddp_params += self.non_ddp_params # type: ignore[assignment] self.non_ddp_params = () - self.hybrid_module = DistributedDataParallel( + self.hybrid_module = DistributedDataParallel( # type: ignore[assignment] self.hybrid_module, check_reduction=True, process_group=self.trainer_group, @@ -250,7 +250,7 @@ def train_batch( else: input_batches = batches - with self.hybrid_module.join() if simulate_uneven_inputs else contextlib.suppress(): + with self.hybrid_module.join() if simulate_uneven_inputs else contextlib.suppress(): # type: ignore[operator] for b in input_batches: with dist_autograd.context() as context_id: output = self.hybrid_module.forward(b) @@ -262,8 +262,8 @@ def train_batch( f"Grads dict has {len(grads_dict)} entries: {grads_dict}" ) return ( - tuple(grads_dict[param] for param in self.ddp_params), - tuple(grads_dict[param] for param in self.non_ddp_params), + tuple(grads_dict[param] for param in self.ddp_params), # type: ignore[var-annotated, index] + tuple(grads_dict[param] for param in self.non_ddp_params), # type: ignore[index] ) @@ -271,7 +271,7 @@ def get_training_examples(): n = 16 training_examples = FeatureSet( dense_features=torch.zeros((n, D_DENSE)), - sparse_features=torch.zeros(n, dtype=torch.long), + sparse_features=torch.zeros(n, dtype=torch.long), # type: ignore[arg-type] values=torch.zeros(n), ) idx = 0 @@ -294,7 +294,7 @@ def get_training_examples(): dense_features=training_examples.dense_features[ start : start + examples_per_trainer, : ], - sparse_features=training_examples.sparse_features[ + sparse_features=training_examples.sparse_features[ # type: ignore[arg-type] start : start + examples_per_trainer ], values=training_examples.values[start : start + examples_per_trainer], @@ -329,9 +329,9 @@ def _remote_worker_process(self, ddp_mode): gLogger.info("The remote worker is running.") dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) if ddp_mode in (DdpMode.INSIDE, DdpMode.OUTSIDE): @@ -351,9 +351,9 @@ def _trainer_process(self, rank: int): ) dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) gLogger.info(f"Waiting for shutdown signal on trainer #{rank}...") @@ -368,9 +368,9 @@ def _master_process(self, ddp_mode: DdpMode, simulate_uneven_inputs: bool): gLogger.info("Running the master process...") dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) remote_em_rref = rpc.remote( @@ -436,7 +436,7 @@ def do_test_on_master( # cancel each other out, since some trainers contribute 0 grad. if not simulate_uneven_inputs: for grad in ddp_grads: - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] grad, torch.zeros_like(grad), msg=f"The grad for any ddp parameter should be zeros, because " @@ -444,7 +444,7 @@ def do_test_on_master( f"gradient {grad}", ) for grad in non_ddp_grads: - self.assertNotEqual( + self.assertNotEqual( # type: ignore[attr-defined] grad, torch.zeros_like(grad), msg="The grad for any non-ddp parameter shouldn't be zeros", @@ -462,14 +462,14 @@ def do_test_on_master( rpc.rpc_sync(self.remote_worker_name(), set_shutdown_signal, args=()) def _do_test(self, ddp_mode, simulate_uneven_inputs=False): - if self.rank == MASTER_RANK: + if self.rank == MASTER_RANK: # type: ignore[attr-defined] self._master_process(ddp_mode, simulate_uneven_inputs) - elif self.rank == REMOTE_WORKER_RANK: + elif self.rank == REMOTE_WORKER_RANK: # type: ignore[attr-defined] self._remote_worker_process(ddp_mode) - elif self.rank in TRAINER_RANKS: - self._trainer_process(self.rank) + elif self.rank in TRAINER_RANKS: # type: ignore[attr-defined] + self._trainer_process(self.rank) # type: ignore[attr-defined] else: - raise RuntimeError(f"Unknow process rank: {self.rank}") + raise RuntimeError(f"Unknow process rank: {self.rank}") # type: ignore[attr-defined] @requires_gloo() @dist_init @@ -509,17 +509,17 @@ def get_remote_grads(rref, context_id): class DdpComparisonTest(CommonDdpComparisonTest): def _run_test_ddp_comparision(self, simulate_uneven_inputs=False): - gLogger.info(f"Running trainer rank: {self.rank}") + gLogger.info(f"Running trainer rank: {self.rank}") # type: ignore[attr-defined] # Each trainer uses a different random seed. Otherwise, they are going # to have exactly the same initial model parameters, input, and # therefore grads. That means the grads will be the same before and # after DDP's all-reduce. - torch.manual_seed(self.rank) + torch.manual_seed(self.rank) # type: ignore[attr-defined] dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) net = nn.Linear(2, 3) ddp_net = DistributedDataParallel(net) @@ -527,22 +527,22 @@ def _run_test_ddp_comparision(self, simulate_uneven_inputs=False): # Odd ranks join early if simulate_uneven_inputs. num_inputs = 1 if simulate_uneven_inputs: - if self.rank % 2 == 0: + if self.rank % 2 == 0: # type: ignore[attr-defined] num_inputs += 2 inputs_list = [torch.rand((3, 2)) for _ in range(num_inputs)] if simulate_uneven_inputs: - gLogger.info(f"Rank {self.rank} training with {len(inputs_list)} inputs.") + gLogger.info(f"Rank {self.rank} training with {len(inputs_list)} inputs.") # type: ignore[attr-defined] # Use distributed autograd. The gradients will be in RPC context map. grads_dict = {} - with ddp_net.join(simulate_uneven_inputs): + with ddp_net.join(simulate_uneven_inputs): # type: ignore[operator] for i, inputs in enumerate(inputs_list): with dist_autograd.context() as context_id: loss = ddp_net(inputs).norm() dist_autograd.backward(context_id, [loss]) grads_dict = dist_autograd.get_gradients(context_id) - gLogger.info(f"Trainer #{self.rank} got grad dict: {grads_dict}") + gLogger.info(f"Trainer #{self.rank} got grad dict: {grads_dict}") # type: ignore[attr-defined] # Use local autograd. The gradients will be in each variable's '.grad'. ddp_net.zero_grad() @@ -551,11 +551,11 @@ def _run_test_ddp_comparision(self, simulate_uneven_inputs=False): # The gradients should be the same for param in net.parameters(): - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] param in grads_dict, msg=f"Param {param} is not in dist_auto grad dict {grads_dict} for iteration {i}", ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] grads_dict[param], param.grad, msg=f"The grads for param {param} are different under local " @@ -581,12 +581,12 @@ def test_ddp_dist_autograd_sparse_grads(self): # to have exactly the same initial model parameters, input, and # therefore grads. That means the grads will be the same before and # after DDP's all-reduce. - torch.manual_seed(self.rank) + torch.manual_seed(self.rank) # type: ignore[attr-defined] dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) model = nn.EmbeddingBag(10, 3, sparse=True) @@ -604,8 +604,8 @@ def test_ddp_dist_autograd_sparse_grads(self): loss = ddp_model(input, offsets).sum() dist_autograd.backward(context_id, [loss]) grads_dict = dist_autograd.get_gradients(context_id) - self.assertEqual(1, len(grads_dict)) - self.assertEqual(model.weight.grad, grads_dict[model.weight]) + self.assertEqual(1, len(grads_dict)) # type: ignore[attr-defined] + self.assertEqual(model.weight.grad, grads_dict[model.weight]) # type: ignore[attr-defined] @requires_gloo() @dist_init @@ -614,19 +614,19 @@ def test_ddp_dist_autograd_local_vs_remote(self): # to have exactly the same initial model parameters, input, and # therefore grads. That means the grads will be the same before and # after DDP's all-reduce. - torch.manual_seed(self.rank) + torch.manual_seed(self.rank) # type: ignore[attr-defined] dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) # Use two different remote device input string, w/ and w/o the default # device string "cpu", respectively. for remote_device in ["worker0/cpu", "worker0"]: remote_layer1 = RemoteModule( - remote_device=remote_device, module_cls=nn.Linear, args=(10, 5, False) + remote_device=remote_device, module_cls=nn.Linear, args=(10, 5, False) # type: ignore[arg-type] ) layer1 = nn.Linear(10, 5, False) # Start with the same parameters for remote and local @@ -645,8 +645,8 @@ def test_ddp_dist_autograd_local_vs_remote(self): dist_autograd.backward(context_id, [loss]) grads_dict = dist_autograd.get_gradients(context_id) dist.barrier() - self.assertEqual(layer2.weight.grad, grads_dict[layer2.weight]) - self.assertEqual( + self.assertEqual(layer2.weight.grad, grads_dict[layer2.weight]) # type: ignore[attr-defined] + self.assertEqual( # type: ignore[attr-defined] layer1.weight.grad, rpc.rpc_sync( "worker0", @@ -666,38 +666,38 @@ def test_ddp_dist_autograd_local_vs_remote_gpu(self): # to have exactly the same initial model parameters, input, and # therefore grads. That means the grads will be the same before and # after DDP's all-reduce. - torch.manual_seed(self.rank) + torch.manual_seed(self.rank) # type: ignore[attr-defined] dist.init_process_group( backend="gloo", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) remote_layer1 = RemoteModule( - remote_device="worker0/cpu", module_cls=nn.Linear, args=(10, 7, False) + remote_device="worker0/cpu", module_cls=nn.Linear, args=(10, 7, False) # type: ignore[arg-type] ) layer1 = nn.Linear(10, 7, False) # Start with the same parameters for remote and local layer1.weight = remote_layer1.module_rref.to_here().weight - layer2 = nn.Linear(7, 5).cuda(self.rank) - ddp_layer2 = DistributedDataParallel(layer2, device_ids=[self.rank]) + layer2 = nn.Linear(7, 5).cuda(self.rank) # type: ignore[attr-defined] + ddp_layer2 = DistributedDataParallel(layer2, device_ids=[self.rank]) # type: ignore[attr-defined] remote_layer3 = RemoteModule( - remote_device="worker0/cpu", module_cls=nn.Linear, args=(5, 3, False) + remote_device="worker0/cpu", module_cls=nn.Linear, args=(5, 3, False) # type: ignore[arg-type] ) layer3 = nn.Linear(5, 3, False) # Start with the same parameters for remote and local layer3.weight = remote_layer3.module_rref.to_here().weight - layer4 = nn.Linear(3, 1).cuda(self.rank) - ddp_layer4 = DistributedDataParallel(layer4, device_ids=[self.rank]) + layer4 = nn.Linear(3, 1).cuda(self.rank) # type: ignore[attr-defined] + ddp_layer4 = DistributedDataParallel(layer4, device_ids=[self.rank]) # type: ignore[attr-defined] # Run local case. inputs = torch.rand((10, 10)) loss = ddp_layer4( - layer3(ddp_layer2(layer1(inputs).cuda(self.rank)).cpu()).cuda(self.rank) + layer3(ddp_layer2(layer1(inputs).cuda(self.rank)).cpu()).cuda(self.rank) # type: ignore[attr-defined] ).sum() loss.backward() @@ -705,13 +705,13 @@ def test_ddp_dist_autograd_local_vs_remote_gpu(self): with dist_autograd.context() as context_id: loss = ddp_layer4( remote_layer3( - ddp_layer2(remote_layer1(inputs).cuda(self.rank)).cpu() - ).cuda(self.rank) + ddp_layer2(remote_layer1(inputs).cuda(self.rank)).cpu() # type: ignore[attr-defined] + ).cuda(self.rank) # type: ignore[attr-defined] ).sum() dist_autograd.backward(context_id, [loss]) grads_dict = dist_autograd.get_gradients(context_id) dist.barrier() - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] layer1.weight.grad, rpc.rpc_sync( "worker0", @@ -719,8 +719,8 @@ def test_ddp_dist_autograd_local_vs_remote_gpu(self): args=(remote_layer1.module_rref, context_id), ), ) - self.assertEqual(layer2.weight.grad, grads_dict[layer2.weight]) - self.assertEqual( + self.assertEqual(layer2.weight.grad, grads_dict[layer2.weight]) # type: ignore[attr-defined] + self.assertEqual( # type: ignore[attr-defined] layer3.weight.grad, rpc.rpc_sync( "worker0", @@ -728,4 +728,4 @@ def test_ddp_dist_autograd_local_vs_remote_gpu(self): args=(remote_layer3.module_rref, context_id), ), ) - self.assertEqual(layer4.weight.grad, grads_dict[layer4.weight]) + self.assertEqual(layer4.weight.grad, grads_dict[layer4.weight]) # type: ignore[attr-defined] diff --git a/torch/testing/_internal/distributed/distributed_test.py b/torch/testing/_internal/distributed/distributed_test.py index 4b3bbd94caca6..c7d4a3de09790 100644 --- a/torch/testing/_internal/distributed/distributed_test.py +++ b/torch/testing/_internal/distributed/distributed_test.py @@ -23,7 +23,7 @@ from torch.distributed.algorithms.ddp_comm_hooks import quantization as quantization_hooks from torch.distributed.algorithms.ddp_comm_hooks import default_hooks as default from torch.utils.data.distributed import DistributedSampler -from torch.nn.parallel.distributed import _dump_DDP_relevant_env_vars +from torch.nn.parallel.distributed import _dump_DDP_relevant_env_vars # type: ignore[attr-defined] import torch.nn as nn import torch.nn.functional as F from torch.nn.parallel import DistributedDataParallel @@ -78,7 +78,7 @@ def eq(value, other): return True f = Foo(10) -f.bar = 1 +f.bar = 1 # type: ignore[attr-defined] foo_cpu_tensor = Foo(torch.randn(3, 3)) @@ -114,11 +114,11 @@ def eq(value, other): # Dummy NamedTuple data structures to test DDP support for NamedTuple types. EXPECTED_FIELDS = ("a", "b") -TestNamedTupleInput_0 = namedtuple("NamedTuple", EXPECTED_FIELDS) +TestNamedTupleInput_0 = namedtuple("NamedTuple", EXPECTED_FIELDS) # type: ignore[misc] class TestNamedTupleInput_1(NamedTuple): - a: torch.tensor - b: torch.tensor + a: torch.tensor # type: ignore[valid-type] + b: torch.tensor # type: ignore[valid-type] skipIfNoTorchVision = unittest.skipIf(not HAS_TORCHVISION, "no torchvision") @@ -154,7 +154,7 @@ def get_profiling_event(postfix, profiler): class DDPUnevenTestInput(NamedTuple): name: str model: nn.Module - inp: Union[torch.tensor, tuple] + inp: Union[torch.tensor, tuple] # type: ignore[valid-type] sync_interval: int throw_on_early_termination: bool = False @@ -341,7 +341,7 @@ def _build_tensor(size, value=None, dtype=torch.float, device_id=None): def _build_multidim_tensor(dim, dim_size, value=None, dtype=torch.float): if value is None: - value = size + value = size # type: ignore[name-defined] return torch.empty(size=[dim_size for _ in range(dim)], dtype=dtype).fill_(value) def _create_autograd_profiler(): @@ -414,7 +414,7 @@ def setUp(self): # Skip return code checking for following tests as they are expected to # crash a process due to NCCL_ASYNC_ERROR_HANDLING. self.skip_return_code_checks = [ - self.test_ddp_model_diff_across_ranks.__wrapped__, + self.test_ddp_model_diff_across_ranks.__wrapped__, # type: ignore[attr-defined] ] def tearDown(self): @@ -456,10 +456,10 @@ def _run(cls, rank, test_name, file_name, pipe): # Execute barrier prior to running test to ensure that every process # has finished initialization and that the following test # immediately exiting due to a skip doesn't cause flakiness. - self._barrier() + self._barrier() # type: ignore[attr-defined] self.run_test(test_name, pipe) - self._barrier() + self._barrier() # type: ignore[attr-defined] dist.destroy_process_group() sys.exit(0) @@ -540,7 +540,7 @@ def format_line(var): ] for var in vars: line = format_line(var) - self.assertIn(line, lines) + self.assertIn(line, lines) # type: ignore[attr-defined] # Check irrelevant env vars vars = [ "xxx", @@ -549,7 +549,7 @@ def format_line(var): ] for var in vars: line = format_line(var) - self.assertNotIn(line, lines) + self.assertNotIn(line, lines) # type: ignore[attr-defined] # GET RANK def test_get_rank(self): @@ -565,7 +565,7 @@ def test_get_rank(self): for f_name in os.listdir(test_dir): with open(os.path.join(test_dir, f_name), "r") as f: all_ranks.add(int(f.read())) - self.assertEqual(len(all_ranks), num_processes) + self.assertEqual(len(all_ranks), num_processes) # type: ignore[attr-defined] self._barrier() @@ -582,28 +582,28 @@ def test_get_backend(self): group = [0, 1] group_id = dist.new_group(group) backend_str = BACKEND.lower() - self.assertEqual(dist.get_backend(), backend_str) + self.assertEqual(dist.get_backend(), backend_str) # type: ignore[attr-defined] if dist.get_rank() in group: - self.assertEqual(dist.get_backend(group_id), backend_str) + self.assertEqual(dist.get_backend(group_id), backend_str) # type: ignore[attr-defined] else: - with self.assertRaisesRegex(RuntimeError, "Invalid process group specified"): + with self.assertRaisesRegex(RuntimeError, "Invalid process group specified"): # type: ignore[attr-defined] dist.get_backend(group_id) def test_Backend_enum_class(self): # test parsing backend = BACKEND.lower() - self.assertEqual(dist.Backend(BACKEND.upper()), backend) - self.assertEqual(dist.Backend(BACKEND), backend) - with self.assertRaisesRegex(ValueError, "Invalid backend: 'undefined'"): + self.assertEqual(dist.Backend(BACKEND.upper()), backend) # type: ignore[attr-defined] + self.assertEqual(dist.Backend(BACKEND), backend) # type: ignore[attr-defined] + with self.assertRaisesRegex(ValueError, "Invalid backend: 'undefined'"): # type: ignore[attr-defined] dist.Backend("undefined") - with self.assertRaisesRegex(ValueError, "Invalid backend: 'xYz'"): + with self.assertRaisesRegex(ValueError, "Invalid backend: 'xYz'"): # type: ignore[attr-defined] dist.Backend("xYz") - with self.assertRaises(ValueError): - dist.Backend(None) - with self.assertRaises(ValueError): - dist.Backend(3) - with self.assertRaises(ValueError): - dist.Backend(["gloo"]) + with self.assertRaises(ValueError): # type: ignore[attr-defined] + dist.Backend(None) # type: ignore[arg-type] + with self.assertRaises(ValueError): # type: ignore[attr-defined] + dist.Backend(3) # type: ignore[arg-type] + with self.assertRaises(ValueError): # type: ignore[attr-defined] + dist.Backend(["gloo"]) # type: ignore[arg-type] # Test destroy def test_destroy_group(self): @@ -623,11 +623,11 @@ def test_get_rank_size_group(self): group = [0, 1] group_id = dist.new_group(group) if dist.get_rank() in group: - self.assertEqual(dist.get_world_size(group_id), 2) - self.assertTrue(dist.get_rank(group_id) in list(range(2))) + self.assertEqual(dist.get_world_size(group_id), 2) # type: ignore[attr-defined] + self.assertTrue(dist.get_rank(group_id) in list(range(2))) # type: ignore[attr-defined] else: - self.assertEqual(dist.get_world_size(group_id), -1) - self.assertEqual(dist.get_rank(group_id), -1) + self.assertEqual(dist.get_world_size(group_id), -1) # type: ignore[attr-defined] + self.assertEqual(dist.get_rank(group_id), -1) # type: ignore[attr-defined] # Test destroy full groups def test_destroy_full_group(self): @@ -638,8 +638,8 @@ def test_destroy_full_group(self): # Test get rank and size of full group def test_get_rank_size_full_group(self): _, group_id, _ = self._init_full_group_test() - self.assertEqual(dist.get_world_size(group_id), dist.get_world_size()) - self.assertEqual(dist.get_rank(group_id), dist.get_rank()) + self.assertEqual(dist.get_world_size(group_id), dist.get_world_size()) # type: ignore[attr-defined] + self.assertEqual(dist.get_rank(group_id), dist.get_rank()) # type: ignore[attr-defined] def _test_barrier_timeout(self, group_id, timeout): local_rank = dist.get_rank(group_id) @@ -647,9 +647,9 @@ def _test_barrier_timeout(self, group_id, timeout): # Only execute barrier on rank == 0, causing it to timeout if local_rank == 0: expected_time = time.time() + timeout.total_seconds() - with self.assertRaisesRegex(Exception, " (Timed out|closed|timeout) "): + with self.assertRaisesRegex(Exception, " (Timed out|closed|timeout) "): # type: ignore[attr-defined] dist.barrier(group_id) - self.assertGreaterAlmostEqual(time.time(), expected_time, delta=0.1) + self.assertGreaterAlmostEqual(time.time(), expected_time, delta=0.1) # type: ignore[attr-defined] else: pass @@ -673,7 +673,7 @@ def test_barrier_timeout_global(self): init_method=INIT_METHOD, backend=BACKEND, world_size=int(os.environ["WORLD_SIZE"]), - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] timeout=timeout, ) self._test_barrier_timeout(dist.group.WORLD, timeout) @@ -707,12 +707,12 @@ def _test_group_override_backend(self, initializer): return if new_backend == "gloo": - self.assertTrue(isinstance(group_id, dist.ProcessGroupGloo)) + self.assertTrue(isinstance(group_id, dist.ProcessGroupGloo)) # type: ignore[attr-defined] if new_backend == "nccl": - self.assertTrue(isinstance(group_id, dist.ProcessGroupNCCL)) + self.assertTrue(isinstance(group_id, dist.ProcessGroupNCCL)) # type: ignore[attr-defined] - self.assertEqual(rank, group[dist.get_rank(group_id)]) - self.assertEqual(len(group), dist.get_world_size(group_id)) + self.assertEqual(rank, group[dist.get_rank(group_id)]) # type: ignore[attr-defined] + self.assertEqual(len(group), dist.get_world_size(group_id)) # type: ignore[attr-defined] # Pin device (so we avoid NCCL race conditions/deadlocks). group_rank = dist.get_rank(group_id) @@ -721,7 +721,7 @@ def _test_group_override_backend(self, initializer): # Run broadcast of CUDA tensor (so it works for both Gloo and NCCL). tensor = _build_tensor(2, value=group_rank).cuda() dist.broadcast(tensor, src=group[0], group=group_id) - self.assertEqual(_build_tensor(2, value=0), tensor.to("cpu")) + self.assertEqual(_build_tensor(2, value=0), tensor.to("cpu")) # type: ignore[attr-defined] @require_backend({"gloo", "nccl"}) @require_backends_available({"gloo", "nccl"}) @@ -875,7 +875,7 @@ def test_batch_isend_irecv_tensor_err(self): if rank == 0: rank_to_GPU = self._init_multigpu_helper() device_id = rank_to_GPU[rank][0] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Tensors must be CUDA and dense" ): send_tensor = _build_tensor(rank + 1) @@ -892,7 +892,7 @@ def test_batch_isend_irecv_op_err(self): if rank == 0: rank_to_GPU = self._init_multigpu_helper() device_id = rank_to_GPU[rank][0] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "^Invalid ``op``" ): send_tensor = _build_tensor(rank + 1, device_id=device_id) @@ -909,7 +909,7 @@ def test_batch_isend_irecv_op_list_err(self): if rank == 0: rank_to_GPU = self._init_multigpu_helper() device_id = rank_to_GPU[rank][0] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "^Invalid ``p2p_op_list``" ): send_tensor = _build_tensor(rank + 1) @@ -927,7 +927,7 @@ def test_batch_isend_irecv_mixed_backend_err(self): group_gloo = dist.new_group(ranks=[0, 1], backend="gloo") group_nccl = dist.new_group(ranks=[0, 1], backend="nccl") if rank == 0: - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "All groups need to use the same backend" ): send_tensor = _build_tensor(rank + 1) @@ -963,7 +963,7 @@ def _test_send_recv_nccl(self, profiler_ctx=None): expected_tensor = _build_tensor(src + 1) output_tensor = _build_tensor(src + 1, value=-1, device_id=device_id) dist.recv(output_tensor, src) - self.assertEqual(output_tensor, expected_tensor) + self.assertEqual(output_tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() @@ -972,14 +972,14 @@ def _test_send_recv_nccl(self, profiler_ctx=None): if backend in SEND_RECV_PROFILING_SUPPORTED_BACKENDS: for event_name in [f"{backend}:send", f"{backend}:recv"]: events = get_profiling_event(event_name, prof) - self.assertTrue(events) + self.assertTrue(events) # type: ignore[attr-defined] # Event order is not deterministic, so simply assert their shape # is found in the following list. expected_shapes = [ [[rank + 1] * 3] for rank in range(dist.get_world_size()) ] for event in events: - self.assertTrue(event.input_shapes in expected_shapes) + self.assertTrue(event.input_shapes in expected_shapes) # type: ignore[attr-defined] @skip_if_no_gpu @unittest.skipIf(BACKEND != "nccl", "NCCL Send Recv Only") @@ -1032,7 +1032,7 @@ def _test_send_recv(self, profiler_ctx): expected_tensor = _build_tensor(recv_size) output_tensor = _build_tensor(recv_size, value=-1) dist.recv(output_tensor, src) - self.assertEqual(output_tensor, expected_tensor) + self.assertEqual(output_tensor, expected_tensor) # type: ignore[attr-defined] if profiler_ctx is not None: backend = dist.get_backend() @@ -1042,15 +1042,15 @@ def _test_send_recv(self, profiler_ctx): # Each rank sends/recvs from all other ranks. event_count = sum(e.count for e in events) expected_event_count = dist.get_world_size() - 1 - self.assertEqual(event_count, expected_event_count) + self.assertEqual(event_count, expected_event_count) # type: ignore[attr-defined] # Event order is not deterministic, so simply assert their shape # is found in the following list. expected_shapes = [ [[rank + 1] * 3] for rank in range(dist.get_world_size()) ] for event in events: - self.assertTrue(event.is_async) - self.assertTrue(event.input_shapes in expected_shapes) + self.assertTrue(event.is_async) # type: ignore[attr-defined] + self.assertTrue(event.input_shapes in expected_shapes) # type: ignore[attr-defined] @unittest.skipIf(BACKEND == "nccl", "Nccl send/recv tested by test_send_recv_nccl") def test_send_recv(self): @@ -1103,7 +1103,7 @@ def _test_send_recv_any_source(self, profiler_ctx): # Assert the scalar value "sender" that should be # equal to the rank of the sender is equal to all # values in the received tensor. - self.assertTrue(output_tensor.eq(sender).all()) + self.assertTrue(output_tensor.eq(sender).all()) # type: ignore[attr-defined] else: # Send mode dist.send(tensor, dst) # recv @@ -1115,10 +1115,10 @@ def _test_send_recv_any_source(self, profiler_ctx): for event_name in [f"{backend}:send", f"{backend}:recvAnySource"]: events = get_profiling_event(event_name, prof) # Each rank sends/recvs from other rank twice. - self.assertEqual(sum(event.count for event in events), 2 * (dist.get_world_size() - 1)) + self.assertEqual(sum(event.count for event in events), 2 * (dist.get_world_size() - 1)) # type: ignore[attr-defined] for event in events: - self.assertTrue(event.is_async) - self.assertEqual(event.input_shapes, [[send_recv_size] * 3]) + self.assertTrue(event.is_async) # type: ignore[attr-defined] + self.assertEqual(event.input_shapes, [[send_recv_size] * 3]) # type: ignore[attr-defined] # Each rank would have 2 * (world_size - 1) sends, verify that # globally we receive the same amount on the other end. @@ -1132,8 +1132,8 @@ def _test_send_recv_any_source(self, profiler_ctx): from itertools import groupby global_recv_ranks_list.sort() frequency = [len(list(group)) for key, group in groupby(global_recv_ranks_list)] - self.assertEqual(dist.get_world_size(), len(frequency)) - self.assertEqual([2 * (dist.get_world_size() - 1)] * dist.get_world_size(), frequency) + self.assertEqual(dist.get_world_size(), len(frequency)) # type: ignore[attr-defined] + self.assertEqual([2 * (dist.get_world_size() - 1)] * dist.get_world_size(), frequency) # type: ignore[attr-defined] self._barrier() @unittest.skipIf( @@ -1177,7 +1177,7 @@ def _test_send_recv_with_tag(self, profiler_ctx): continue output_tensor = _build_tensor(send_recv_size, value=-1) dist.recv(output_tensor, src, tag=src) - self.assertTrue(output_tensor.eq(src).all()) + self.assertTrue(output_tensor.eq(src).all()) # type: ignore[attr-defined] else: # Send mode dist.send(tensor, dst, tag=rank) @@ -1190,11 +1190,11 @@ def _test_send_recv_with_tag(self, profiler_ctx): # Each rank sends/recvs from all other ranks event_count = sum(e.count for e in events) expected_event_count = dist.get_world_size() - 1 - self.assertEqual(event_count, expected_event_count) + self.assertEqual(event_count, expected_event_count) # type: ignore[attr-defined] for event in events: - self.assertTrue(event.is_async) - self.assertEqual(event.name, event_name) - self.assertEqual(event.input_shapes, [[send_recv_size] * 3]) + self.assertTrue(event.is_async) # type: ignore[attr-defined] + self.assertEqual(event.name, event_name) # type: ignore[attr-defined] + self.assertEqual(event.input_shapes, [[send_recv_size] * 3]) # type: ignore[attr-defined] @unittest.skipIf(BACKEND == "nccl", "NCCL send/recv tested by test_send_recv_nccl") def test_send_recv_with_tag(self): @@ -1228,11 +1228,11 @@ def _test_isend(self, profiler_ctx): ] for request in requests: request.wait() - self.assertTrue(request.is_completed()) + self.assertTrue(request.is_completed()) # type: ignore[attr-defined] else: tensor = _build_tensor(rank, -1) dist.recv(tensor, 0) - self.assertEqual(tensor, _build_tensor(rank, 10)) + self.assertEqual(tensor, _build_tensor(rank, 10)) # type: ignore[attr-defined] self._barrier() @@ -1243,19 +1243,19 @@ def _test_isend(self, profiler_ctx): events = get_profiling_event(expected_event_name, prof) event_count = sum(e.count for e in events) expected_count = dist.get_world_size() - 1 if rank == 0 else 1 - self.assertEqual(expected_count, event_count) + self.assertEqual(expected_count, event_count) # type: ignore[attr-defined] # Event ordering is not guaranteed, so simply ensure the shapes are # found in the following map. expected_shapes = { r: [[r] * 3] for r in range(1, dist.get_world_size()) } for event in events: - self.assertTrue(event.is_async) - self.assertEqual(event.name, expected_event_name) + self.assertTrue(event.is_async) # type: ignore[attr-defined] + self.assertEqual(event.name, expected_event_name) # type: ignore[attr-defined] if rank == 0: - self.assertTrue(event.input_shapes in expected_shapes.values()) + self.assertTrue(event.input_shapes in expected_shapes.values()) # type: ignore[attr-defined] else: - self.assertEqual(event.input_shapes, expected_shapes[rank]) + self.assertEqual(event.input_shapes, expected_shapes[rank]) # type: ignore[attr-defined] @unittest.skipIf(BACKEND == "nccl", "Nccl does not support isend") def test_isend(self): @@ -1291,8 +1291,8 @@ def test_irecv(self): for src in range(1, world_size): requests[src - 1].wait() - self.assertTrue(requests[src - 1].is_completed()) - self.assertEqual(expected_tensors[src - 1], _build_tensor(src, 10)) + self.assertTrue(requests[src - 1].is_completed()) # type: ignore[attr-defined] + self.assertEqual(expected_tensors[src - 1], _build_tensor(src, 10)) # type: ignore[attr-defined] else: tensor = _build_tensor(rank, 10) dist.send(tensor, 0) @@ -1337,8 +1337,8 @@ def _test_broadcast_helper( self.call_dist_op(":broadcast", True, group_id.broadcast, [tensor], opts) else: self.call_dist_op(":broadcast", False, dist.broadcast, tensor, src, group_id) - self.assertEqual(tensor.size(), expected_tensor.size()) - self.assertEqual(tensor.ne(expected_tensor).max(), torch.tensor(False)) + self.assertEqual(tensor.size(), expected_tensor.size()) # type: ignore[attr-defined] + self.assertEqual(tensor.ne(expected_tensor).max(), torch.tensor(False)) # type: ignore[attr-defined] self._barrier() @@ -1388,8 +1388,8 @@ def test_nccl_high_priority_stream(self): store = dist.PrefixStore(new_port, store) opts = dist.ProcessGroupNCCL.Options() - opts.is_high_priority_stream = False - group_id = dist.ProcessGroupNCCL(store, rank, size, opts) + opts.is_high_priority_stream = False # type: ignore[attr-defined] + group_id = dist.ProcessGroupNCCL(store, rank, size, opts) # type: ignore[arg-type] self._test_broadcast_helper(group, group_id, rank, True, rank_to_GPU, True) @@ -1412,7 +1412,7 @@ def _test_reduce_helper( tensor = tensor.cuda(rank_to_GPU[rank][0]) self.call_dist_op(":reduce", False, dist.reduce, tensor, src, op, group_id, tensor_shapes=[tensor.shape]) if rank == src: - self.assertEqual(tensor, _build_tensor(src + 1, expected_value)) + self.assertEqual(tensor, _build_tensor(src + 1, expected_value)) # type: ignore[attr-defined] self._barrier() @@ -1578,7 +1578,7 @@ def _test_reduce_twice_helper( ) if rank == src: for tensor in tensors: - self.assertEqual(tensor, _build_tensor(src + 1, expected_value)) + self.assertEqual(tensor, _build_tensor(src + 1, expected_value)) # type: ignore[attr-defined] self._barrier() @@ -1641,13 +1641,13 @@ def test_all_reduce_result_cuda(self): # Here we have a race condition, we may not assume the work is not # finished by the time we run next lines. try: - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Work needs to be completed before calling result"): work.result() except AssertionError: # Exception was not raised, ensure is_completed() - self.assertTrue(work.is_completed()) + self.assertTrue(work.is_completed()) # type: ignore[attr-defined] work.wait() result = work.result() @@ -1658,7 +1658,7 @@ def test_all_reduce_result_cuda(self): work.wait() expected_value = 2 + (10 * (len(group) - 1)) - self.assertEqual(result, [_build_tensor(src + 1, expected_value)]) + self.assertEqual(result, [_build_tensor(src + 1, expected_value)]) # type: ignore[attr-defined] self._barrier() def call_dist_op( @@ -1696,14 +1696,14 @@ def call_dist_op( print(f'all events: {prof.function_events}') print(f'events: {events}') print(f'op_calls: {op_calls}') - self.assertEqual(len(events), len(op_calls)) + self.assertEqual(len(events), len(op_calls)) # type: ignore[attr-defined] for e in events: - self.assertTrue(e.is_async) - self.assertEqual(e.count, 1) - self.assertGreaterEqual(e.cpu_time, 0) + self.assertTrue(e.is_async) # type: ignore[attr-defined] + self.assertEqual(e.count, 1) # type: ignore[attr-defined] + self.assertGreaterEqual(e.cpu_time, 0) # type: ignore[attr-defined] # Verify tensor shapes if given if tensor_shapes is not None: - self.assertEqual(e.input_shapes, tensor_shapes, f"event shape: {e.input_shapes} vs tensor {tensor_shapes}") + self.assertEqual(e.input_shapes, tensor_shapes, f"event shape: {e.input_shapes} vs tensor {tensor_shapes}") # type: ignore[attr-defined] # ALL REDUCE def _test_all_reduce_helper( @@ -1795,7 +1795,7 @@ def test_all_reduce_sum_async(self): ) @skip_if_no_gpu def test_all_reduce_sum_cuda(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] group, group_id, rank = self._init_global_test() rank_to_GPU = self._init_multigpu_helper() self._test_all_reduce_helper( @@ -1816,7 +1816,7 @@ def test_all_reduce_sum_cuda(self): ) @skip_if_no_gpu def test_all_reduce_sum_cuda_async(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] group, group_id, rank = self._init_global_test() rank_to_GPU = self._init_multigpu_helper() self._test_all_reduce_helper( @@ -1852,7 +1852,7 @@ def test_all_reduce_complex_unsupported_ops(self): dist.ReduceOp.BAND, dist.ReduceOp.BOR, dist.ReduceOp.BXOR] group, group_id, rank = self._init_global_test() for unsupported_op in unsupported_ops: - with self.assertRaisesRegex(RuntimeError, "all_reduce does not support"): + with self.assertRaisesRegex(RuntimeError, "all_reduce does not support"): # type: ignore[attr-defined] dist.all_reduce(_build_tensor(1, dtype=torch.cfloat), unsupported_op, group_id) @unittest.skipIf( @@ -1861,7 +1861,7 @@ def test_all_reduce_complex_unsupported_ops(self): ) @skip_if_no_gpu def test_all_reduce_sum_cuda_complex(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] group, group_id, rank = self._init_global_test() rank_to_GPU = self._init_multigpu_helper() self._test_all_reduce_helper( @@ -1999,7 +1999,7 @@ def _test_sparse_all_reduce_sum(self, fn): for (inputs, outputs) in tests: tensors = [fn(input) for input in inputs] dist.all_reduce(tensors[0], dist.ReduceOp.SUM, group_id) - self.assertEqual(tensors[0], outputs[0]) + self.assertEqual(tensors[0], outputs[0]) # type: ignore[attr-defined] @unittest.skipIf(BACKEND != "gloo", "Only Gloo backend support sparse all reduce") def test_sparse_all_reduce_sum(self): @@ -2050,7 +2050,7 @@ def _all_reduce_coalesced_max_test_cases(group_size): @unittest.skipIf(BACKEND == "nccl", "Nccl does not support CPU tensors") def test_all_reduce_coalesced_max_complex_unsupported(self): group, group_id, rank = self._init_global_test() - with self.assertRaisesRegex(RuntimeError, "all_reduce does not support"): + with self.assertRaisesRegex(RuntimeError, "all_reduce does not support"): # type: ignore[attr-defined] dist.all_reduce_coalesced([_build_tensor(1, dtype=torch.cfloat)], dist.ReduceOp.MAX, group_id) def _test_all_reduce_coalesced_helper( @@ -2098,7 +2098,7 @@ def _test_all_reduce_coalesced_helper( _build_tensor(src + 1, expected_value, dtype=dtype) for dtype, expected_value in zip(dtypes, expected_values) ] - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] tensors, expected_tensors ) @@ -2271,7 +2271,7 @@ def _test_scatter_helper(self, group, group_id, rank): group=group_id, tensor_shapes=[t.shape for t in tensors] ) - self.assertEqual(tensor, expected_tensor) + self.assertEqual(tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() @@ -2287,7 +2287,7 @@ def test_scatter_checks(self): dist.scatter(output, src=0, scatter_list=scatter_list) else: dist.scatter(output, src=0) - self.assertEqual(output, one * rank) + self.assertEqual(output, one * rank) # type: ignore[attr-defined] # Don't specify src argument. output = one.clone() * -1 @@ -2296,7 +2296,7 @@ def test_scatter_checks(self): dist.scatter(output, scatter_list=scatter_list) else: dist.scatter(output) - self.assertEqual(output, one * rank) + self.assertEqual(output, one * rank) # type: ignore[attr-defined] @unittest.skipIf(BACKEND == "nccl", "Nccl does not support scatter") def test_scatter(self): @@ -2334,7 +2334,7 @@ def _test_gather_helper(self, group, group_id, rank): if rank == dest: expected_tensors = [_build_tensor(dest + 1, i) for i in group] for t1, t2 in zip(tensors, expected_tensors): - self.assertEqual(t1, t2) + self.assertEqual(t1, t2) # type: ignore[attr-defined] self._barrier() @@ -2348,7 +2348,7 @@ def test_gather_checks(self): gather_list = [one.clone() for _ in group] dist.gather(one * rank, dst=0, gather_list=gather_list) for i in group: - self.assertEqual(gather_list[i], one * i) + self.assertEqual(gather_list[i], one * i) # type: ignore[attr-defined] else: dist.gather(one * rank, dst=0) @@ -2357,7 +2357,7 @@ def test_gather_checks(self): gather_list = [one.clone() for _ in group] dist.gather(one * rank, gather_list=gather_list) for i in group: - self.assertEqual(gather_list[i], one * i) + self.assertEqual(gather_list[i], one * i) # type: ignore[attr-defined] else: dist.gather(one * rank) @@ -2395,7 +2395,7 @@ def _test_all_gather_helper( expected_tensors = [_build_tensor(dest + 1, i, dtype=dtype) for i in group] for t1, t2 in zip(tensors, expected_tensors): - self.assertEqual(t1, t2) + self.assertEqual(t1, t2) # type: ignore[attr-defined] self._barrier() @@ -2584,7 +2584,7 @@ def _test_all_to_all_single_equal_split_helper( group=group_id, tensor_shapes=[in_tensor.shape] ) - self.assertEqual(out_tensor, expected_tensor) + self.assertEqual(out_tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() def _test_all_to_all_single_unequal_split_helper( @@ -2608,7 +2608,7 @@ def _test_all_to_all_single_unequal_split_helper( out_tensor = out_tensor.cuda(rank_to_GPU[rank][0]) dist.all_to_all_single( out_tensor, in_tensor, out_splits, in_splits, group=group_id) - self.assertEqual(out_tensor, expected_tensor) + self.assertEqual(out_tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() def _test_all_to_all_helper( @@ -2633,7 +2633,7 @@ def _test_all_to_all_helper( out_tensors = [t.cuda(rank_to_GPU[rank][0]) for t in out_tensors] dist.all_to_all(out_tensors, in_tensors, group=group_id) for t1, t2 in zip(out_tensors, expected_tensors): - self.assertEqual(t1, t2) + self.assertEqual(t1, t2) # type: ignore[attr-defined] self._barrier() @unittest.skipIf( @@ -2834,7 +2834,7 @@ def _test_barrier_helper( else: dist.broadcast(expected_time, dest, group_id) dist.barrier(group_id) - self.assertGreaterAlmostEqual( + self.assertGreaterAlmostEqual( # type: ignore[attr-defined] float(time.time()), float(expected_time[0]), "destination rank: %d, my rank: %d" % (dest, rank) + @@ -2897,7 +2897,7 @@ def _test_broadcast_multigpu_helper(self, group, group_id, rank, rank_to_GPU): dist.broadcast_multigpu(tensors, src, group_id) for tensor in tensors: - self.assertEqual(tensor, expected_tensor) + self.assertEqual(tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() @unittest.skipIf(BACKEND == "mpi", "MPI doesn't support broadcast multigpu") @@ -2929,7 +2929,7 @@ def _test_all_reduce_multigpu_helper( self.call_dist_op(":all_reduce", False, dist.all_reduce_multigpu, tensors, op, group_id) expected_tensor = _build_tensor(src + 1, expected_value, dtype=dtype) for tensor in tensors: - self.assertEqual(tensor, expected_tensor) + self.assertEqual(tensor, expected_tensor) # type: ignore[attr-defined] self._barrier() @@ -2990,7 +2990,7 @@ def _test_reduce_multigpu_helper( expect_event=len(tensors) == 1, tensor_shapes=[tensors[0].shape]) if rank == src: expected_tensor = _build_tensor(src + 1, expected_value) - self.assertEqual(tensors[0], expected_tensor) + self.assertEqual(tensors[0], expected_tensor) # type: ignore[attr-defined] self._barrier() @@ -3035,7 +3035,7 @@ def _test_all_gather_multigpu_helper(self, group, group_id, rank, rank_to_GPU, d "all_gather", False, dist.all_gather_multigpu, output_tensors, tensors, group_id, expect_event=len(expected_output) == 1) - self.assertEqual(output_tensors, expected_output) + self.assertEqual(output_tensors, expected_output) # type: ignore[attr-defined] self._barrier() @@ -3088,12 +3088,12 @@ def _test_DDP_helper(self, model, input_var, target, loss, scale_factor=1.0, mem l = loss(output, target) * scale_factor l.backward() if memory_format is not None: - self.assertTrue(output.is_contiguous(memory_format=memory_format)) + self.assertTrue(output.is_contiguous(memory_format=memory_format)) # type: ignore[attr-defined] def _assert_equal_param(self, param_gpu, param_DDP): - self.assertEqual(len(param_gpu), len(param_DDP)) + self.assertEqual(len(param_gpu), len(param_DDP)) # type: ignore[attr-defined] for p_gpu, p_DDP in zip(param_gpu, param_DDP): - self.assertEqual(p_gpu, p_DDP) + self.assertEqual(p_gpu, p_DDP) # type: ignore[attr-defined] def _test_DDP_niter( self, model_base, model_DDP, input, target, loss, local_bs, rank, batch_size, test_save, @@ -3146,7 +3146,7 @@ def _test_DDP_niter( tmp_file.seek(0) saved_model = torch.load(tmp_file) for k in model_DDP.state_dict(): - self.assertEqual(model_DDP.state_dict()[k], saved_model.state_dict()[k]) + self.assertEqual(model_DDP.state_dict()[k], saved_model.state_dict()[k]) # type: ignore[attr-defined] def _test_DistributedDataParallel(self, gpu_subset, rank, output_device=None, gradient_as_bucket_view=False): # Run a simple end to end DDP model, use result of single node model @@ -3162,7 +3162,7 @@ def _test_DistributedDataParallel(self, gpu_subset, rank, output_device=None, gr # DDP training setup model_DDP = copy.deepcopy(model) model_DDP.cuda(gpu_subset[0]) - model_DDP = nn.parallel.DistributedDataParallel( + model_DDP = nn.parallel.DistributedDataParallel( # type: ignore[call-arg, assignment] model_DDP, device_ids=gpu_subset, gradient_as_bucket_view=gradient_as_bucket_view ) @@ -3204,7 +3204,7 @@ def _test_DistributedDataParallelCPU(self, gradient_as_bucket_view=False): # DDP-CPU training setup model_DDP = copy.deepcopy(model_base) - model_DDP = nn.parallel.DistributedDataParallel( + model_DDP = nn.parallel.DistributedDataParallel( # type: ignore[call-arg, assignment] model_DDP, gradient_as_bucket_view=gradient_as_bucket_view) # dummy data initialization @@ -3244,7 +3244,7 @@ def test_DistributedDataParallelCPU_grad_is_view(self): "Only Nccl & Gloo backend support DistributedDataParallel") def test_DistributedDataParallel_requires_grad(self): # a module without gradients shouldn't be accepted - self.assertRaises(AssertionError, lambda: nn.parallel.DistributedDataParallel(nn.Module())) + self.assertRaises(AssertionError, lambda: nn.parallel.DistributedDataParallel(nn.Module())) # type: ignore[attr-defined] self._barrier() @unittest.skipIf( @@ -3253,8 +3253,8 @@ def test_DistributedDataParallel_requires_grad(self): ) @skip_if_lt_x_gpu(int(os.environ["WORLD_SIZE"])) def test_DistributedDataParallel_non_default_stream(self): - stream = torch.cuda.Stream(self.rank) - rank = self.rank + stream = torch.cuda.Stream(self.rank) # type: ignore[attr-defined] + rank = self.rank # type: ignore[attr-defined] with torch.cuda.stream(stream): net = torch.nn.parallel.DistributedDataParallel( torch.nn.Linear(1, 1, bias=False).cuda(rank), device_ids=[rank] @@ -3264,14 +3264,14 @@ def test_DistributedDataParallel_non_default_stream(self): grad = net.module.weight.grad if grad is not None: grad.requires_grad_(False) - grad.zero_() + grad.zero_() # type: ignore[operator] # Forward + BW batch = torch.tensor([rank]).float().cuda(rank) loss = net(batch).sum() loss.backward() # For each worker, the gradient on the weight should be worker_rank. grad = net.module.weight.grad - avg = grad.clone() + avg = grad.clone() # type: ignore[operator] # All-reducing the gradient averages should give us the gradient # average. If not, then one of the workers has not correctly # written back the averaged gradient before this all-reduce call. @@ -3279,10 +3279,10 @@ def test_DistributedDataParallel_non_default_stream(self): world_size = int(os.environ["WORLD_SIZE"]) avg.div_(world_size) expected_grad = sum(i for i in range(world_size)) / world_size - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] avg[0, 0], expected_grad, - msg=f"Expected gradient of {expected_grad} but got {avg} on rank {self.rank}", + msg=f"Expected gradient of {expected_grad} but got {avg} on rank {self.rank}", # type: ignore[attr-defined] ) @unittest.skipIf( @@ -3308,47 +3308,47 @@ def test_ddp_comm_hook_logging(self): for hook in hooks: ddp_model = torch.nn.parallel.DistributedDataParallel( - torch.nn.Linear(1, 1, bias=False).cuda(self.rank), - device_ids=[self.rank] + torch.nn.Linear(1, 1, bias=False).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank] # type: ignore[attr-defined] ) - ddp_logging_data = ddp_model.get_ddp_logging_data() + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] # Hook not registered yet, so should be empty - self.assertEqual(ddp_logging_data.get("comm_hook"), None) - ddp_model.register_comm_hook(None, hook) - ddp_logging_data = ddp_model.get_ddp_logging_data() - self.assertEqual(ddp_logging_data.get("comm_hook"), hook.__qualname__) + self.assertEqual(ddp_logging_data.get("comm_hook"), None) # type: ignore[attr-defined] + ddp_model.register_comm_hook(None, hook) # type: ignore[operator] + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] + self.assertEqual(ddp_logging_data.get("comm_hook"), hook.__qualname__) # type: ignore[attr-defined] - for hook in cpp_builtin_hooks: + for hook in cpp_builtin_hooks: # type: ignore[assignment] ddp_model = torch.nn.parallel.DistributedDataParallel( - torch.nn.Linear(1, 1, bias=False).cuda(self.rank), - device_ids=[self.rank] + torch.nn.Linear(1, 1, bias=False).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank] # type: ignore[attr-defined] ) - ddp_logging_data = ddp_model.get_ddp_logging_data() + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] # Hook not registered yet, so should be empty - self.assertEqual(ddp_logging_data.get("comm_hook"), None) - ddp_model._register_builtin_comm_hook(hook) - ddp_logging_data = ddp_model.get_ddp_logging_data() - self.assertEqual(ddp_logging_data.get("comm_hook"), str(hook)) + self.assertEqual(ddp_logging_data.get("comm_hook"), None) # type: ignore[attr-defined] + ddp_model._register_builtin_comm_hook(hook) # type: ignore[operator] + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] + self.assertEqual(ddp_logging_data.get("comm_hook"), str(hook)) # type: ignore[attr-defined] # No hook registered ddp_model = torch.nn.parallel.DistributedDataParallel( - torch.nn.Linear(1, 1, bias=False).cuda(self.rank), - device_ids=[self.rank] + torch.nn.Linear(1, 1, bias=False).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank] # type: ignore[attr-defined] ) - ddp_logging_data = ddp_model.get_ddp_logging_data() + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] # Hook not registered yet, so should be empty - self.assertEqual(ddp_logging_data.get("comm_hook"), None) + self.assertEqual(ddp_logging_data.get("comm_hook"), None) # type: ignore[attr-defined] # After second forward pass, hook should still be empty string for i in range(2): - inp = torch.ones(1, 1, device=self.rank) + inp = torch.ones(1, 1, device=self.rank) # type: ignore[attr-defined] loss = ddp_model(inp).sum() loss.backward() - ddp_logging_data = ddp_model.get_ddp_logging_data() - self.assertEqual(ddp_logging_data.get("comm_hook"), None) + ddp_logging_data = ddp_model.get_ddp_logging_data() # type: ignore[operator] + self.assertEqual(ddp_logging_data.get("comm_hook"), None) # type: ignore[attr-defined] def _test_ddp_hook_parity(self, state, hook): - rank = self.rank + rank = self.rank # type: ignore[attr-defined] m = torch.nn.Linear(1, 5) try: process_group = state.process_group @@ -3358,7 +3358,7 @@ def _test_ddp_hook_parity(self, state, hook): net_with_hook = torch.nn.parallel.DistributedDataParallel( copy.deepcopy(m).to(rank), device_ids=[rank], process_group=process_group ) - net_with_hook.register_comm_hook(state=state, hook=hook) + net_with_hook.register_comm_hook(state=state, hook=hook) # type: ignore[operator] net_without_hook = torch.nn.parallel.DistributedDataParallel( copy.deepcopy(m).to(rank), device_ids=[rank], process_group=process_group ) @@ -3367,23 +3367,23 @@ def _test_ddp_hook_parity(self, state, hook): for g in [net_without_hook.module.weight.grad, net_with_hook.module.weight.grad]: if g is not None: g.requires_grad_(False) - g.zero_() + g.zero_() # type: ignore[operator] # Forward + BW batch = torch.tensor([rank]).float().cuda(rank) loss = net_without_hook(batch).sum() loss.backward() # For each worker, the gradient on the weight should be worker_rank. grad = net_without_hook.module.weight.grad - avg = grad.clone() + avg = grad.clone() # type: ignore[operator] expected_grad = sum(i for i in range(dist.get_world_size())) / dist.get_world_size() loss_hook = net_with_hook(batch).sum() loss_hook.backward() grad_hook = net_with_hook.module.weight.grad - avg_hook = grad_hook.clone() + avg_hook = grad_hook.clone() # type: ignore[operator] # Verify hook grad with expected. # Cannot use exact match here due to a very small accuracy loss, # e.g. 1e-05, for powerSGD hook case. - assert_func = self.assertEqual if hook == default.allreduce_hook else torch.testing.assert_allclose + assert_func = self.assertEqual if hook == default.allreduce_hook else torch.testing.assert_allclose # type: ignore[attr-defined] assert_func( avg_hook[0, 0], expected_grad, @@ -3445,7 +3445,7 @@ def _prepare_single_device_module( ): model = Net() device = devices[0] if devices else torch.device("cuda:%d" % rank) - ddp_model = DistributedDataParallel( + ddp_model = DistributedDataParallel( # type: ignore[call-arg] copy.deepcopy(model).to(device), device_ids=device_ids, process_group=process_group, @@ -3467,7 +3467,7 @@ def _prepare_cpu_module( gradient_as_bucket_view=False, ): model = Net() - ddp_model = DistributedDataParallel( + ddp_model = DistributedDataParallel( # type: ignore[call-arg] copy.deepcopy(model), process_group=process_group, bucket_cap_mb=0.001, @@ -3545,9 +3545,9 @@ def step_model(model, input, target): if not i.requires_grad: continue if iteration % num_iters == 0: - self.assertNotEqual(i.grad, j.grad) + self.assertNotEqual(i.grad, j.grad) # type: ignore[attr-defined] else: - self.assertEqual(i.grad, j.grad) + self.assertEqual(i.grad, j.grad) # type: ignore[attr-defined] # Shuffle the input so that DDP input is different @@ -3584,7 +3584,7 @@ def allreduce_hook( group_id: object, bucket: dist.GradBucket ) -> torch._C.Future: tensors = [bucket.get_tensor() / world_size] - return group_id.allreduce(tensors).get_future() + return group_id.allreduce(tensors).get_future() # type: ignore[attr-defined] self._test_accumulate_gradients_no_sync( num_iters=4, ddp_comm_hook=allreduce_hook @@ -3608,7 +3608,7 @@ def test_accumulate_gradients_no_sync_allreduce_with_then_hook(self): def allreduce_with_then_hook( group_id: object, bucket: dist.GradBucket ) -> torch.futures.Future: - fut = group_id.allreduce([bucket.get_tensor()]).get_future() + fut = group_id.allreduce([bucket.get_tensor()]).get_future() # type: ignore[attr-defined] def mult(fut): # Multiply the result by 2. @@ -3645,7 +3645,7 @@ def add(fut): res = fut.then(mult).then(add).wait() expected = _build_tensor(3, 2 * len(group) * 3 + 1) - self.assertEqual(res[0], expected) + self.assertEqual(res[0], expected) # type: ignore[attr-defined] @unittest.skipIf(BACKEND != 'nccl' and BACKEND != 'gloo', @@ -3691,8 +3691,8 @@ def _test_DistributedDataParallel_with_amp(self, grad_is_view=False): # Creates a GradScaler once at the beginning of training. scaler = GradScaler() - ddp_model = nn.parallel.DistributedDataParallel( - model, device_ids=[self.rank], gradient_as_bucket_view=grad_is_view) + ddp_model = nn.parallel.DistributedDataParallel( # type: ignore[call-arg] + model, device_ids=[self.rank], gradient_as_bucket_view=grad_is_view) # type: ignore[attr-defined] input = torch.randn(dist.get_world_size() * 2, 2).cuda() target = torch.randn(dist.get_world_size() * 2, 4).cuda() @@ -3700,8 +3700,8 @@ def _test_DistributedDataParallel_with_amp(self, grad_is_view=False): # verify grads are none before training for p in ddp_model.parameters(): - self.assertTrue(p is not None) - self.assertTrue(p.grad is None) + self.assertTrue(p is not None) # type: ignore[attr-defined] + self.assertTrue(p.grad is None) # type: ignore[attr-defined] for idx in range(20): optimizer.zero_grad() @@ -3718,9 +3718,9 @@ def _test_DistributedDataParallel_with_amp(self, grad_is_view=False): # verify grads are not none and are valid during training for p in ddp_model.parameters(): if p.requires_grad: - self.assertTrue(p.grad is not None) - self.assertFalse(p.grad.isnan().any()) - self.assertFalse(p.grad.isinf().any()) + self.assertTrue(p.grad is not None) # type: ignore[attr-defined] + self.assertFalse(p.grad.isnan().any()) # type: ignore[attr-defined] + self.assertFalse(p.grad.isinf().any()) # type: ignore[attr-defined] # scaler.step() first unscales the gradients of the optimizer's assigned params. # If these gradients do not contain infs or NaNs, optimizer.step() is then called, @@ -3740,11 +3740,11 @@ def _test_DistributedDataParallel_with_amp(self, grad_is_view=False): "Only Nccl & Gloo backend support DistributedDataParallel") @skip_if_no_gpu def test_DistributedDataParallel_with_amp_and_grad_is_view(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] ddp_model_grad_not_view = self._test_DistributedDataParallel_with_amp(grad_is_view=False) ddp_model_grad_is_view = self._test_DistributedDataParallel_with_amp(grad_is_view=True) for i, j in zip(ddp_model_grad_not_view.parameters(), ddp_model_grad_is_view.parameters()): - self.assertEqual(i, j) + self.assertEqual(i, j) # type: ignore[attr-defined] def _test_DistributedDataParallel_SyncBatchNorm(self, gpu_subset, rank, local_bs, global_bs, offset, output_device=None, affine=True): @@ -3814,8 +3814,8 @@ def test_DistributedDataParallel_SyncBatchNorm_Channels_Last(self): ) memory_format = torch.channels_last - input_gpu = torch.randn(global_bs, 2, 4, 4, dtype=torch.float).cuda(rank).to(memory_format=memory_format) - target_gpu = torch.randn(global_bs, 2, 4, 4, dtype=torch.float).cuda(rank).to(memory_format=memory_format) + input_gpu = torch.randn(global_bs, 2, 4, 4, dtype=torch.float).cuda(rank).to(memory_format=memory_format) # type: ignore[call-overload] + target_gpu = torch.randn(global_bs, 2, 4, 4, dtype=torch.float).cuda(rank).to(memory_format=memory_format) # type: ignore[call-overload] loss = nn.MSELoss() # check two model parameters over 5 iterations @@ -4053,9 +4053,9 @@ def _test_ddp_logging_data(self, is_gpu): rank = dist.get_rank() model_DDP = copy.deepcopy(DDP_NET) if is_gpu: - model_DDP = nn.parallel.DistributedDataParallel(model_DDP.cuda(rank), device_ids=[rank]) + model_DDP = nn.parallel.DistributedDataParallel(model_DDP.cuda(rank), device_ids=[rank]) # type: ignore[assignment] else: - model_DDP = nn.parallel.DistributedDataParallel(model_DDP) + model_DDP = nn.parallel.DistributedDataParallel(model_DDP) # type: ignore[assignment] # dummy data initialization local_bs = 2 @@ -4064,7 +4064,7 @@ def _test_ddp_logging_data(self, is_gpu): input = input.cuda(rank) target = target.cuda(rank) - model_DDP.set_ddp_runtime_logging_sample_rate(2) + model_DDP.set_ddp_runtime_logging_sample_rate(2) # type: ignore[operator] for idx in range(20): offset = rank * local_bs @@ -4085,23 +4085,23 @@ def _test_ddp_logging_data(self, is_gpu): # the sampled iteration for measuring run time stats, # the run time stats for this idx-th iteration will not # be zeros. - ddp_logging_data = model_DDP.get_ddp_logging_data() + ddp_logging_data = model_DDP.get_ddp_logging_data() # type: ignore[operator] if (idx > 0 and (idx < 10 or idx % 2 == 0)): - self.assertGreaterEqual(ddp_logging_data.get("forward_compute_time"), 1) - self.assertGreaterEqual(ddp_logging_data.get("backward_compute_time"), 1) - self.assertGreaterEqual(ddp_logging_data.get("backward_comm_time"), 1) - self.assertGreaterEqual( + self.assertGreaterEqual(ddp_logging_data.get("forward_compute_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(ddp_logging_data.get("backward_compute_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(ddp_logging_data.get("backward_comm_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("backward_compute_time"), ddp_logging_data.get("backward_compute_comm_overlap_time")) - self.assertGreaterEqual( + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("backward_comm_time"), ddp_logging_data.get("backward_compute_comm_overlap_time")) - self.assertEqual(ddp_logging_data.get("iteration"), idx) + self.assertEqual(ddp_logging_data.get("iteration"), idx) # type: ignore[attr-defined] elif idx > 0: # if the idx-th iteration is not sampled to set runtime stats, # ddp_logging_data.iteration will not be updated to current # iteration. - self.assertNotEqual(ddp_logging_data.get("iteration"), idx) + self.assertNotEqual(ddp_logging_data.get("iteration"), idx) # type: ignore[attr-defined] # Shuffle the input so that DDP input is different input = input[torch.randperm(batch_size)] @@ -4119,19 +4119,19 @@ def parse_env(var): model_DDP = self._test_ddp_logging_data(is_gpu=False) ddp_logging_data = model_DDP.get_ddp_logging_data() - self.assertEqual(ddp_logging_data.get("world_size"), dist.get_world_size()) - self.assertEqual(ddp_logging_data.get("rank"), dist.get_rank()) - self.assertEqual(ddp_logging_data.get("module_name"), 'Net') - self.assertEqual(ddp_logging_data.get("device_ids"), "") + self.assertEqual(ddp_logging_data.get("world_size"), dist.get_world_size()) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("rank"), dist.get_rank()) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("module_name"), 'Net') # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("device_ids"), "") # type: ignore[attr-defined] # output_device is -1 in default if it is not set, e.g. # output_device of CPU training is -1. - self.assertEqual(ddp_logging_data.get("output_device"), -1) - self.assertEqual(ddp_logging_data.get("broadcast_buffers"), 1) - self.assertEqual(ddp_logging_data.get("bucket_cap_bytes"), 25 * 1024 * 1024) - self.assertEqual(ddp_logging_data.get("find_unused_parameters"), 0) - self.assertEqual(ddp_logging_data.get("gradient_as_bucket_view"), 0) - self.assertEqual(ddp_logging_data.get("backend_name"), dist.get_backend(group_id)) - self.assertEqual(ddp_logging_data.get("iteration"), 18) + self.assertEqual(ddp_logging_data.get("output_device"), -1) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("broadcast_buffers"), 1) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("bucket_cap_bytes"), 25 * 1024 * 1024) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("find_unused_parameters"), 0) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("gradient_as_bucket_view"), 0) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("backend_name"), dist.get_backend(group_id)) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("iteration"), 18) # type: ignore[attr-defined] params = list(model_DDP.parameters()) num_params = 0 param_size = 0 @@ -4139,35 +4139,35 @@ def parse_env(var): for p in params: num_params += 1 param_size += p.numel() * p.element_size() - self.assertEqual(ddp_logging_data.get("dtypes"), "float") - self.assertEqual(ddp_logging_data.get("total_parameter_size_bytes"), param_size) - self.assertEqual(ddp_logging_data.get("num_parameter_tensors"), num_params) - self.assertEqual(ddp_logging_data.get("bucket_sizes"), str(param_size)) - self.assertEqual(ddp_logging_data.get("master_port"), parse_env("MASTER_PORT")) - self.assertEqual(ddp_logging_data.get("master_addr"), parse_env("MASTER_ADDR")) - self.assertEqual(ddp_logging_data.get("cuda_visible_devices"), parse_env("CUDA_VISIBLE_DEVICES")) + self.assertEqual(ddp_logging_data.get("dtypes"), "float") # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("total_parameter_size_bytes"), param_size) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("num_parameter_tensors"), num_params) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("bucket_sizes"), str(param_size)) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("master_port"), parse_env("MASTER_PORT")) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("master_addr"), parse_env("MASTER_ADDR")) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("cuda_visible_devices"), parse_env("CUDA_VISIBLE_DEVICES")) # type: ignore[attr-defined] if ddp_logging_data.get("backend_name") == "gloo": - self.assertEqual(ddp_logging_data.get("gloo_socket_ifname"), parse_env("GLOO_SOCKET_IFNAME")) - self.assertEqual(ddp_logging_data.get("gloo_device_transport"), parse_env("GLOO_DEVICE_TRANSPORT")) - self.assertEqual(ddp_logging_data.get("nccl_socket_ifname"), None) - self.assertEqual(ddp_logging_data.get("nccl_blocking_wait"), None) - self.assertEqual(ddp_logging_data.get("nccl_async_error_handling"), None) - self.assertEqual(ddp_logging_data.get("nccl_debug"), None) - self.assertEqual(ddp_logging_data.get("nccl_nthreads"), None) - self.assertEqual(ddp_logging_data.get("nccl_ib_timeout"), None) + self.assertEqual(ddp_logging_data.get("gloo_socket_ifname"), parse_env("GLOO_SOCKET_IFNAME")) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("gloo_device_transport"), parse_env("GLOO_DEVICE_TRANSPORT")) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_socket_ifname"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_blocking_wait"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_async_error_handling"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_debug"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_nthreads"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("nccl_ib_timeout"), None) # type: ignore[attr-defined] # test runtime logging fields - self.assertEqual(ddp_logging_data.get("unused_parameter_size"), None) - self.assertEqual(ddp_logging_data.get("has_rebuilt_buckets"), 1) - self.assertEqual(ddp_logging_data.get("rebuilt_bucket_sizes"), str(param_size)) + self.assertEqual(ddp_logging_data.get("unused_parameter_size"), None) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("has_rebuilt_buckets"), 1) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("rebuilt_bucket_sizes"), str(param_size)) # type: ignore[attr-defined] # It is hard to test accurate latency, but it can test whether the latency is # a valid value and in the expected range. - self.assertGreaterEqual(ddp_logging_data.get("avg_forward_compute_time"), 1) - self.assertGreaterEqual(ddp_logging_data.get("avg_backward_compute_time"), 1) - self.assertGreaterEqual(ddp_logging_data.get("avg_backward_comm_time"), 1) - self.assertGreaterEqual( + self.assertGreaterEqual(ddp_logging_data.get("avg_forward_compute_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(ddp_logging_data.get("avg_backward_compute_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(ddp_logging_data.get("avg_backward_comm_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("avg_backward_compute_time"), ddp_logging_data.get("avg_backward_compute_comm_overlap_time")) - self.assertGreaterEqual( + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("avg_backward_comm_time"), ddp_logging_data.get("avg_backward_compute_comm_overlap_time")) # test larger net with mixed data types, verify multiple bucket sizes @@ -4177,12 +4177,12 @@ def parse_env(var): model_DDP = nn.parallel.DistributedDataParallel(model, bucket_cap_mb=1.5) ddp_logging_data = model_DDP.get_ddp_logging_data() params = list(model_DDP.parameters()) - self.assertEqual(ddp_logging_data.get("bucket_cap_bytes"), int(1.5 * 1024 * 1024)) + self.assertEqual(ddp_logging_data.get("bucket_cap_bytes"), int(1.5 * 1024 * 1024)) # type: ignore[attr-defined] bucket_sizes = [params[1].numel() * params[1].element_size(), params[0].numel() * params[0].element_size()] - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] ddp_logging_data.get("bucket_sizes"), ', '.join(str(x) for x in bucket_sizes)) - self.assertEqual(ddp_logging_data.get("dtypes"), 'double, float') + self.assertEqual(ddp_logging_data.get("dtypes"), 'double, float') # type: ignore[attr-defined] @unittest.skipIf(BACKEND != 'nccl' and BACKEND != 'gloo', "Only Nccl & Gloo backend support DistributedDataParallel") @@ -4191,17 +4191,17 @@ def test_ddp_logging_data_gpu(self): group, group_id, rank = self._init_global_test() model_DDP = self._test_ddp_logging_data(is_gpu=True) ddp_logging_data = model_DDP.get_ddp_logging_data() - self.assertEqual(ddp_logging_data.get("device_ids"), str(rank)) - self.assertEqual(ddp_logging_data.get("output_device"), rank) + self.assertEqual(ddp_logging_data.get("device_ids"), str(rank)) # type: ignore[attr-defined] + self.assertEqual(ddp_logging_data.get("output_device"), rank) # type: ignore[attr-defined] # test runtime logging fields # It is hard to test accurate latency, but it can test whether the latency is # a valid value and in the expected range. - self.assertGreaterEqual(ddp_logging_data.get("avg_forward_compute_time"), 1) - self.assertGreaterEqual(ddp_logging_data.get("avg_backward_compute_comm_overlap_time"), 1) - self.assertGreaterEqual( + self.assertGreaterEqual(ddp_logging_data.get("avg_forward_compute_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(ddp_logging_data.get("avg_backward_compute_comm_overlap_time"), 1) # type: ignore[attr-defined] + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("avg_backward_compute_time"), ddp_logging_data.get("avg_backward_compute_comm_overlap_time")) - self.assertGreaterEqual( + self.assertGreaterEqual( # type: ignore[attr-defined] ddp_logging_data.get("avg_backward_comm_time"), ddp_logging_data.get("avg_backward_compute_comm_overlap_time")) @@ -4210,9 +4210,9 @@ def test_ddp_logging_data_gpu(self): ) def test_static_graph_api_cpu(self): model_DDP = nn.parallel.DistributedDataParallel(DDP_NET) - model_DDP._set_static_graph() - self.assertEqual(model_DDP.get_ddp_logging_data().get("static_graph"), True) - with self.assertRaisesRegex(RuntimeError, 'should be called before training loop starts'): + model_DDP._set_static_graph() # type: ignore[operator] + self.assertEqual(model_DDP.get_ddp_logging_data().get("static_graph"), True) # type: ignore[attr-defined, operator] + with self.assertRaisesRegex(RuntimeError, 'should be called before training loop starts'): # type: ignore[attr-defined] local_bs = 2 batch_size, input, target, loss = self._prepare_dummy_data(local_bs) offset = dist.get_rank() * local_bs @@ -4225,7 +4225,7 @@ def test_static_graph_api_cpu(self): loss, 1, ) - model_DDP._set_static_graph() + model_DDP._set_static_graph() # type: ignore[operator] @skipIfNoTorchVision def test_SyncBatchNorm_process_group(self): @@ -4238,7 +4238,7 @@ def test_SyncBatchNorm_process_group(self): res50_model = torchvision.models.resnet50() res50_model_sync = nn.SyncBatchNorm.convert_sync_batchnorm(copy.deepcopy(res50_model), process_group) process_group_sync = res50_model_sync.layer1[0].bn1.process_group - self.assertEqual(process_group_sync, process_group) + self.assertEqual(process_group_sync, process_group) # type: ignore[attr-defined] def _run_reduction_test( self, tensor, expected_tensor, op, reduction_fn=dist.all_reduce, dst=None @@ -4249,26 +4249,26 @@ def _run_reduction_test( reduction_fn(tensor, dst, op) # Only destination rank tensor is expected to have final result. if dist.get_rank() == dst: - self.assertEqual(tensor, expected_tensor) + self.assertEqual(tensor, expected_tensor) # type: ignore[attr-defined] else: reduction_fn(tensor, op) - self.assertEqual(tensor, expected_tensor) + self.assertEqual(tensor, expected_tensor) # type: ignore[attr-defined] @require_backend({"nccl"}) @require_backends_available({"nccl"}) @skip_if_lt_x_gpu(2) def test_nccl_backend_bool_allreduce(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] # Run all_reduce with PRODUCT - element = self.rank % 2 == 0 + element = self.rank % 2 == 0 # type: ignore[attr-defined] for op in [dist.ReduceOp.PRODUCT, dist.ReduceOp.MIN]: - input_tensor = torch.tensor([element, element]).to(self.rank) + input_tensor = torch.tensor([element, element]).to(self.rank) # type: ignore[attr-defined] self._run_reduction_test( - input_tensor, torch.tensor([False, False]).to(self.rank), op + input_tensor, torch.tensor([False, False]).to(self.rank), op # type: ignore[attr-defined] ) # Ensure that all ranks contributing True (cast to 1) results in the # correct reduction. - input_tensor = torch.tensor([True, True]).to(self.rank) + input_tensor = torch.tensor([True, True]).to(self.rank) # type: ignore[attr-defined] expected_tensor = input_tensor.clone() self._run_reduction_test( input_tensor, expected_tensor, op @@ -4276,9 +4276,9 @@ def test_nccl_backend_bool_allreduce(self): # Run all_reduce with SUM for op in [dist.ReduceOp.SUM, dist.ReduceOp.MAX]: - input_tensor = torch.tensor([element, element]).to(self.rank) + input_tensor = torch.tensor([element, element]).to(self.rank) # type: ignore[attr-defined] self._run_reduction_test( - input_tensor, torch.tensor([True, True]).to(self.rank), op + input_tensor, torch.tensor([True, True]).to(self.rank), op # type: ignore[attr-defined] ) # TODO: NCCL backend does not work correctly for bitwise reduction ops # (see https://github.com/pytorch/pytorch/issues/41362). Add tests for @@ -4288,51 +4288,51 @@ def test_nccl_backend_bool_allreduce(self): @require_backends_available({"nccl"}) @skip_if_lt_x_gpu(2) def test_nccl_backend_bool_allgather(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] inp = {0: [True, True], 1: [False, True]} - input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) + input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) # type: ignore[attr-defined] # Preserve a copy of the tensor to compare against after allgather. input_tensor_copy = input_tensor.clone() tensor_list = [ - torch.tensor([False, False]).to(self.rank) + torch.tensor([False, False]).to(self.rank) # type: ignore[attr-defined] for _ in range(dist.get_world_size()) ] dist.all_gather(tensor_list, input_tensor) - self.assertEqual(len(tensor_list), dist.get_world_size()) + self.assertEqual(len(tensor_list), dist.get_world_size()) # type: ignore[attr-defined] for i, t in enumerate(tensor_list): - expected = torch.tensor(inp[i % 2]).to(self.rank) - self.assertEqual(t, expected) + expected = torch.tensor(inp[i % 2]).to(self.rank) # type: ignore[attr-defined] + self.assertEqual(t, expected) # type: ignore[attr-defined] # Ensure that the input tensor is not modified, since this collective # does not modify its input. - self.assertEqual(input_tensor_copy, input_tensor) + self.assertEqual(input_tensor_copy, input_tensor) # type: ignore[attr-defined] @require_backend({"nccl"}) @require_backends_available({"nccl"}) @skip_if_lt_x_gpu(int(os.environ["WORLD_SIZE"])) def test_nccl_backend_bool_reduce(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] inp = {0: [True, True], 1: [False, False]} # Run reduce() with product op for op in [dist.ReduceOp.PRODUCT, dist.ReduceOp.MIN]: - input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) - expected = torch.tensor([False, False]).to(self.rank) + input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) # type: ignore[attr-defined] + expected = torch.tensor([False, False]).to(self.rank) # type: ignore[attr-defined] self._run_reduction_test( input_tensor, expected, op, dist.reduce, dst=0 ) # Ensure that all ranks contributing True (cast to 1) results in the # correct reduction. - input_tensor = torch.tensor([True, True]).to(self.rank) + input_tensor = torch.tensor([True, True]).to(self.rank) # type: ignore[attr-defined] expected_tensor = input_tensor.clone() self._run_reduction_test( input_tensor, expected_tensor, op, dist.reduce, dst=0 ) for op in [dist.ReduceOp.SUM, dist.ReduceOp.MAX]: - input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) + input_tensor = torch.tensor(inp[self.rank % 2]).to(self.rank) # type: ignore[attr-defined] expected = ( - torch.tensor([True, True]).to(self.rank) - if self.rank == 0 + torch.tensor([True, True]).to(self.rank) # type: ignore[attr-defined] + if self.rank == 0 # type: ignore[attr-defined] else input_tensor.clone() ) self._run_reduction_test( @@ -4346,20 +4346,20 @@ def test_nccl_backend_bool_broadcast(self): tensor_size = 10 bcast_tensor = torch.tensor( [ - (random.random() < 0.5 if self.rank == 0 else False) + (random.random() < 0.5 if self.rank == 0 else False) # type: ignore[attr-defined] for _ in range(tensor_size) ] - ).to(self.rank) + ).to(self.rank) # type: ignore[attr-defined] dist.broadcast(bcast_tensor, src=0) # Now allgather and ensure the tensors are equal. tensor_list = [ - torch.tensor([False for _ in range(tensor_size)]).to(self.rank) + torch.tensor([False for _ in range(tensor_size)]).to(self.rank) # type: ignore[attr-defined] for _ in range(dist.get_world_size()) ] dist.all_gather(tensor_list, bcast_tensor) expected = tensor_list[0] for tensor in tensor_list[1:]: - self.assertEqual(tensor, expected) + self.assertEqual(tensor, expected) # type: ignore[attr-defined] @unittest.skipIf( BACKEND != "nccl" and BACKEND != "gloo", @@ -4372,14 +4372,14 @@ def test_DistributedSampler_padding(self): # Simulates the 'casual' dataset size dataset_size = 100 + world_size + 1 - dataset = [torch.ones(1).to(self.rank) * i for i in range(dataset_size)] + dataset = [torch.ones(1).to(self.rank) * i for i in range(dataset_size)] # type: ignore[attr-defined] # Simulates the 'tiny' dataset size dataset_tiny_size = max(world_size // 2 - 1, 1) - dataset_tiny = [torch.ones(1).to(self.rank) * i for i in range(dataset_tiny_size)] + dataset_tiny = [torch.ones(1).to(self.rank) * i for i in range(dataset_tiny_size)] # type: ignore[attr-defined] # Specifying drop_last=True will cause the tail of the data to be dropped. - dist_sampler = DistributedSampler(dataset=dataset, drop_last=True) + dist_sampler = DistributedSampler(dataset=dataset, drop_last=True) # type: ignore[var-annotated, arg-type] local_num_samples, local_dataset_size = ( dist_sampler.num_samples, dist_sampler.total_size, @@ -4392,54 +4392,54 @@ def test_DistributedSampler_padding(self): if dataset_size % world_size != 0 else dataset_size / world_size ) - self.assertEqual(local_num_samples, effective_dataset_size) - self.assertEqual(local_dataset_size, local_num_samples * world_size) + self.assertEqual(local_num_samples, effective_dataset_size) # type: ignore[attr-defined] + self.assertEqual(local_dataset_size, local_num_samples * world_size) # type: ignore[attr-defined] indices_list = list(iter(dist_sampler)) - self.assertEqual(len(indices_list), local_num_samples) + self.assertEqual(len(indices_list), local_num_samples) # type: ignore[attr-defined] def validate_global_samples(local_num_samples): # Ensure that each rank processes the same number of samples. world_samples = [ - torch.LongTensor([0]).to(self.rank) for _ in range(world_size) + torch.LongTensor([0]).to(self.rank) for _ in range(world_size) # type: ignore[attr-defined] ] - dist.all_gather(world_samples, torch.tensor([local_num_samples]).to(self.rank)) - world_samples = [sample.item() for sample in world_samples] - self.assertEqual(len(set(world_samples)), 1) + dist.all_gather(world_samples, torch.tensor([local_num_samples]).to(self.rank)) # type: ignore[attr-defined] + world_samples = [sample.item() for sample in world_samples] # type: ignore[misc] + self.assertEqual(len(set(world_samples)), 1) # type: ignore[attr-defined] validate_global_samples(local_num_samples) # drop_last=False is the default and will add additional indices to be sampled, # increasing the effective dataset size. - dist_sampler_added_samples = DistributedSampler(dataset=dataset) + dist_sampler_added_samples = DistributedSampler(dataset=dataset) # type: ignore[var-annotated, arg-type] local_num_samples, local_dataset_size = ( dist_sampler_added_samples.num_samples, dist_sampler_added_samples.total_size, ) # The effective dataset size is the smallest integer that is >= dataset_size # and divisible by the world size. - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] local_num_samples, math.ceil(dataset_size / world_size) ) - self.assertEqual(local_dataset_size, local_num_samples * world_size) + self.assertEqual(local_dataset_size, local_num_samples * world_size) # type: ignore[attr-defined] indices_list = list(iter(dist_sampler_added_samples)) - self.assertEqual(len(indices_list), local_num_samples) + self.assertEqual(len(indices_list), local_num_samples) # type: ignore[attr-defined] # Ensure that each rank processes the same number of samples. validate_global_samples(local_num_samples) # Ensure additional samples are padded even when # the extremely small dataset is given. - dist_sampler_added_samples_tiny = DistributedSampler(dataset=dataset_tiny) + dist_sampler_added_samples_tiny = DistributedSampler(dataset=dataset_tiny) # type: ignore[var-annotated, arg-type] local_num_samples, local_dataset_size = ( dist_sampler_added_samples_tiny.num_samples, dist_sampler_added_samples_tiny.total_size, ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] local_num_samples, math.ceil(dataset_tiny_size / world_size) ) - self.assertEqual(local_dataset_size, local_num_samples * world_size) + self.assertEqual(local_dataset_size, local_num_samples * world_size) # type: ignore[attr-defined] indices_list = list(iter(dist_sampler_added_samples_tiny)) - self.assertEqual(len(indices_list), local_num_samples) + self.assertEqual(len(indices_list), local_num_samples) # type: ignore[attr-defined] validate_global_samples(local_num_samples) @@ -4450,27 +4450,27 @@ def test_allgather_object(self): backend = os.environ["BACKEND"] if backend == "nccl": # Case where rank != GPU device. - next_rank = (self.rank + 1) % int(self.world_size) + next_rank = (self.rank + 1) % int(self.world_size) # type: ignore[attr-defined] torch.cuda.set_device(next_rank) # If GPU test, add object with GPU tensor if backend == "nccl": - COLLECTIVES_OBJECT_TEST_LIST.append(Foo(torch.randn(3, 3, device=0))) + COLLECTIVES_OBJECT_TEST_LIST.append(Foo(torch.randn(3, 3, device=0))) # type: ignore[call-overload] gather_objects = COLLECTIVES_OBJECT_TEST_LIST output_gathered = [None for _ in range(dist.get_world_size())] dist.all_gather_object( - output_gathered, gather_objects[self.rank % len(gather_objects)] + output_gathered, gather_objects[self.rank % len(gather_objects)] # type: ignore[attr-defined] ) for i, val in enumerate(output_gathered): expected = gather_objects[i % len(gather_objects)] - self.assertEqual(val, expected) + self.assertEqual(val, expected) # type: ignore[attr-defined] output_gathered = [None for _ in range(dist.get_world_size())] dist.all_gather_object( - output_gathered, gather_objects[self.rank % len(gather_objects)] + output_gathered, gather_objects[self.rank % len(gather_objects)] # type: ignore[attr-defined] ) @require_backend({"gloo"}) @@ -4482,18 +4482,18 @@ def test_gather_object(self): gather_on_rank = 0 my_rank = dist.get_rank() dist.gather_object( - gather_objects[self.rank % len(gather_objects)], + gather_objects[self.rank % len(gather_objects)], # type: ignore[attr-defined] object_gather_list=output_gathered if my_rank == gather_on_rank else None, dst=gather_on_rank, ) if my_rank != gather_on_rank: - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] output_gathered, [None for _ in range(dist.get_world_size())] ) else: for i, val in enumerate(output_gathered): expected = gather_objects[i % len(gather_objects)] - self.assertEqual(val, expected) + self.assertEqual(val, expected) # type: ignore[attr-defined] # Validate errors when objects can't be pickled. class Bar: @@ -4501,9 +4501,9 @@ class Bar: b = Bar() gather_objects = [b for _ in range(dist.get_world_size())] - with self.assertRaisesRegex(AttributeError, "Can't pickle local object"): + with self.assertRaisesRegex(AttributeError, "Can't pickle local object"): # type: ignore[attr-defined] dist.all_gather_object( - [None for _ in range(dist.get_world_size())], gather_objects[self.rank] + [None for _ in range(dist.get_world_size())], gather_objects[self.rank] # type: ignore[attr-defined] ) @require_backend({"nccl"}) @@ -4516,7 +4516,7 @@ def test_nccl_gather_object_err(self): my_rank = dist.get_rank() next_rank = (my_rank + 1) % dist.get_world_size() torch.cuda.set_device(next_rank) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "ProcessGroupNCCL does not support gather" ): dist.gather_object( @@ -4537,7 +4537,7 @@ def validate_net_equivalence(self, net): ] dist.all_gather(tensor_list, t) for tensor in tensor_list: - self.assertEqual(tensor, t) + self.assertEqual(tensor, t) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) @unittest.skipIf( @@ -4548,13 +4548,13 @@ def test_ddp_sync_params_and_buffers(self): # Test that after calling _sync_params_and_buffers, models across ranks # are the same and are equal to the model on the input rank. dim = 2 - rank = self.rank + rank = self.rank # type: ignore[attr-defined] rank_to_broadcast = 1 # Seed to ensure that ranks are initialized with different initial models. torch.manual_seed(rank) model = nn.Linear(dim, dim, bias=False) net = torch.nn.parallel.DistributedDataParallel( - model.cuda(rank), device_ids=[self.rank], bucket_cap_mb=1 + model.cuda(rank), device_ids=[self.rank], bucket_cap_mb=1 # type: ignore[attr-defined] ) new_model = nn.Linear(dim, dim, bias=False).cuda(rank) net.module = copy.deepcopy(new_model) @@ -4567,12 +4567,12 @@ def test_ddp_sync_params_and_buffers(self): dist.all_gather(tensor_list, t) for i, tensor in enumerate(tensor_list): if i == rank: - self.assertEqual(t, tensor) + self.assertEqual(t, tensor) # type: ignore[attr-defined] else: # tensor from another rank should be different. - self.assertNotEqual(t, tensor) + self.assertNotEqual(t, tensor) # type: ignore[attr-defined] - net._sync_params_and_buffers(authoritative_rank=rank_to_broadcast) + net._sync_params_and_buffers(authoritative_rank=rank_to_broadcast) # type: ignore[operator] # Now all model params should be the same. self.validate_net_equivalence(net) # Since the network params were broadcast from rank_to_broadcast, validate that @@ -4580,7 +4580,7 @@ def test_ddp_sync_params_and_buffers(self): if rank == rank_to_broadcast: expected_states = new_model.state_dict().values() for t, expected in zip(net_module_states, expected_states): - self.assertEqual(t, expected) + self.assertEqual(t, expected) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) @unittest.skipIf( @@ -4594,17 +4594,17 @@ def test_ddp_grad_div_uneven_inputs(self): dim = 5 batch = 1 grad_scale = 50 - rank = self.rank + rank = self.rank # type: ignore[attr-defined] model = nn.Linear(dim, dim, bias=False) - inp = torch.ones(batch, dim, device=self.rank) * grad_scale + inp = torch.ones(batch, dim, device=self.rank) * grad_scale # type: ignore[attr-defined] net = torch.nn.parallel.DistributedDataParallel( - model.cuda(rank), device_ids=[self.rank], bucket_cap_mb=1 + model.cuda(rank), device_ids=[self.rank], bucket_cap_mb=1 # type: ignore[attr-defined] ) n_iters = 3 - if self.rank > 0: + if self.rank > 0: # type: ignore[attr-defined] n_iters += 2 - with net.join(divide_by_initial_world_size=False): + with net.join(divide_by_initial_world_size=False): # type: ignore[operator] for _ in range(n_iters): loss = net(inp).sum() loss.backward() @@ -4612,16 +4612,16 @@ def test_ddp_grad_div_uneven_inputs(self): # of currently active processes and inactive processes contribute # zero gradient. If we kept dividing by static initial world # size as processes leave, the grad would be smaller. - expected_grad = torch.ones(dim, dim, device=self.rank) * grad_scale + expected_grad = torch.ones(dim, dim, device=self.rank) * grad_scale # type: ignore[attr-defined] param = list(net.parameters())[0] - self.assertEqual(expected_grad, param.grad) + self.assertEqual(expected_grad, param.grad) # type: ignore[attr-defined] # Avoid accumulating grads so that it's the same every iteration net.zero_grad() - torch.cuda.synchronize(device=self.rank) + torch.cuda.synchronize(device=self.rank) # type: ignore[attr-defined] # If divide_by_initial_world_size=True (default), we always scale grads # by the initial world_size. - with net.join(divide_by_initial_world_size=True): + with net.join(divide_by_initial_world_size=True): # type: ignore[operator] for i in range(n_iters): loss = net(inp).sum() loss.backward() @@ -4629,25 +4629,25 @@ def test_ddp_grad_div_uneven_inputs(self): if i >= 3: effective_ws -= 1 expected_grad = ( - torch.ones(dim, dim, device=self.rank) * grad_scale * effective_ws + torch.ones(dim, dim, device=self.rank) * grad_scale * effective_ws # type: ignore[attr-defined] ) / dist.get_world_size() param = list(net.parameters())[0] - self.assertEqual(expected_grad, param.grad) + self.assertEqual(expected_grad, param.grad) # type: ignore[attr-defined] # Avoid accumulating grad so that it's the same every iteration. net.zero_grad() - torch.cuda.synchronize(device=self.rank) + torch.cuda.synchronize(device=self.rank) # type: ignore[attr-defined] def _test_ddp_profiling(self, profiler_ctx): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] batch = 3 dim = 10 num_iters = 6 - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] model = nn.Linear(dim, dim, bias=False) - inp = torch.rand(batch, dim, device=self.rank) + inp = torch.rand(batch, dim, device=self.rank) # type: ignore[attr-defined] net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) profiler_ctx_copy = copy.deepcopy(profiler_ctx) @@ -4659,25 +4659,25 @@ def _test_ddp_profiling(self, profiler_ctx): all_reduce_event_name = f"{dist.get_backend()}:all_reduce" events = get_profiling_event(all_reduce_event_name, prof) event_count = sum(e.count for e in events) - self.assertEqual(event_count, num_iters) + self.assertEqual(event_count, num_iters) # type: ignore[attr-defined] for event in events: - self.assertTrue(event.is_async) - self.assertEqual(event.name, all_reduce_event_name) + self.assertTrue(event.is_async) # type: ignore[attr-defined] + self.assertEqual(event.name, all_reduce_event_name) # type: ignore[attr-defined] broadcast_event_name = f"{dist.get_backend()}:broadcast" broadcast_events = get_profiling_event(broadcast_event_name, prof) event_count = sum(e.count for e in broadcast_events) # Broadcast is called during rebuild_buckets - self.assertGreaterEqual(event_count, 1) + self.assertGreaterEqual(event_count, 1) # type: ignore[attr-defined] for event in broadcast_events: - self.assertEqual(event.name, broadcast_event_name) + self.assertEqual(event.name, broadcast_event_name) # type: ignore[attr-defined] # Run DDP with profiling for a few iterations, then enable profiling # for a single pass, and ensure it is recorded. This tests that the # thread local state is correctly updated. net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=True ) for i in range(3): @@ -4689,14 +4689,14 @@ def _test_ddp_profiling(self, profiler_ctx): loss.backward() events = get_profiling_event(all_reduce_event_name, prof) - self.assertGreaterEqual(len(events), 1) - self.assertGreaterEqual(events[0].count, 1) - self.assertEqual(events[0].name, all_reduce_event_name) + self.assertGreaterEqual(len(events), 1) # type: ignore[attr-defined] + self.assertGreaterEqual(events[0].count, 1) # type: ignore[attr-defined] + self.assertEqual(events[0].name, all_reduce_event_name) # type: ignore[attr-defined] for event in events: - self.assertTrue(event.is_async) + self.assertTrue(event.is_async) # type: ignore[attr-defined] # Ensure searching unused parameters was profiled events = get_profiling_event("search_unused_parameters", prof) - self.assertEqual(len(events), 1) + self.assertEqual(len(events), 1) # type: ignore[attr-defined] @require_backend({"gloo", "nccl"}) @require_backends_available({"gloo", "nccl"}) @@ -4733,9 +4733,9 @@ def test_ddp_join_model_equivalence(self): dim = 10 learning_rate = 0.03 model = nn.Linear(dim, dim, bias=False) - inp = torch.rand(batch, dim, device=self.rank) + inp = torch.rand(batch, dim, device=self.rank) # type: ignore[attr-defined] local_model = copy.deepcopy(model) - local_model = local_model.cuda(self.rank) + local_model = local_model.cuda(self.rank) # type: ignore[attr-defined] rank_to_iter_mapping = {rank : 2 * (rank + 1) for rank in range(dist.get_world_size())} # run local model local_iters = sum(rank_to_iter_mapping.values()) @@ -4748,34 +4748,34 @@ def test_ddp_join_model_equivalence(self): local_optim.step() # run DDP model with join API - num_iters = rank_to_iter_mapping[self.rank] + num_iters = rank_to_iter_mapping[self.rank] # type: ignore[attr-defined] net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), device_ids=[self.rank] + model.cuda(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) ddp_optim = torch.optim.SGD( model.parameters(), lr=learning_rate * dist.get_world_size() ) - with net.join(): + with net.join(): # type: ignore[operator] for i in range(num_iters): ddp_optim.zero_grad() out = net(inp) loss = out.sum() loss.backward() - torch.cuda.synchronize(device=self.rank) + torch.cuda.synchronize(device=self.rank) # type: ignore[attr-defined] ddp_optim.step() # Validate model state dicts are equal for (_, local_tensor), (_, dist_tensor) in zip( local_model.state_dict().items(), net.module.state_dict().items() ): - self.assertEqual(local_tensor, dist_tensor) + self.assertEqual(local_tensor, dist_tensor) # type: ignore[attr-defined] def _run_uneven_inputs_test( self, test_case, iteration_mapping, find_unused_params, ): model = test_case.model inp = test_case.inp - rank = self.rank + rank = self.rank # type: ignore[attr-defined] sync_interval = test_case.sync_interval torch.cuda.set_device(rank) # Ensure all outsanding GPU work is comlete so this test runs independently. @@ -4793,31 +4793,31 @@ def _run_uneven_inputs_test( num_iters = iteration_mapping[rank] # If we throw when earliest rank terminates, we should ensure # that we iterate for that minimum number of times. - num_iters_tensor = torch.tensor([num_iters], device=torch.cuda.current_device()) + num_iters_tensor = torch.tensor([num_iters], device=torch.cuda.current_device()) # type: ignore[arg-type] dist.all_reduce(num_iters_tensor, op=dist.ReduceOp.MIN) min_num_iters = num_iters_tensor.item() total_iters = 0 if test_case.throw_on_early_termination: if min_num_iters == num_iters: # Early termination rank(s) - exception_ctx = self.assertRaisesRegex( - RuntimeError, f"Rank {self.rank} exhausted all inputs" + exception_ctx = self.assertRaisesRegex( # type: ignore[attr-defined] + RuntimeError, f"Rank {self.rank} exhausted all inputs" # type: ignore[attr-defined] ) else: # Non early termination rank - exception_ctx = self.assertRaisesRegex( + exception_ctx = self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Detected at least one rank that exhausted inputs." ) else: exception_ctx = suppress() with exception_ctx: - with net.join(throw_on_early_termination=test_case.throw_on_early_termination): + with net.join(throw_on_early_termination=test_case.throw_on_early_termination): # type: ignore[operator] for i in range(num_iters): # Use model.no_sync() to disable grad synchronization every # sync_interval. if i % sync_interval != 0: - context = net.no_sync() + context = net.no_sync() # type: ignore[operator] else: context = suppress() with context: @@ -4834,10 +4834,10 @@ def _run_uneven_inputs_test( total_iters += 1 if test_case.throw_on_early_termination: # Ensure we iterated min_num_iters times. - self.assertEqual(total_iters, min_num_iters) + self.assertEqual(total_iters, min_num_iters) # type: ignore[attr-defined] else: # Ensure we iterated at least min_num_iters times. - self.assertGreaterEqual(total_iters, min_num_iters) + self.assertGreaterEqual(total_iters, min_num_iters) # type: ignore[attr-defined] # Ensure completion of all GPU kernels. torch.cuda.synchronize(device=rank) @@ -4845,21 +4845,21 @@ def _run_uneven_inputs_test( # broadcast model state from an authoritative rank. All models # should already be in sync. if not test_case.throw_on_early_termination: - self.assertTrue(net._authoritative_rank) + self.assertTrue(net._authoritative_rank) # type: ignore[attr-defined] # All ranks should have agreed on the same authoritative_rank! - final_rank_tensor = torch.tensor([net._authoritative_rank], device=self.rank) + final_rank_tensor = torch.tensor([net._authoritative_rank], device=self.rank) # type: ignore[attr-defined] tensor_list = [ torch.zeros_like(final_rank_tensor) for _ in range(dist.get_world_size()) ] dist.all_gather(tensor_list, final_rank_tensor) max_rank = dist.get_world_size() - 1 - self.assertSetEqual({max_rank}, set(tensor.item() for tensor in tensor_list)) + self.assertSetEqual({max_rank}, set(tensor.item() for tensor in tensor_list)) # type: ignore[attr-defined] # Ensure that all models are the same across ranks after all have joined. self.validate_net_equivalence(net) # Ensure that running with DDP uneven inputs was logged. - ddp_logging_data = net.get_ddp_logging_data() - self.assertTrue(ddp_logging_data.get("join_uneven_inputs")) + ddp_logging_data = net.get_ddp_logging_data() # type: ignore[operator] + self.assertTrue(ddp_logging_data.get("join_uneven_inputs")) # type: ignore[attr-defined] dist.barrier() @skip_if_lt_x_gpu(2) @@ -4881,43 +4881,43 @@ def forward(self, x): dist.all_reduce(x) return x - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] model_bn = BN_NET model_bn = nn.SyncBatchNorm.convert_sync_batchnorm( copy.deepcopy(model_bn) - ).cuda(self.rank) - comm_model = ModelWithComm().cuda(self.rank) + ).cuda(self.rank) # type: ignore[attr-defined] + comm_model = ModelWithComm().cuda(self.rank) # type: ignore[attr-defined] model_input = torch.randn(10, 2).cuda(torch.cuda.current_device()) for model in [model_bn, comm_model]: model = torch.nn.parallel.DistributedDataParallel( model, - device_ids=[self.rank], + device_ids=[self.rank], # type: ignore[attr-defined] ) min_num_iters = 5 - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] # Early termination rank(s) num_iters = min_num_iters - exception_ctx = self.assertRaisesRegex( - RuntimeError, f"Rank {self.rank} exhausted all inputs" + exception_ctx = self.assertRaisesRegex( # type: ignore[attr-defined] + RuntimeError, f"Rank {self.rank} exhausted all inputs" # type: ignore[attr-defined] ) else: # Non early termination rank num_iters = min_num_iters * 2 - exception_ctx = self.assertRaisesRegex( + exception_ctx = self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Detected at least one rank that exhausted inputs." ) n = 0 with exception_ctx: - with model.join(throw_on_early_termination=True): + with model.join(throw_on_early_termination=True): # type: ignore[operator] for i in range(num_iters): loss = model(model_input).sum() loss.backward() self._model_step(model) n += 1 - self.assertEqual(n, min_num_iters) + self.assertEqual(n, min_num_iters) # type: ignore[attr-defined] # Verify model equivalence self.validate_net_equivalence(model) @@ -4961,25 +4961,25 @@ def forward(self, x, rank): unjoined_rank_with_unused_params_model = UnusedParamModule(1) joined_rank_with_unused_params_model = UnusedParamModule(0) - rank = self.rank + rank = self.rank # type: ignore[attr-defined] models_to_test = [ # Network with batchnorm DDPUnevenTestInput( name="batch_norm_net", model=bn_net, - inp=torch.ones(batch, 2, device=rank), + inp=torch.ones(batch, 2, device=rank), # type: ignore[arg-type] sync_interval=1 ), DDPUnevenTestInput( name="large_conv_model", model=large_model, - inp=torch.ones(batch, batch, dim, dim, device=rank), + inp=torch.ones(batch, batch, dim, dim, device=rank), # type: ignore[arg-type] sync_interval=1, ), DDPUnevenTestInput( name="small_model", model=small_model, - inp=torch.ones(batch, dim, device=rank), + inp=torch.ones(batch, dim, device=rank), # type: ignore[arg-type] sync_interval=1, ), # Unused parameter test where rank that does not join early has unused params @@ -5005,7 +5005,7 @@ def forward(self, x, rank): DDPUnevenTestInput( name="resnet_model", model=resnet_model, - inp=torch.ones(1, 3, 1000, 1000), + inp=torch.ones(1, 3, 1000, 1000), # type: ignore[arg-type] sync_interval=1, ) ) @@ -5075,7 +5075,7 @@ def forward(self, x, rank): for (test_case, iteration_mapping) in itertools.product( models_to_test, iteration_mappings ): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] print( f"""Running test: {test_case.name} sync interval {test_case.sync_interval} with iteration mapping @@ -5095,32 +5095,32 @@ def forward(self, x, rank): def test_ddp_uneven_input_join_disable(self): # tests that if net.join() with enable=False is specified, DDP works as # expected with even inputs. - torch.manual_seed(self.rank) + torch.manual_seed(self.rank) # type: ignore[attr-defined] net = torch.nn.parallel.DistributedDataParallel( - torch.nn.Linear(1, 1).cuda(self.rank), device_ids=[self.rank] + torch.nn.Linear(1, 1).cuda(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) - inp = torch.ones(1) * self.rank + inp = torch.ones(1) * self.rank # type: ignore[attr-defined] n_iters = 5 world_size = dist.get_world_size() - with net.join(enable=False): + with net.join(enable=False): # type: ignore[operator] for _ in range(n_iters): # Clear grads grad = net.module.weight.grad if grad is not None: grad.requires_grad_(False) - grad.zero_() + grad.zero_() # type: ignore[operator] out = net(inp) loss = out.sum() loss.backward() # Validate gradients to ensure that we divide by the correct # world_size when join mode is disabled. expected_grad = sum(i for i in range(world_size)) / world_size - self.assertEqual( - net.module.weight.grad.item(), expected_grad + self.assertEqual( # type: ignore[attr-defined] + net.module.weight.grad.item(), expected_grad # type: ignore[operator] ) join_config = net.ddp_uneven_inputs_config - self.assertFalse(join_config.ddp_join_enabled) + self.assertFalse(join_config.ddp_join_enabled) # type: ignore[attr-defined, union-attr] self.validate_net_equivalence(net) @skip_if_lt_x_gpu(2) @@ -5143,11 +5143,11 @@ def forward(self, _): exception_module = ExceptionModule() net = torch.nn.parallel.DistributedDataParallel( - exception_module.cuda(self.rank), device_ids=[self.rank] + exception_module.cuda(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) inp = torch.ones(1) - with self.assertRaisesRegex(ValueError, error_str): - with net.join(): + with self.assertRaisesRegex(ValueError, error_str): # type: ignore[attr-defined] + with net.join(): # type: ignore[operator] out = net(inp) loss = out.sum() loss.backward() @@ -5159,32 +5159,32 @@ def test_broadcast_object_list(self): backend = os.environ["BACKEND"] if backend == "nccl": # Case where rank != GPU device. - next_rank = (self.rank + 1) % int(self.world_size) + next_rank = (self.rank + 1) % int(self.world_size) # type: ignore[attr-defined] torch.cuda.set_device(next_rank) src_rank = 0 # If GPU test, add object with GPU tensor if backend == "nccl": - COLLECTIVES_OBJECT_TEST_LIST.append(Foo(torch.randn(3, 3, device=0))) + COLLECTIVES_OBJECT_TEST_LIST.append(Foo(torch.randn(3, 3, device=0))) # type: ignore[call-overload] objects = ( COLLECTIVES_OBJECT_TEST_LIST - if self.rank == src_rank + if self.rank == src_rank # type: ignore[attr-defined] else [None for _ in COLLECTIVES_OBJECT_TEST_LIST] ) # Single object test single_obj_list = [objects[0]] - if self.rank != src_rank: - self.assertNotEqual(single_obj_list[0], COLLECTIVES_OBJECT_TEST_LIST[0]) + if self.rank != src_rank: # type: ignore[attr-defined] + self.assertNotEqual(single_obj_list[0], COLLECTIVES_OBJECT_TEST_LIST[0]) # type: ignore[attr-defined] dist.broadcast_object_list(single_obj_list, src=0) - self.assertEqual(single_obj_list[0], COLLECTIVES_OBJECT_TEST_LIST[0]) + self.assertEqual(single_obj_list[0], COLLECTIVES_OBJECT_TEST_LIST[0]) # type: ignore[attr-defined] # Multiple input objects test - if self.rank != src_rank: - self.assertNotEqual(objects, COLLECTIVES_OBJECT_TEST_LIST) + if self.rank != src_rank: # type: ignore[attr-defined] + self.assertNotEqual(objects, COLLECTIVES_OBJECT_TEST_LIST) # type: ignore[attr-defined] dist.broadcast_object_list(objects, src=0) - self.assertEqual(objects, COLLECTIVES_OBJECT_TEST_LIST) + self.assertEqual(objects, COLLECTIVES_OBJECT_TEST_LIST) # type: ignore[attr-defined] @require_backend({"gloo", "nccl"}) @require_backends_available({"gloo", "nccl"}) @@ -5207,14 +5207,14 @@ def forward(self, x): x = self.fc2(x) return x - device_id = self.rank + device_id = self.rank # type: ignore[attr-defined] # Ensure the test works for both find_unused_parameter and broadcast_buffer settings. for (find_unused, broadcast_buffers) in itertools.product([False, True], [False, True]): - model = TestModel(self.rank).float().to(device_id) + model = TestModel(self.rank).float().to(device_id) # type: ignore[attr-defined] # Note that the model can have different shape buffers if we pass # them in to be ignored as well. model.fc2.register_buffer( - "ignore_buffer", torch.zeros(5 + self.rank, device=self.rank) + "ignore_buffer", torch.zeros(5 + self.rank, device=self.rank) # type: ignore[attr-defined] ) proxy_params = list(model.fc2.parameters()) proxy_buffers = list(model.fc2.buffers()) @@ -5233,7 +5233,7 @@ def forward(self, x): ] # Specify that we should ignore proxy_params since it will be # materialized later. - torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( + torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( # type: ignore[attr-defined] model, proxy_param_names + proxy_buffer_names ) ddp = torch.nn.parallel.DistributedDataParallel( @@ -5246,32 +5246,32 @@ def forward(self, x): # don't have autograd hooks installed on them. ddp.module.fc2 = nn.Linear(1, 1, bias=False).to(device_id) # local model with the new materialized parameters. - local_model = copy.deepcopy(ddp.module).cuda(self.rank) + local_model = copy.deepcopy(ddp.module).cuda(self.rank) # type: ignore[attr-defined] - inp = torch.ones(1, dtype=torch.float).to(device_id) * (self.rank + 1) + inp = torch.ones(1, dtype=torch.float).to(device_id) * (self.rank + 1) # type: ignore[attr-defined] for i in range(6): ddp(inp).sum().backward() local_model(inp).sum().backward() # materialized param grad is not touched by DDP, so its grad should # be the same as if running locally. for materialized_param, local_param in zip( - ddp.module.fc2.parameters(), local_model.fc2.parameters() + ddp.module.fc2.parameters(), local_model.fc2.parameters() # type: ignore[union-attr] ): - self.assertEqual(materialized_param.grad, local_param.grad) + self.assertEqual(materialized_param.grad, local_param.grad) # type: ignore[attr-defined] # fc1 parameter grad should still be different, due to allreduce. for synced_param, local_param in zip( - ddp.module.fc1.parameters(), local_model.fc1.parameters() + ddp.module.fc1.parameters(), local_model.fc1.parameters() # type: ignore[union-attr] ): - self.assertFalse(synced_param.grad == local_param.grad) + self.assertFalse(synced_param.grad == local_param.grad) # type: ignore[attr-defined] # Proxy module grad should not be touched for proxy_param in proxy_params: - self.assertTrue(proxy_param.grad is None) + self.assertTrue(proxy_param.grad is None) # type: ignore[attr-defined] # Synchronize since we run multiple iterations of this test, to # isolate failure hangs. - torch.cuda.synchronize(device=self.rank) + torch.cuda.synchronize(device=self.rank) # type: ignore[attr-defined] @with_dist_debug_levels(levels=["OFF", "INFO", "DETAIL"]) @require_backend({"gloo", "nccl"}) @@ -5288,7 +5288,7 @@ def forward(self, x): return self.net1(x) ddp = torch.nn.parallel.DistributedDataParallel( - ToyModel().cuda(self.rank), device_ids=[self.rank] + ToyModel().cuda(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) for i in range(2): inp = torch.rand(1, 10) @@ -5312,16 +5312,16 @@ def forward(self, x): else: unreduced_params = ", ".join(['net2.weight']) expected_strs.append( - f"did not receive grad for rank {self.rank}: {unreduced_params}" + f"did not receive grad for rank {self.rank}: {unreduced_params}" # type: ignore[attr-defined] ) for s in expected_strs: - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] s in msg, f"Expected {s} to be in {msg}" ) - self.assertFalse(ddp_find_unused_params_enabled_str in msg) + self.assertFalse(ddp_find_unused_params_enabled_str in msg) # type: ignore[attr-defined] else: - self.assertFalse(True, "DDP unused parameters error not raised.") + self.assertFalse(True, "DDP unused parameters error not raised.") # type: ignore[attr-defined] else: ddp(inp).sum().backward() @@ -5348,12 +5348,12 @@ def __init__(self): def forward(self, x): return self.net2(x) - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] model = ToyModel().to(torch.cuda.current_device()) ddp_model = torch.nn.parallel.DistributedDataParallel( - model, device_ids=[self.rank], find_unused_parameters=True + model, device_ids=[self.rank], find_unused_parameters=True # type: ignore[attr-defined] ) - inp = torch.randn(20, 10, device=self.rank) + inp = torch.randn(20, 10, device=self.rank) # type: ignore[attr-defined] for i in range(6): out = ddp_model(inp) loss = out.sum() @@ -5363,7 +5363,7 @@ def forward(self, x): @require_backends_available({"gloo", "nccl"}) @skip_if_lt_x_gpu(2) def test_ddp_device(self): - m = nn.Linear(10, 10).to(self.rank) + m = nn.Linear(10, 10).to(self.rank) # type: ignore[attr-defined] expected_len = 2 class TensorWrapper: @@ -5377,28 +5377,28 @@ def __init__(self, t): # the input type. def tuple_and_list_validator(x): - self.assertTrue(len(x), expected_len) - self.assertEqual(1, len(set(t.device for t in x))) - self.assertEqual(x[0].device.index, self.rank) + self.assertTrue(len(x), expected_len) # type: ignore[attr-defined] + self.assertEqual(1, len(set(t.device for t in x))) # type: ignore[attr-defined] + self.assertEqual(x[0].device.index, self.rank) # type: ignore[attr-defined] return x[0] + x[1] def namedtuple_validator(x): - self.assertEqual(x._fields, EXPECTED_FIELDS) - self.assertEqual(x.a.device.index, x.b.device.index) - self.assertEqual(x.a.device.index, self.rank) + self.assertEqual(x._fields, EXPECTED_FIELDS) # type: ignore[attr-defined] + self.assertEqual(x.a.device.index, x.b.device.index) # type: ignore[attr-defined] + self.assertEqual(x.a.device.index, self.rank) # type: ignore[attr-defined] return x.a + x.b def custom_type_validator(x): - self.assertTrue(x.moved_to_gpu or (str(x.t.device) == "cpu")) - x.t = x.t.to(self.rank) + self.assertTrue(x.moved_to_gpu or (str(x.t.device) == "cpu")) # type: ignore[attr-defined] + x.t = x.t.to(self.rank) # type: ignore[attr-defined] x.moved_to_gpu = True return x.t def dict_validator(x): - self.assertTrue(EXPECTED_FIELDS[0] in x.keys()) - self.assertTrue(EXPECTED_FIELDS[1] in x.keys()) - self.assertEqual(1, len(set(t.device for t in x.values()))) - self.assertEqual(x[EXPECTED_FIELDS[0]].device.index, self.rank) + self.assertTrue(EXPECTED_FIELDS[0] in x.keys()) # type: ignore[attr-defined] + self.assertTrue(EXPECTED_FIELDS[1] in x.keys()) # type: ignore[attr-defined] + self.assertEqual(1, len(set(t.device for t in x.values()))) # type: ignore[attr-defined] + self.assertEqual(x[EXPECTED_FIELDS[0]].device.index, self.rank) # type: ignore[attr-defined] return x[EXPECTED_FIELDS[0]] + x[EXPECTED_FIELDS[1]] validators = { @@ -5418,12 +5418,12 @@ def __init__(_self): # noqa: B902 def forward(_self, x, expected_type): # noqa: B902 # Similar to scatter, the recursive to in the single-device # case does not move tensors if they are in a custom type. - self.assertTrue(isinstance(x, expected_type)) + self.assertTrue(isinstance(x, expected_type)) # type: ignore[attr-defined] fwd_tensor = validators[expected_type](x) return _self.lin(fwd_tensor) model = torch.nn.parallel.DistributedDataParallel( - ToyModel().to(self.rank), device_ids=[self.rank] + ToyModel().to(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) def train_iter(inp, input_type): @@ -5438,11 +5438,11 @@ def train_iter(inp, input_type): # List CPU input, should be moved to proper device before call to # forward. - inp = [torch.randn(10, 10) for _ in range(expected_len)] + inp = [torch.randn(10, 10) for _ in range(expected_len)] # type: ignore[assignment] train_iter(inp, list) # Custom type containing tensor. The type is maintained, but the # device is not propagated (which is what happens with scatter too) - inp = TensorWrapper(torch.randn(10, 10)) + inp = TensorWrapper(torch.randn(10, 10)) # type: ignore[assignment] train_iter(inp, TensorWrapper) # NamedTuple input. The type should be maintained and tensor inputs # should be moved to the correct device as in scatter. @@ -5451,14 +5451,14 @@ def train_iter(inp, input_type): a = torch.rand(batch, dim) b = torch.rand(batch, dim) - inp = TestNamedTupleInput_0(a, b) + inp = TestNamedTupleInput_0(a, b) # type: ignore[call-arg] train_iter(inp, type(inp)) inp = TestNamedTupleInput_1(a, b) train_iter(inp, type(inp)) # dictionary input. - inp = { + inp = { # type: ignore[assignment] EXPECTED_FIELDS[0]: a, EXPECTED_FIELDS[1]: b, } @@ -5471,8 +5471,8 @@ def test_ddp_namedtuple(self): batch = 5 dim = 10 - a = torch.rand(batch, dim, device=self.rank) - b = torch.rand(batch, dim, device=self.rank) + a = torch.rand(batch, dim, device=self.rank) # type: ignore[attr-defined] + b = torch.rand(batch, dim, device=self.rank) # type: ignore[attr-defined] class NamedTupleModule(torch.nn.Module): def __init__(_self): # noqa: B902 @@ -5481,23 +5481,23 @@ def __init__(_self): # noqa: B902 def forward(_self, input, expected_type): # noqa: B902 # Without NamedTuple support, this would be of type tuple. - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] isinstance(input, expected_type), f"Expected type {expected_type} but got {type(input)}", ) - self.assertEqual(input._fields, EXPECTED_FIELDS) - self.assertEqual(a, input.a) - self.assertEqual(b, input.b) + self.assertEqual(input._fields, EXPECTED_FIELDS) # type: ignore[attr-defined] + self.assertEqual(a, input.a) # type: ignore[attr-defined] + self.assertEqual(b, input.b) # type: ignore[attr-defined] return _self.lin(torch.mul(input.a, input.b)) model = torch.nn.parallel.DistributedDataParallel( - NamedTupleModule().cuda(self.rank), device_ids=[self.rank] + NamedTupleModule().cuda(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) - inp = TestNamedTupleInput_0(a, b) + inp = TestNamedTupleInput_0(a, b) # type: ignore[call-arg] # The following would fail if DDP does not propagate NamedTuples correctly. model(inp, type(inp)) - inp = TestNamedTupleInput_1(a, b) + inp = TestNamedTupleInput_1(a, b) # type: ignore[assignment] model(inp, type(inp)) @with_dist_debug_levels(levels=["OFF", "INFO", "DETAIL"]) @@ -5526,14 +5526,14 @@ def forward(self, x): return F.relu(self.lin1(x)) world_size = dist.get_world_size() - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] model = torch.nn.parallel.DistributedDataParallel( - ToyModel().cuda(self.rank), - device_ids=[self.rank], + ToyModel().cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=True, ) - random_input = torch.randn(batch, dim, device=self.rank) - ones_input = torch.ones(batch, dim, device=self.rank) + random_input = torch.randn(batch, dim, device=self.rank) # type: ignore[attr-defined] + ones_input = torch.ones(batch, dim, device=self.rank) # type: ignore[attr-defined] for i in range(6): if i % 2 == 0: out = model(random_input) @@ -5543,21 +5543,21 @@ def forward(self, x): loss.backward() # On even iterations, 2nd param goes unused, on odd iterations, # it is used. - local_used_maps = model.reducer._get_local_used_maps() + local_used_maps = model.reducer._get_local_used_maps() # type: ignore[union-attr, operator] if i % 2 == 0: - expected = torch.tensor([world_size, 0], device=self.rank, dtype=torch.int32) + expected = torch.tensor([world_size, 0], device=self.rank, dtype=torch.int32) # type: ignore[attr-defined] else: - expected = torch.tensor([world_size, world_size], device=self.rank, dtype=torch.int32) + expected = torch.tensor([world_size, world_size], device=self.rank, dtype=torch.int32) # type: ignore[attr-defined] # Validate parameter usage. variable_usage_tensor = local_used_maps[0] - self.assertEqual(variable_usage_tensor, expected) + self.assertEqual(variable_usage_tensor, expected) # type: ignore[attr-defined] # Validate appropriate error message when DDP is used with # find_unused_parameters=False. model = torch.nn.parallel.DistributedDataParallel( - ToyModel().cuda(self.rank), - device_ids=[self.rank], + ToyModel().cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=False, ) for i in range(2): @@ -5576,7 +5576,7 @@ def forward(self, x): ddp_prev_reduction_unfinished_str, ddp_recommend_find_unused_params_str, ddp_outputs_not_used_in_loss_str, - f"Parameter indices which did not receive grad for rank {self.rank}: {unused_param_index}" + f"Parameter indices which did not receive grad for rank {self.rank}: {unused_param_index}" # type: ignore[attr-defined] ] # In debug mode, should show parameters that weren't reduced. # Without debug mode, should show suggestion to use debug mode. @@ -5585,16 +5585,16 @@ def forward(self, x): else: unreduced_params = ", ".join(['lin2.weight']) expected_strs.append( - f"did not receive grad for rank {self.rank}: {unreduced_params}" + f"did not receive grad for rank {self.rank}: {unreduced_params}" # type: ignore[attr-defined] ) for s in expected_strs: - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] s in msg, f"Expected {s} to be in {msg}" ) - self.assertFalse(ddp_find_unused_params_enabled_str in msg) + self.assertFalse(ddp_find_unused_params_enabled_str in msg) # type: ignore[attr-defined] else: - self.assertFalse(True, "DDP error not raised") + self.assertFalse(True, "DDP error not raised") # type: ignore[attr-defined] dist.barrier() @@ -5628,14 +5628,14 @@ def forward(self, x): return F.relu(self.lin1(x)) world_size = dist.get_world_size() - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] model = torch.nn.parallel.DistributedDataParallel( - ToyModel(self.rank).cuda(self.rank), - device_ids=[self.rank], + ToyModel(self.rank).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=True, ) - random_input = torch.randn(batch, dim, device=self.rank) - ones_input = torch.ones(batch, dim, device=self.rank) + random_input = torch.randn(batch, dim, device=self.rank) # type: ignore[attr-defined] + ones_input = torch.ones(batch, dim, device=self.rank) # type: ignore[attr-defined] for i in range(6): if i % 2 == 0: out = model(random_input) @@ -5645,23 +5645,23 @@ def forward(self, x): loss.backward() # On even iterations, 2nd param goes unused, on odd iterations, # it is used only on rank 1. - local_used_maps = model.reducer._get_local_used_maps() + local_used_maps = model.reducer._get_local_used_maps() # type: ignore[union-attr, operator] if i % 2 == 0: - expected = torch.tensor([world_size, 0], device=self.rank, dtype=torch.int32) + expected = torch.tensor([world_size, 0], device=self.rank, dtype=torch.int32) # type: ignore[attr-defined] else: - expected = torch.tensor([world_size, 1], device=self.rank, dtype=torch.int32) + expected = torch.tensor([world_size, 1], device=self.rank, dtype=torch.int32) # type: ignore[attr-defined] variable_usage_tensor = local_used_maps[0] # Validate parameter usage. On odd iterations, 2nd param is only # used on rank 1. - self.assertEqual(variable_usage_tensor, expected) + self.assertEqual(variable_usage_tensor, expected) # type: ignore[attr-defined] # Validate appropriate error message when DDP is used with # find_unused_parameters=False. model = torch.nn.parallel.DistributedDataParallel( - ToyModel(self.rank).cuda(self.rank), - device_ids=[self.rank], + ToyModel(self.rank).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=False, ) for i in range(2): @@ -5679,7 +5679,7 @@ def forward(self, x): ddp_prev_reduction_unfinished_str, ddp_recommend_find_unused_params_str, ddp_outputs_not_used_in_loss_str, - f"Parameter indices which did not receive grad for rank {self.rank}: {unused_param_index}" + f"Parameter indices which did not receive grad for rank {self.rank}: {unused_param_index}" # type: ignore[attr-defined] ] # In debug mode, should show parameters that weren't reduced. # Without debug mode, should show suggestion to use debug mode. @@ -5688,16 +5688,16 @@ def forward(self, x): else: unreduced_params = ", ".join(['lin2.weight']) expected_strs.append( - f"did not receive grad for rank {self.rank}: {unreduced_params}" + f"did not receive grad for rank {self.rank}: {unreduced_params}" # type: ignore[attr-defined] ) for s in expected_strs: - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] s in msg, f"Expected {s} to be in {msg}" ) - self.assertFalse(ddp_find_unused_params_enabled_str in msg) + self.assertFalse(ddp_find_unused_params_enabled_str in msg) # type: ignore[attr-defined] else: - self.assertFalse(True, "DDP error not raised") + self.assertFalse(True, "DDP error not raised") # type: ignore[attr-defined] dist.barrier() @@ -5707,7 +5707,7 @@ def test_scatter_object_list(self): src_rank = 0 scatter_list = ( COLLECTIVES_OBJECT_TEST_LIST - if self.rank == src_rank + if self.rank == src_rank # type: ignore[attr-defined] else [None for _ in COLLECTIVES_OBJECT_TEST_LIST] ) world_size = dist.get_world_size() @@ -5719,12 +5719,12 @@ def test_scatter_object_list(self): output_obj_list = [None] dist.scatter_object_list(output_obj_list, scatter_list, src=src_rank) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] output_obj_list[0], - COLLECTIVES_OBJECT_TEST_LIST[self.rank % len(COLLECTIVES_OBJECT_TEST_LIST)], + COLLECTIVES_OBJECT_TEST_LIST[self.rank % len(COLLECTIVES_OBJECT_TEST_LIST)], # type: ignore[attr-defined] ) # Ensure errors are raised upon incorrect arguments. - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Expected argument scatter_object_output_list to be a list of size at least 1.", ): @@ -5735,10 +5735,10 @@ def test_scatter_object_list(self): @skip_if_lt_x_gpu(2) @skip_if_rocm def test_ddp_model_diff_across_ranks(self): - torch.cuda.set_device(self.rank) + torch.cuda.set_device(self.rank) # type: ignore[attr-defined] # Creates network with different sized embedding table on different # ranks. This should throw an error during DDP init. - net = EmbeddingNet(self.rank) + net = EmbeddingNet(self.rank) # type: ignore[attr-defined] # When running with NCCL backend, we don't expect an error on rank 0, # rather, it will be taken down by NCCL_ASYNC_ERROR_HANDLING. When # running with Gloo, we expect the error to be caught inline. @@ -5747,16 +5747,16 @@ def test_ddp_model_diff_across_ranks(self): if dist.get_backend() == dist.Backend.NCCL # Gloo can raise various exception messages, so just assert # Runtime error here. - else self.assertRaises(RuntimeError) + else self.assertRaises(RuntimeError) # type: ignore[attr-defined] ) ctx = ( rank_0_ctx - if self.rank == 0 - else self.assertRaisesRegex(RuntimeError, "appears not to match") + if self.rank == 0 # type: ignore[attr-defined] + else self.assertRaisesRegex(RuntimeError, "appears not to match") # type: ignore[attr-defined] ) with ctx: - net = torch.nn.parallel.DistributedDataParallel( - net.to(self.rank), device_ids=[self.rank] + net = torch.nn.parallel.DistributedDataParallel( # type: ignore[assignment] + net.to(self.rank), device_ids=[self.rank] # type: ignore[attr-defined] ) dist.barrier() @@ -5770,12 +5770,12 @@ def test_output_unused_in_loss(self): # on first DDP reducer will execute! model_copy = copy.deepcopy(model) net = torch.nn.parallel.DistributedDataParallel( - copy.deepcopy(model).cuda(self.rank), - device_ids=[self.rank], + copy.deepcopy(model).cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) net_with_find_unused = torch.nn.parallel.DistributedDataParallel( - model_copy.cuda(self.rank), - device_ids=[self.rank], + model_copy.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] find_unused_parameters=True, ) @@ -5796,7 +5796,7 @@ def test_output_unused_in_loss(self): msg = str(e) unused_index = 0 unused_index_substr = ( - f"Parameter indices which did not receive grad for rank {self.rank}: {unused_index}" + f"Parameter indices which did not receive grad for rank {self.rank}: {unused_index}" # type: ignore[attr-defined] ) if ddp == net: expected_strs = [ @@ -5825,20 +5825,20 @@ def test_output_unused_in_loss(self): else: unreduced_params = ", ".join(['a.weight']) expected_strs.append( - f"did not receive grad for rank {self.rank}: {unreduced_params}" + f"did not receive grad for rank {self.rank}: {unreduced_params}" # type: ignore[attr-defined] ) for s in expected_strs: - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] s in msg, f"Expected {s} to be in {msg}" ) for s in unexpected_strs: - self.assertFalse( + self.assertFalse( # type: ignore[attr-defined] s in msg, f"Expected {s} not to be in {msg}" ) else: - self.assertFalse(True, "DDP error not raised") + self.assertFalse(True, "DDP error not raised") # type: ignore[attr-defined] dist.barrier() @@ -5849,7 +5849,7 @@ def test_output_unused_in_loss(self): "MacOS uses uv transport which does not have as robust error handling as tcp transport" ) def test_monitored_barrier_gloo(self): - tensors = [torch.ones(10) * self.rank] + tensors = [torch.ones(10) * self.rank] # type: ignore[attr-defined] # Kick off some allreduce work on all ranks for _ in range(10): dist.all_reduce(torch.cat(tensors)) @@ -5860,20 +5860,20 @@ def test_monitored_barrier_gloo(self): # while others report gloo error. failed_rank = 1 src_rank = 0 - if self.rank == src_rank: - with self.assertRaisesRegex( + if self.rank == src_rank: # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, f"Rank {failed_rank} failed to pass monitoredBarrier" ): dist.monitored_barrier(timeout=timeout) - elif self.rank != failed_rank: + elif self.rank != failed_rank: # type: ignore[attr-defined] # Other ranks should not pass barrier since rank 0 failed. err_regex = ( - f"Rank {self.rank} successfully reached monitoredBarrier," + f"Rank {self.rank} successfully reached monitoredBarrier," # type: ignore[attr-defined] f" but received errors while waiting to be unblocked by rank" f" {src_rank}" ) - with self.assertRaisesRegex(RuntimeError, err_regex): + with self.assertRaisesRegex(RuntimeError, err_regex): # type: ignore[attr-defined] dist.monitored_barrier(timeout=timeout) # We need a barrier since otherwise failed_rank exits too early @@ -5889,11 +5889,11 @@ def test_monitored_barrier_gloo_subgroup(self): timeout = 0.1 subgroup = dist.new_group(ranks=[0, 1]) - if self.rank == failed_rank: + if self.rank == failed_rank: # type: ignore[attr-defined] return - if self.rank == 0: - with self.assertRaisesRegex( + if self.rank == 0: # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, f"Rank {failed_rank} failed to pass monitoredBarrier" ): @@ -5907,16 +5907,16 @@ def test_monitored_barrier_gloo_subgroup(self): def _test_monitored_barrier_allreduce_hang(self, wait_all_ranks): # tests expected behavior when nonzero rank hangs. nccl_pg = dist.new_group( - ranks=list(i for i in range(int(self.world_size))), + ranks=list(i for i in range(int(self.world_size))), # type: ignore[attr-defined] timeout=timedelta(seconds=2), backend=dist.Backend.NCCL, ) gloo_pg = dist.new_group( - ranks=list(i for i in range(int(self.world_size))), + ranks=list(i for i in range(int(self.world_size))), # type: ignore[attr-defined] backend=dist.Backend.GLOO, ) tensors = [ - torch.ones(10, device=self.rank) * self.rank + torch.ones(10, device=self.rank) * self.rank # type: ignore[attr-defined] ] # Let all ranks call allreduce first to set up communicators etc. # Directly simulating error here will run into store issue described @@ -5927,20 +5927,20 @@ def _test_monitored_barrier_allreduce_hang(self, wait_all_ranks): # monitored_barrier() and others are stuck in collective comm. In # practice, we don't need NCCL_BLOCKING_WAIT, but we use it in this # test to ensure it exits cleanly. - if self.rank != 0: - with self.assertRaisesRegex(RuntimeError, "Caught collective operation timeout"): + if self.rank != 0: # type: ignore[attr-defined] + with self.assertRaisesRegex(RuntimeError, "Caught collective operation timeout"): # type: ignore[attr-defined] nccl_pg.allreduce(tensors).wait(timedelta(seconds=0.1)) else: # Rank 0 should report first (in order) timed out rank or all ranks # depending on wait_all_ranks flag passed into monitored_barrier. if wait_all_ranks: - rank_str = ", ".join([str(i) for i in range(1, int(self.world_size))]) + rank_str = ", ".join([str(i) for i in range(1, int(self.world_size))]) # type: ignore[attr-defined] err_regex = f"Ranks {rank_str} failed to pass monitoredBarrier" else: expected_first_fail_rank = 1 err_regex = f"Rank {expected_first_fail_rank} failed to pass monitoredBarrier" monitored_barrier_timeout_seconds = timedelta(seconds=0.1) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, err_regex ): @@ -5971,12 +5971,12 @@ def test_monitored_barrier_allreduce_hang_wait_all_ranks(self): def test_monitored_barrier_gloo_rank_0_timeout(self): # tests error when rank 0 exhausts its given timeout. process_group = dist.new_group( - ranks=list(i for i in range(int(self.world_size))) + ranks=list(i for i in range(int(self.world_size))) # type: ignore[attr-defined] ) timeout = timedelta(seconds=0) - if self.rank == 0: - with self.assertRaisesRegex( - RuntimeError, f"Rank {self.rank} timed out in monitoredBarrier" + if self.rank == 0: # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] + RuntimeError, f"Rank {self.rank} timed out in monitoredBarrier" # type: ignore[attr-defined] ): process_group.monitored_barrier(timeout) @@ -5994,16 +5994,16 @@ def test_monitored_barrier_failure_order(self): expected_first_failed_rank = 2 timeout = timedelta(seconds=2) src_rank = 0 - if self.rank == src_rank: - with self.assertRaisesRegex(RuntimeError, f"Rank {expected_first_failed_rank}"): + if self.rank == src_rank: # type: ignore[attr-defined] + with self.assertRaisesRegex(RuntimeError, f"Rank {expected_first_failed_rank}"): # type: ignore[attr-defined] dist.monitored_barrier(timeout=timeout) - elif self.rank == 1: + elif self.rank == 1: # type: ignore[attr-defined] err_regex = ( - f"Rank {self.rank} successfully reached monitoredBarrier," + f"Rank {self.rank} successfully reached monitoredBarrier," # type: ignore[attr-defined] f" but received errors while waiting to be unblocked by rank" f" {src_rank}" ) - with self.assertRaisesRegex(RuntimeError, err_regex): + with self.assertRaisesRegex(RuntimeError, err_regex): # type: ignore[attr-defined] dist.monitored_barrier(timeout=timeout) @require_backend({"gloo"}) @@ -6012,11 +6012,11 @@ def test_monitored_barrier_failure_order(self): def test_monitored_barrier_wait_all_ranks(self): # Tests simple case where > 1 rank does not call into monitored # barrier and verifies all ranks are reported by rank 0. - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] timeout = timedelta(seconds=0.1) - rank_str = ", ".join([str(i) for i in range(1, int(self.world_size))]) + rank_str = ", ".join([str(i) for i in range(1, int(self.world_size))]) # type: ignore[attr-defined] err_regex = f"Ranks {rank_str} failed to pass monitoredBarrier" - with self.assertRaisesRegex(RuntimeError, err_regex): + with self.assertRaisesRegex(RuntimeError, err_regex): # type: ignore[attr-defined] dist.monitored_barrier(timeout=timeout, wait_all_ranks=True) @require_backend({"gloo", "nccl"}) @@ -6025,40 +6025,40 @@ def test_monitored_barrier_wait_all_ranks(self): def test_ddp_build_param_to_name_mapping(self): model = TwoLinLayerNet() net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) expected_mapping = {0: "a.weight", 1: "b.weight"} - net_params, _ = net._build_params_for_reducer() - param_to_name_mapping = net._build_param_to_name_mapping(net_params) - self.assertDictEqual(expected_mapping, param_to_name_mapping) + net_params, _ = net._build_params_for_reducer() # type: ignore[operator] + param_to_name_mapping = net._build_param_to_name_mapping(net_params) # type: ignore[operator] + self.assertDictEqual(expected_mapping, param_to_name_mapping) # type: ignore[attr-defined] # Test when DDP is used with ignored parameters. model = TwoLinLayerNet() # Parameters to ignore are in the format {module_name}.{param_name} params_to_ignore = ["a.weight"] - torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( + torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( # type: ignore[attr-defined] model, params_to_ignore ) net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) expected_mapping = {0: "b.weight"} - net_params, _ = net._build_params_for_reducer() - param_to_name_mapping = net._build_param_to_name_mapping(net_params) - self.assertDictEqual(expected_mapping, param_to_name_mapping) + net_params, _ = net._build_params_for_reducer() # type: ignore[operator] + param_to_name_mapping = net._build_param_to_name_mapping(net_params) # type: ignore[operator] + self.assertDictEqual(expected_mapping, param_to_name_mapping) # type: ignore[attr-defined] # Test errors are raised when DDP and module parameters mismatch. # This generally indicates a bug with DDP and is not expected to # happen in user applications. model = TwoLinLayerNet() net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) - net_params, _ = net._build_params_for_reducer() - if self.rank == 0: + net_params, _ = net._build_params_for_reducer() # type: ignore[operator] + if self.rank == 0: # type: ignore[attr-defined] print(type(net_params[0][0])) net_params[0].extend([ @@ -6066,15 +6066,15 @@ def test_ddp_build_param_to_name_mapping(self): torch.nn.Parameter(torch.ones(1)), ]) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, "Expected param to name mapping" ): - net._build_param_to_name_mapping(net_params) + net._build_param_to_name_mapping(net_params) # type: ignore[operator] net_params[0] = net_params[0][:-3] - with self.assertRaisesRegex(ValueError, "Param with name"): - net._build_param_to_name_mapping(net_params) + with self.assertRaisesRegex(ValueError, "Param with name"): # type: ignore[attr-defined] + net._build_param_to_name_mapping(net_params) # type: ignore[operator] net_params[0].extend([ torch.nn.Parameter(torch.ones(1)), @@ -6098,15 +6098,15 @@ def forward(self, x): model = Net() net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank] + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank] # type: ignore[attr-defined] ) expected_mapping = { 0: 'lin.weight', } - net_params, _ = net._build_params_for_reducer() - param_to_name_mapping = net._build_param_to_name_mapping(net_params) - self.assertEqual(param_to_name_mapping, expected_mapping) + net_params, _ = net._build_params_for_reducer() # type: ignore[operator] + param_to_name_mapping = net._build_param_to_name_mapping(net_params) # type: ignore[operator] + self.assertEqual(param_to_name_mapping, expected_mapping) # type: ignore[attr-defined] def _test_ddp_multiple_nested_unused_params_error(self, ignore_sparse): debug_mode_off = dist._get_debug_mode() == dist._DistributedDebugLevel.OFF @@ -6146,7 +6146,7 @@ def forward(self, x): fqn = f"{module_name}.{parameter_name}" sparse_embedding_fqns.append(fqn) - torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( + torch.nn.parallel.DistributedDataParallel._set_params_and_buffers_to_ignore_for_model( # type: ignore[attr-defined] model, sparse_embedding_fqns ) unused_modules = [ @@ -6154,7 +6154,7 @@ def forward(self, x): model.sub_module.lin.b, ] else: - unused_modules = list(model.sub_module.embedding_net.modules()) + [ + unused_modules = list(model.sub_module.embedding_net.modules()) + [ # type: ignore[assignment] model.sub_module.lin.b, ] @@ -6179,8 +6179,8 @@ def forward(self, x): used_param_fqns.append(fqn) net = torch.nn.parallel.DistributedDataParallel( - model.cuda(self.rank), - device_ids=[self.rank], + model.cuda(self.rank), # type: ignore[attr-defined] + device_ids=[self.rank], # type: ignore[attr-defined] ) batch, dim = 10, 2 inp = torch.ones(batch, dim) @@ -6195,17 +6195,17 @@ def forward(self, x): loss = out.sum() loss.backward() except RuntimeError as e: - e = str(e) + e = str(e) # type: ignore[assignment] - unused_param_substr = e[e.find("did not receive grad") :] + unused_param_substr = e[e.find("did not receive grad") :] # type: ignore[index, attr-defined] # Validate that each unused param fully qualified name # shows up in error logs. We do this instead of # constructing a joined string since order of parameters # can be different in Reducer. In addition, validate # param indices show up as well. for unused_param_fqn in expected_unused_param_fqns: - self.assertTrue(unused_param_fqn in unused_param_substr or debug_mode_off) - self.assertTrue( + self.assertTrue(unused_param_fqn in unused_param_substr or debug_mode_off) # type: ignore[attr-defined] + self.assertTrue( # type: ignore[attr-defined] str(fqn_to_param_index[unused_param_fqn]) in unused_param_substr, f"Did not find index {fqn_to_param_index[unused_param_fqn]} for {unused_param_fqn}" ) @@ -6213,13 +6213,13 @@ def forward(self, x): # Validate that used param fqns don't show up in error # logs. for used_param_fqn in used_param_fqns: - self.assertFalse(used_param_fqn in unused_param_substr) + self.assertFalse(used_param_fqn in unused_param_substr) # type: ignore[attr-defined] # Validate that ignored param fqns don't show up as unused # (since DDP does not track them) for sparse_param_fqn in sparse_embedding_fqns: - self.assertFalse(sparse_param_fqn in unused_param_substr) + self.assertFalse(sparse_param_fqn in unused_param_substr) # type: ignore[attr-defined] else: - self.assertTrue(False, "Expected error was not raised!") + self.assertTrue(False, "Expected error was not raised!") # type: ignore[attr-defined] @with_dist_debug_levels(levels=["OFF", "INFO", "DETAIL"]) @require_backend({"gloo", "nccl"}) @@ -6241,14 +6241,14 @@ def test_ddp_multiple_nested_unused_params_err_ignore_params(self): "Only Nccl & Gloo backend support DistributedDataParallel") @skip_if_lt_x_gpu(2) def test_ddp_sync_bn_training_vs_eval(self): - rank = self.rank + rank = self.rank # type: ignore[attr-defined] torch.cuda.set_device(rank) # Need to set track_running_stats=False, when track_running_stats=True, # bn_training is False and sync could not occur in eval model. model = nn.SyncBatchNorm( 2, momentum=0.99, track_running_stats=False ).cuda(rank) - model = torch.nn.parallel.DistributedDataParallel( + model = torch.nn.parallel.DistributedDataParallel( # type: ignore[assignment] model, device_ids=[rank] ) @@ -6263,20 +6263,20 @@ def test_ddp_sync_bn_training_vs_eval(self): # SyncBN allgathers stats across all ranks, so verify call to # all_gather in profiler. all_gather_calls = get_profiling_event("all_gather", prof) - self.assertNotEqual([], all_gather_calls) + self.assertNotEqual([], all_gather_calls) # type: ignore[attr-defined] # Only do inference on one rank. If SyncBN did collective stats sync, # this would hang/error. model_inference = model.module - if self.rank == 0: - model_inference.eval() + if self.rank == 0: # type: ignore[attr-defined] + model_inference.eval() # type: ignore[union-attr] with torch.autograd.profiler.profile() as prof: for i in range(6): inp = torch.randn(10, 2, 4, 4).cuda(rank) - out = model_inference(inp) + out = model_inference(inp) # type: ignore[operator] loss = out.sum() loss.backward() # Ensure sync does not occur in eval() mode. all_gather_calls = get_profiling_event("all_gather", prof) - self.assertEqual([], all_gather_calls) + self.assertEqual([], all_gather_calls) # type: ignore[attr-defined] diff --git a/torch/testing/_internal/distributed/nn/api/remote_module_test.py b/torch/testing/_internal/distributed/nn/api/remote_module_test.py index 723bc711076dd..1f92a40f9fbbd 100644 --- a/torch/testing/_internal/distributed/nn/api/remote_module_test.py +++ b/torch/testing/_internal/distributed/nn/api/remote_module_test.py @@ -108,13 +108,13 @@ def _create_remote_module_iter(remote_device, modes=None): kwargs = dict(first_kwarg=2) if ModuleCreationMode.MODULE_CTOR in modes: - remote_module = RemoteModule(remote_device, MyModule, args, kwargs) + remote_module = RemoteModule(remote_device, MyModule, args, kwargs) # type: ignore[arg-type] yield remote_module if ModuleCreationMode.MODULE_CTOR_WITH_INTERFACE in modes: - remote_module = _RemoteModule( + remote_module = _RemoteModule( # type: ignore[assignment] remote_device, - create_scripted_module, + create_scripted_module, # type: ignore[arg-type] args, kwargs, _module_interface_cls=MyModuleInterface, @@ -126,41 +126,41 @@ def _create_remote_module_iter(remote_device, modes=None): class RemoteModuleTest(CommonRemoteModuleTest): @dist_utils.dist_init def test_bad_module(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] remote_device = "{}/cpu".format(dst_worker_name) args = (1,) kwargs = dict(first_kwarg=2) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Expect `module_cls\(\*args, \*\*kwargs\)` returns an instance of ,", ): - RemoteModule(remote_device, BadModule, args, kwargs) + RemoteModule(remote_device, BadModule, args, kwargs) # type: ignore[arg-type] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Expect `module_cls\(\*args, \*\*kwargs\)` returns an instance of ,", ): - RemoteModule(remote_device, BadModule, args, kwargs) + RemoteModule(remote_device, BadModule, args, kwargs) # type: ignore[arg-type] @dist_utils.dist_init def test_forward_async(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.ones(1), 2, "3") for remote_module in self._create_remote_module_iter(dst_worker_name): ret_fut = remote_module.forward_async(*args) ret = ret_fut.wait() - self.assertEqual(ret, tuple(reversed(args))) + self.assertEqual(ret, tuple(reversed(args))) # type: ignore[attr-defined] @dist_utils.dist_init def test_forward_async_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] scripted_remote_module = next( self._create_remote_module_iter( @@ -176,23 +176,23 @@ def run_forward_async(scripted_remote_module: RemoteMyModuleInterface): ret = run_forward_async(scripted_remote_module) - self.assertEqual(ret, ("3", 2, torch.ones(1))) + self.assertEqual(ret, ("3", 2, torch.ones(1))) # type: ignore[attr-defined] @dist_utils.dist_init def test_forward_sync(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.ones(1), 2, "3") for remote_module in self._create_remote_module_iter(dst_worker_name): ret = remote_module.forward(*args) - self.assertEqual(ret, tuple(reversed(args))) + self.assertEqual(ret, tuple(reversed(args))) # type: ignore[attr-defined] @dist_utils.dist_init def test_forward_sync_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] scripted_remote_module = next( self._create_remote_module_iter( @@ -207,13 +207,13 @@ def run_forward(scripted_remote_module: MyModuleInterface): ret = run_forward(scripted_remote_module) - self.assertEqual(ret, ("3", 2, torch.ones(1))) + self.assertEqual(ret, ("3", 2, torch.ones(1))) # type: ignore[attr-defined] @dist_utils.dist_init def test_forward_with_kwargs(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.ones(1), 2) kwargs = dict(word="3") # Only test Python nn.Module, because script module methods don't support taking kwargs. @@ -222,96 +222,96 @@ def test_forward_with_kwargs(self): ): ret_fut = remote_module.forward_async(*args, **kwargs) ret = ret_fut.wait() - self.assertEqual(ret, tuple(reversed(args + ("3",)))) + self.assertEqual(ret, tuple(reversed(args + ("3",)))) # type: ignore[attr-defined] ret = remote_module.forward(*args, **kwargs) - self.assertEqual(ret, tuple(reversed(args + ("3",)))) + self.assertEqual(ret, tuple(reversed(args + ("3",)))) # type: ignore[attr-defined] @dist_utils.dist_init def test_remote_parameters(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Only test Python nn.Module, because script module methods don't support ``remote_parameters``. for remote_module in self._create_remote_module_iter( dst_worker_name, modes=[ModuleCreationMode.MODULE_CTOR] ): param_rrefs = remote_module.remote_parameters() - self.assertEqual(len(param_rrefs), 1) - self.assertTrue(torch.equal(param_rrefs[0].to_here(), _PARAM_VAL)) + self.assertEqual(len(param_rrefs), 1) # type: ignore[attr-defined] + self.assertTrue(torch.equal(param_rrefs[0].to_here(), _PARAM_VAL)) # type: ignore[attr-defined] @dist_utils.dist_init def test_get_module_rref(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Only test Python nn.Module, because script module methods don't support ``get_module_rref``. for remote_module in self._create_remote_module_iter( dst_worker_name, modes=[ModuleCreationMode.MODULE_CTOR] ): rref = remote_module.get_module_rref() - self.assertEqual(rref, remote_module.module_rref) + self.assertEqual(rref, remote_module.module_rref) # type: ignore[attr-defined] for param in rref.to_here().parameters(): - self.assertTrue(torch.equal(param, _PARAM_VAL)) + self.assertTrue(torch.equal(param, _PARAM_VAL)) # type: ignore[attr-defined] @dist_utils.dist_init def test_unsupported_methods(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] for remote_module in self._create_remote_module_iter( dst_worker_name, modes=[ModuleCreationMode.MODULE_CTOR] ): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``register_buffer`` not supported for RemoteModule" ): remote_module.register_buffer("buffer", torch.ones(5)) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``register_parameter`` not supported for RemoteModule", ): remote_module.register_parameter( "param", torch.nn.Parameter(torch.ones(1)) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``add_module`` not supported for RemoteModule" ): remote_module.add_module("empty", None) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``apply`` not supported for RemoteModule" ): fn = torch.rand((3, 3), requires_grad=False) remote_module.apply(fn) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``cuda`` not supported for RemoteModule" ): remote_module.cuda() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``cpu`` not supported for RemoteModule" ): remote_module.cpu() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``type`` not supported for RemoteModule" ): remote_module.type(torch.FloatTensor) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``float`` not supported for RemoteModule" ): remote_module.float() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``double`` not supported for RemoteModule" ): remote_module.double() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``bfloat16`` not supported for RemoteModule" ): remote_module.bfloat16() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``to`` not supported for RemoteModule" ): remote_module.to("cpu", dtype=torch.int32) @@ -319,96 +319,96 @@ def test_unsupported_methods(self): def hook(module, grad_input, grad_output): pass - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``register_backward_hook`` not supported for RemoteModule", ): remote_module.register_backward_hook(hook) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``register_forward_pre_hook`` not supported for RemoteModule", ): remote_module.register_forward_pre_hook(hook) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``register_forward_hook`` not supported for RemoteModule", ): remote_module.register_forward_hook(hook) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``state_dict`` not supported for RemoteModule" ): remote_module.state_dict() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``load_state_dict`` not supported for RemoteModule" ): remote_module.load_state_dict({}) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``parameters`` not supported for RemoteModule. Please use ``remote_parameters`` instead.", ): remote_module.parameters() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``named_parameters`` not supported for RemoteModule", ): remote_module.named_parameters() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``buffers`` not supported for RemoteModule" ): remote_module.buffers() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``named_buffers`` not supported for RemoteModule" ): remote_module.named_buffers() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``children`` not supported for RemoteModule" ): remote_module.children() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``named_children`` not supported for RemoteModule" ): remote_module.named_children() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``modules`` not supported for RemoteModule" ): remote_module.modules() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``named_modules`` not supported for RemoteModule" ): remote_module.named_modules() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``train`` not supported for RemoteModule" ): remote_module.train() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``eval`` not supported for RemoteModule" ): remote_module.eval() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``requires_grad_`` not supported for RemoteModule" ): remote_module.requires_grad_() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``zero_grad`` not supported for RemoteModule" ): remote_module.zero_grad() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``share_memory`` not supported for RemoteModule" ): remote_module.share_memory() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"Method ``extra_repr`` not supported for RemoteModule" ): remote_module.extra_repr() @dist_utils.dist_init def test_send_remote_module_with_a_new_attribute_over_the_wire(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # If add a new attribute is added to this RemoteModule, which will be sent over the wire by RPC, # this new field must be added to either _REMOTE_MODULE_PICKLED_ATTRIBUTES or _REMOTE_MODULE_ATTRIBUTES_IGNORE_FOR_PICKLING @@ -418,7 +418,7 @@ def test_send_remote_module_with_a_new_attribute_over_the_wire(self): ): new_attr_name = "new_attr" setattr(remote_module, new_attr_name, 1) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Attribute ``{}`` of RemoteModule must be either in " "``_REMOTE_MODULE_PICKLED_ATTRIBUTES`` or ``_REMOTE_MODULE_ATTRIBUTES_IGNORE_FOR_PICKLING``".format( @@ -437,10 +437,10 @@ def world_size(self): # Override setting in CommonRemoteModuleTest @dist_utils.dist_init def test_send_remote_module_over_the_wire(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker1_name = dist_utils.worker_name((self.rank + 1) % self.world_size) - dst_worker2_name = dist_utils.worker_name((self.rank + 2) % self.world_size) + dst_worker1_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst_worker2_name = dist_utils.worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] # Unpickled attribtes include both the inherent attributes of RemoteModule # (not inherited from the superclass) and two installed methods. @@ -456,32 +456,32 @@ def test_send_remote_module_over_the_wire(self): attrs = rpc.rpc_sync( dst_worker2_name, remote_module_attributes, (remote_module,) ) - self.assertListEqual(list(attrs.keys()), expected_unpickled_attrs) - self.assertEqual(attrs["on"], "worker1") - self.assertEqual(attrs["device"], "cpu") - self.assertFalse(attrs["is_device_map_set"]) - self.assertFalse(attrs["is_scriptable"]) + self.assertListEqual(list(attrs.keys()), expected_unpickled_attrs) # type: ignore[attr-defined] + self.assertEqual(attrs["on"], "worker1") # type: ignore[attr-defined] + self.assertEqual(attrs["device"], "cpu") # type: ignore[attr-defined] + self.assertFalse(attrs["is_device_map_set"]) # type: ignore[attr-defined] + self.assertFalse(attrs["is_scriptable"]) # type: ignore[attr-defined] # Test the installed methods on worker1's can be initiated by worker2 over RPC layer. # NOTE: In practice a remote module should be directly stored on the worker that runs ``forward``` or ``foward_async``, # not have another worker to initiate forward over the RPC layer. args = (torch.ones(1), 2, "3") ret1 = rpc.rpc_sync(dst_worker2_name, remote_forward, (remote_module, args)) - self.assertEqual(ret1, tuple(reversed(args))) + self.assertEqual(ret1, tuple(reversed(args))) # type: ignore[attr-defined] ret2 = rpc.rpc_sync( dst_worker2_name, remote_forward_async, (remote_module, args) ) - self.assertEqual(ret2, tuple(reversed(args))) + self.assertEqual(ret2, tuple(reversed(args))) # type: ignore[attr-defined] @unittest.skip( "Script RemoteModule cannot be sent over RPC at this time. See #57865" ) @dist_utils.dist_init def test_send_remote_module_over_the_wire_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker1_name = dist_utils.worker_name((self.rank + 1) % self.world_size) - dst_worker2_name = dist_utils.worker_name((self.rank + 2) % self.world_size) + dst_worker1_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst_worker2_name = dist_utils.worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] # Unpickled attribtes include both the inherent attributes of RemoteModule # (not inherited from the superclass) and two installed methods. @@ -497,31 +497,31 @@ def test_send_remote_module_over_the_wire_script(self): attrs = rpc.rpc_sync( dst_worker2_name, remote_module_attributes, (remote_module,) ) - self.assertListEqual(list(attrs.keys()), expected_unpickled_attrs) - self.assertEqual(attrs["on"], "worker1") - self.assertEqual(attrs["device"], "cpu") - self.assertFalse(attrs["is_device_map_set"]) - self.assertFalse(attrs["is_scriptable"]) + self.assertListEqual(list(attrs.keys()), expected_unpickled_attrs) # type: ignore[attr-defined] + self.assertEqual(attrs["on"], "worker1") # type: ignore[attr-defined] + self.assertEqual(attrs["device"], "cpu") # type: ignore[attr-defined] + self.assertFalse(attrs["is_device_map_set"]) # type: ignore[attr-defined] + self.assertFalse(attrs["is_scriptable"]) # type: ignore[attr-defined] # Test the installed methods on worker1's can be initiated by worker2 over RPC layer. # NOTE: In practice a remote module should be directly stored on the worker that runs ``forward``` or ``foward_async``, # not have another worker to initiate forward over the RPC layer. args = (torch.ones(1), 2, "3") ret1 = rpc.rpc_sync(dst_worker2_name, remote_forward, (remote_module, args)) - self.assertEqual(ret1, tuple(reversed(args))) + self.assertEqual(ret1, tuple(reversed(args))) # type: ignore[attr-defined] ret2 = rpc.rpc_sync( dst_worker2_name, remote_forward_async, (remote_module, args) ) - self.assertEqual(ret2, tuple(reversed(args))) + self.assertEqual(ret2, tuple(reversed(args))) # type: ignore[attr-defined] class CudaRemoteModuleTest(CommonRemoteModuleTest): @skip_if_lt_x_gpu(1) @dist_utils.dist_init def test_valid_device(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] for remote_module in self._create_remote_module_iter( "{}/cuda:0".format(dst_worker_name), modes=[ModuleCreationMode.MODULE_CTOR] @@ -529,17 +529,17 @@ def test_valid_device(self): device = rpc.rpc_sync( dst_worker_name, remote_device, (remote_module.module_rref,) ) - self.assertEqual(device.type, "cuda") - self.assertEqual(device.index, 0) + self.assertEqual(device.type, "cuda") # type: ignore[attr-defined] + self.assertEqual(device.index, 0) # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) @dist_utils.dist_init def test_invalid_devices(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"Expected one of .+ device type at start of device string", ): @@ -550,7 +550,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"CUDA error: invalid device ordinal" ): list( @@ -560,7 +560,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex(RuntimeError, r"Invalid device string: 'cpu2'"): + with self.assertRaisesRegex(RuntimeError, r"Invalid device string: 'cpu2'"): # type: ignore[attr-defined] list( self._create_remote_module_iter( "{}/cpu2".format(dst_worker_name), @@ -568,7 +568,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex(RuntimeError, r"Device string must not be empty"): + with self.assertRaisesRegex(RuntimeError, r"Device string must not be empty"): # type: ignore[attr-defined] list( self._create_remote_module_iter( "{}/".format(dst_worker_name), @@ -576,7 +576,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"Could not parse remote_device: worker1/cuda:0/cuda:1. The valid format is '/'", ): @@ -587,7 +587,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"The workername in remote_device '/' cannot be empty. The valid format is '/'", ): @@ -598,7 +598,7 @@ def test_invalid_devices(self): ) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"The workername in remote_device '/cuda:0' cannot be empty. The valid format is '/'", ): @@ -612,9 +612,9 @@ def test_invalid_devices(self): @skip_if_lt_x_gpu(1) @dist_utils.dist_init def test_input_moved_to_cuda_device(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # These two CPU tensors (in args and kwargs) should be implicitly moved to an appropriate cuda device. t1 = torch.ones(1) @@ -628,23 +628,23 @@ def test_input_moved_to_cuda_device(self): ): ret_fut = remote_module.forward_async(*args, **kwargs) ret = ret_fut.wait() - self.assertEqual(ret, tuple(reversed(args + (t2,)))) + self.assertEqual(ret, tuple(reversed(args + (t2,)))) # type: ignore[attr-defined] # TODO: Once the RPC backend can support directly sending GPU tensors, the expected device type should be "cuda:0". - self.assertEqual(ret[0].device.type, "cpu") - self.assertEqual(ret[2].device.type, "cpu") + self.assertEqual(ret[0].device.type, "cpu") # type: ignore[attr-defined] + self.assertEqual(ret[2].device.type, "cpu") # type: ignore[attr-defined] ret = remote_module.forward(*args, **kwargs) - self.assertEqual(ret, tuple(reversed(args + (t2,)))) + self.assertEqual(ret, tuple(reversed(args + (t2,)))) # type: ignore[attr-defined] # TODO: Once the RPC backend can support directly sending GPU tensors, the expected device type should be "cuda:0". - self.assertEqual(ret[0].device.type, "cpu") - self.assertEqual(ret[2].device.type, "cpu") + self.assertEqual(ret[0].device.type, "cpu") # type: ignore[attr-defined] + self.assertEqual(ret[2].device.type, "cpu") # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) @dist_utils.dist_init def test_input_moved_to_cuda_device_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) + dst_worker_name = dist_utils.worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] scripted_remote_module = next( self._create_remote_module_iter( @@ -660,6 +660,6 @@ def run_forward(scripted_remote_module: MyModuleInterface): ret = run_forward(scripted_remote_module) - self.assertEqual(ret, ("3", 2, torch.ones(1))) + self.assertEqual(ret, ("3", 2, torch.ones(1))) # type: ignore[attr-defined] # TODO: Once the RPC backend can support directly sending GPU tensors, the expected device type should be "cuda:0". - self.assertEqual(ret[2].device.type, "cpu") + self.assertEqual(ret[2].device.type, "cpu") # type: ignore[attr-defined] diff --git a/torch/testing/_internal/distributed/pipe_with_ddp_test.py b/torch/testing/_internal/distributed/pipe_with_ddp_test.py index 5362c7ae9bad5..fefbd711305f3 100644 --- a/torch/testing/_internal/distributed/pipe_with_ddp_test.py +++ b/torch/testing/_internal/distributed/pipe_with_ddp_test.py @@ -84,14 +84,14 @@ def test_basic_gloo_ckpt_except_last(self): def _run_basic_test(self, backend, checkpoint, find_unused_parameters=False): dist.init_process_group( backend="nccl", - init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), + init_method=INIT_METHOD_TEMPLATE.format(file_name=self.file_name), # type: ignore[attr-defined] world_size=self.world_size, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] ) # Use 4 GPUs, two replicas of a pipe across GPU 0 and 1 and another # pipe between GPU 2 and 3. Both replicas are replicated via DDP. - fc1 = nn.Linear(16, 8, bias=False).cuda(2 * self.rank) + fc1 = nn.Linear(16, 8, bias=False).cuda(2 * self.rank) # type: ignore[attr-defined] class MyModule(nn.Module): def __init__(self, device): @@ -105,30 +105,30 @@ def forward(self, inp): else: return self.fc3(self.fc2(inp)) - layer2 = MyModule(2 * self.rank + 1) + layer2 = MyModule(2 * self.rank + 1) # type: ignore[attr-defined] model = nn.Sequential( fc1, layer2 ) - model = Pipe(model, chunks=2, checkpoint=checkpoint) - model = DistributedDataParallel(model, find_unused_parameters=find_unused_parameters) - out = model(torch.rand(16, 16).cuda(2 * self.rank)).local_value() + model = Pipe(model, chunks=2, checkpoint=checkpoint) # type: ignore[assignment] + model = DistributedDataParallel(model, find_unused_parameters=find_unused_parameters) # type: ignore[assignment] + out = model(torch.rand(16, 16).cuda(2 * self.rank)).local_value() # type: ignore[attr-defined] out.sum().backward() # Run forward again for find_unused_parameters to trigger any potential errors. if find_unused_parameters: - model(torch.rand(16, 16).cuda(2 * self.rank)) + model(torch.rand(16, 16).cuda(2 * self.rank)) # type: ignore[attr-defined] # Check grads output = [torch.empty_like(fc1.weight.grad), torch.empty_like(fc1.weight.grad)] dist.all_gather(output, fc1.weight.grad) - self.assertEqual(output[0], output[1]) + self.assertEqual(output[0], output[1]) # type: ignore[attr-defined] output = [torch.empty_like(layer2.fc2.weight.grad), torch.empty_like(layer2.fc2.weight.grad)] dist.all_gather(output, layer2.fc2.weight.grad) - self.assertEqual(output[0], output[1]) + self.assertEqual(output[0], output[1]) # type: ignore[attr-defined] if not find_unused_parameters: output = [torch.empty_like(layer2.fc3.weight.grad), torch.empty_like(layer2.fc3.weight.grad)] dist.all_gather(output, layer2.fc3.weight.grad) - self.assertEqual(output[0], output[1]) + self.assertEqual(output[0], output[1]) # type: ignore[attr-defined] diff --git a/torch/testing/_internal/distributed/rpc/dist_autograd_test.py b/torch/testing/_internal/distributed/rpc/dist_autograd_test.py index 14ef8c78c9a86..2db95549ddc05 100644 --- a/torch/testing/_internal/distributed/rpc/dist_autograd_test.py +++ b/torch/testing/_internal/distributed/rpc/dist_autograd_test.py @@ -127,7 +127,7 @@ def my_py_nested_call(t1, t2, dst, world_size, hops): def _all_contexts_cleaned_up(timeout_seconds=10): global known_context_ids start = time.time() - context_id_to_raised = set() + context_id_to_raised = set() # type: ignore[var-annotated] while ( time.time() - start < timeout_seconds and context_id_to_raised != known_context_ids @@ -210,11 +210,11 @@ def _exec_func(self, exec_mode, method, *args): def _next_rank(self): if hasattr(self, "dst_rank"): - self.dst_rank = (self.dst_rank + 1) % self.world_size - if self.dst_rank == self.rank: + self.dst_rank = (self.dst_rank + 1) % self.world_size # type: ignore[has-type] + if self.dst_rank == self.rank: # type: ignore[attr-defined] return self._next_rank() else: - self.dst_rank = (self.rank + 1) % self.world_size + self.dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] return self.dst_rank def _check_rpc_done(self, rank_distance): @@ -236,13 +236,13 @@ def _verify_backwards_remote(self, tensors, context_id, local_grads, *args): ngrads = 0 for i in range(0, nargs): if local_grads[i] is not None: - self.assertIn(args[i], grads) - self.assertEqual(local_grads[i], grads[args[i]]) + self.assertIn(args[i], grads) # type: ignore[attr-defined] + self.assertEqual(local_grads[i], grads[args[i]]) # type: ignore[attr-defined] ngrads += 1 else: - self.assertNotIn(args[i], grads) + self.assertNotIn(args[i], grads) # type: ignore[attr-defined] - self.assertEqual(ngrads, len(grads)) + self.assertEqual(ngrads, len(grads)) # type: ignore[attr-defined] class DistAutogradTest(CommonDistAutogradTest): @@ -250,23 +250,23 @@ class DistAutogradTest(CommonDistAutogradTest): def test_autograd_context(self): # Verify max possible id. max_auto_increment = 281474976710655 - self.assertEqual( - max_auto_increment + (self.worker_id << 48), dist_autograd._get_max_id() + self.assertEqual( # type: ignore[attr-defined] + max_auto_increment + (self.worker_id << 48), dist_autograd._get_max_id() # type: ignore[attr-defined] ) context_ids = [] for i in range(200): with dist_autograd.context() as context_id: - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] context_id, dist_autograd._retrieve_context(context_id)._context_id(), ) # First 16 bits should be worker_id. - self.assertEqual(self.worker_id, context_id >> 48) + self.assertEqual(self.worker_id, context_id >> 48) # type: ignore[attr-defined] context_ids.append(context_id) for context_id in context_ids: - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Could not find autograd context with id: {}".format(context_id), ): @@ -276,7 +276,7 @@ def test_autograd_context(self): def test_nested_context(self): with dist_autograd.context() as context_id: # Nested contexts not supported. - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Already have an autograd context id for this thread" ): with dist_autograd.context() as context_id: @@ -300,18 +300,18 @@ def _verify_graph_for_first_rpc_call( ): # Retrieve the next functions in the graph. next_funcs = send_function.next_functions - self.assertEqual(2, len(next_funcs)) + self.assertEqual(2, len(next_funcs)) # type: ignore[attr-defined] # We should now hit t1 and t2 in the autograd graph. - self.assertEqual("torch::autograd::AccumulateGrad", next_funcs[0][0].name()) - self.assertEqual(t1, next_funcs[0][0].variable) - self.assertEqual(0, next_funcs[0][1]) - self.assertEqual("torch::autograd::AccumulateGrad", next_funcs[1][0].name()) - self.assertEqual(t2, next_funcs[1][0].variable) - self.assertEqual(0, next_funcs[1][1]) + self.assertEqual("torch::autograd::AccumulateGrad", next_funcs[0][0].name()) # type: ignore[attr-defined] + self.assertEqual(t1, next_funcs[0][0].variable) # type: ignore[attr-defined] + self.assertEqual(0, next_funcs[0][1]) # type: ignore[attr-defined] + self.assertEqual("torch::autograd::AccumulateGrad", next_funcs[1][0].name()) # type: ignore[attr-defined] + self.assertEqual(t2, next_funcs[1][0].variable) # type: ignore[attr-defined] + self.assertEqual(0, next_funcs[1][1]) # type: ignore[attr-defined] # Test recv functions. - self.assertEqual(ret.grad_fn, recv_function) + self.assertEqual(ret.grad_fn, recv_function) # type: ignore[attr-defined] # For a context passed from previous nested chain calls, this rank # receives two tensors t1 and t2, executes torch.add(t1, t2) and sends @@ -326,20 +326,20 @@ def _verify_graph_for_first_rpc_call( def _verify_graph_for_rpc_call_exec(self, send_function): # Verify next function is AddBackward0 next_funcs = send_function.next_functions - self.assertEqual(1, len(next_funcs)) + self.assertEqual(1, len(next_funcs)) # type: ignore[attr-defined] add_backward_fn = next_funcs[0][0] - self.assertEqual("AddBackward0", add_backward_fn.name()) + self.assertEqual("AddBackward0", add_backward_fn.name()) # type: ignore[attr-defined] # Verify the next two functions are the same recv backward function. next_funcs = add_backward_fn.next_functions - self.assertEqual(2, len(next_funcs)) - self.assertEqual( + self.assertEqual(2, len(next_funcs)) # type: ignore[attr-defined] + self.assertEqual( # type: ignore[attr-defined] "torch::distributed::autograd::RecvRpcBackward", next_funcs[0][0].name() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] "torch::distributed::autograd::RecvRpcBackward", next_funcs[1][0].name() ) - self.assertEqual(next_funcs[0][0], next_funcs[1][0]) + self.assertEqual(next_funcs[0][0], next_funcs[1][0]) # type: ignore[attr-defined] # For a context passed from previous nested chain calls, this rank # receives two tensors t1 and t2, forwards t1 and t2 tensors using @@ -356,34 +356,34 @@ def _verify_graph_for_rpc_call_exec(self, send_function): # t3.recvRpcBackward def _verify_graph_for_nested_rpc_call(self, ctx): send_functions = ctx._send_functions() - self.assertEqual(2, len(send_functions)) + self.assertEqual(2, len(send_functions)) # type: ignore[attr-defined] # For send function when making nest rpc call, # next functions of the send function are two recv functions # for received two tensors from previous call next_funcs = list(send_functions.values())[0].next_functions - self.assertEqual(2, len(next_funcs)) - self.assertEqual( + self.assertEqual(2, len(next_funcs)) # type: ignore[attr-defined] + self.assertEqual( # type: ignore[attr-defined] "torch::distributed::autograd::RecvRpcBackward", next_funcs[0][0].name() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] "torch::distributed::autograd::RecvRpcBackward", next_funcs[1][0].name() ) - self.assertEqual(next_funcs[0][0], next_funcs[1][0]) + self.assertEqual(next_funcs[0][0], next_funcs[1][0]) # type: ignore[attr-defined] # For send function when returning resonpose to previous call # next function of the send function is the recv function # for received tensor result returned from nested call next_funcs = list(send_functions.values())[1].next_functions - self.assertEqual(1, len(next_funcs)) - self.assertEqual( + self.assertEqual(1, len(next_funcs)) # type: ignore[attr-defined] + self.assertEqual( # type: ignore[attr-defined] "torch::distributed::autograd::RecvRpcBackward", next_funcs[0][0].name() ) def _test_graph(self, fn, exec_mode): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.ones(3, 3, requires_grad=True) @@ -403,11 +403,11 @@ def _test_graph(self, fn, exec_mode): # Verify graph for current context id. ctx = dist_autograd._current_context() - self.assertEqual(context_id, ctx._context_id()) + self.assertEqual(context_id, ctx._context_id()) # type: ignore[attr-defined] send_functions = ctx._send_functions() - self.assertEqual(1, len(send_functions)) + self.assertEqual(1, len(send_functions)) # type: ignore[attr-defined] recv_functions = ctx._recv_functions() - self.assertEqual(1, len(recv_functions)) + self.assertEqual(1, len(recv_functions)) # type: ignore[attr-defined] self._verify_graph_for_first_rpc_call( list(send_functions.values())[0], list(recv_functions.values())[0], @@ -421,18 +421,18 @@ def _test_graph(self, fn, exec_mode): # Verify graph for previous context id. ctx = dist_autograd._retrieve_context(ctx_ids[1]) send_functions = ctx._send_functions() - self.assertEqual(1, len(send_functions)) + self.assertEqual(1, len(send_functions)) # type: ignore[attr-defined] self._verify_graph_for_rpc_call_exec(list(send_functions.values())[0]) # this barrier is needed so one worker does not clean up their # autograd context before another worker tries to access it. dist.barrier() # autograd context should be cleaned up by now. - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] ctx = dist_autograd._retrieve_context(context_id) # No autograd context available. - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] ctx = dist_autograd._current_context() @dist_init @@ -453,9 +453,9 @@ def test_graph_for_python_remote_call(self): # 3-layer nested calls def _test_graph_for_py_nested_call(self, exec_mode): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.ones(3, 3, requires_grad=True) @@ -481,7 +481,7 @@ def _test_graph_for_py_nested_call(self, exec_mode): for rd in [1, 2, 3]: rpc.rpc_sync( - worker_name((self.rank + rd) % self.world_size), + worker_name((self.rank + rd) % self.world_size), # type: ignore[attr-defined] _set_rpc_done, args=(context_id, rd), ) @@ -500,11 +500,11 @@ def _test_graph_for_py_nested_call(self, exec_mode): # Verify first graph for current context id. ctx = dist_autograd._current_context() - self.assertEqual(context_id, ctx._context_id()) + self.assertEqual(context_id, ctx._context_id()) # type: ignore[attr-defined] send_functions = ctx._send_functions() - self.assertEqual(1, len(send_functions)) + self.assertEqual(1, len(send_functions)) # type: ignore[attr-defined] recv_functions = ctx._recv_functions() - self.assertEqual(1, len(recv_functions)) + self.assertEqual(1, len(recv_functions)) # type: ignore[attr-defined] self._verify_graph_for_first_rpc_call( list(send_functions.values())[0], list(recv_functions.values())[0], @@ -524,7 +524,7 @@ def _test_graph_for_py_nested_call(self, exec_mode): # verify last graph for rpc call execution. ctx = dist_autograd._retrieve_context(ctx_ids[3]) send_functions = ctx._send_functions() - self.assertEqual(1, len(send_functions)) + self.assertEqual(1, len(send_functions)) # type: ignore[attr-defined] self._verify_graph_for_rpc_call_exec(list(send_functions.values())[0]) # this barrier is needed so one worker does not clean up their # autograd context before another worker tries to access it. @@ -540,9 +540,9 @@ def test_graph_for_py_nested_remote_call(self): # Rank0->Rank1->Rank0 def _test_graph_for_py_nested_call_itself(self, exec_mode): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.ones(3, 3, requires_grad=True) @@ -554,7 +554,7 @@ def _test_graph_for_py_nested_call_itself(self, exec_mode): args=( t1, t2, - (self.rank - 1 + self.world_size) % self.world_size, + (self.rank - 1 + self.world_size) % self.world_size, # type: ignore[attr-defined] self.world_size, 0, ), @@ -566,7 +566,7 @@ def _test_graph_for_py_nested_call_itself(self, exec_mode): args=( t1, t2, - (self.rank - 1 + self.world_size) % self.world_size, + (self.rank - 1 + self.world_size) % self.world_size, # type: ignore[attr-defined] self.world_size, 0, ), @@ -575,7 +575,7 @@ def _test_graph_for_py_nested_call_itself(self, exec_mode): raise ValueError("Unrecognized ExecMode {}".format(exec_mode)) rpc.rpc_sync( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] _set_rpc_done, args=(context_id, 1), ) @@ -586,11 +586,11 @@ def _test_graph_for_py_nested_call_itself(self, exec_mode): # Another one is for prev context id when this rank make # nested call. ctx = dist_autograd._current_context() - self.assertEqual(context_id, ctx._context_id()) + self.assertEqual(context_id, ctx._context_id()) # type: ignore[attr-defined] send_functions = ctx._send_functions() - self.assertEqual(2, len(send_functions)) + self.assertEqual(2, len(send_functions)) # type: ignore[attr-defined] recv_functions = ctx._recv_functions() - self.assertEqual(2, len(recv_functions)) + self.assertEqual(2, len(recv_functions)) # type: ignore[attr-defined] self._verify_graph_for_first_rpc_call( list(send_functions.values())[0], list(recv_functions.values())[1], @@ -618,8 +618,8 @@ def test_graph_for_py_nested_remote_call_itself(self): self._test_graph_for_py_nested_call_itself(ExecMode.REMOTE) def _test_no_graph_with_tensors_not_require_grad(self, exec_mode): - initialize_pg(self.file_init_method, self.rank, self.world_size) - dst_rank = (self.rank + 1) % self.world_size + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.ones(3, 3, requires_grad=False) t2 = torch.zeros(3, 3, requires_grad=False) @@ -640,9 +640,9 @@ def _test_no_graph_with_tensors_not_require_grad(self, exec_mode): ctx = dist_autograd._current_context() send_functions = ctx._send_functions() - self.assertEqual(len(send_functions), 0) + self.assertEqual(len(send_functions), 0) # type: ignore[attr-defined] recv_functions = ctx._recv_functions() - self.assertEqual(len(recv_functions), 0) + self.assertEqual(len(recv_functions), 0) # type: ignore[attr-defined] # Wait for the prev rank to be done with rpc. self._check_rpc_done(1) @@ -652,7 +652,7 @@ def _test_no_graph_with_tensors_not_require_grad(self, exec_mode): # # rpc/remote with udf (_set_rpc_done here) also always passes the # autograd context to the callee due to the same reason. - self.assertNotEqual(-1, dist_autograd._retrieve_context(ctx_ids[1])) + self.assertNotEqual(-1, dist_autograd._retrieve_context(ctx_ids[1])) # type: ignore[attr-defined] dist.barrier() @dist_init @@ -664,8 +664,8 @@ def test_no_graph_with_tensors_not_require_grad_remote(self): self._test_no_graph_with_tensors_not_require_grad(ExecMode.REMOTE) def _test_grad_only_on_return_value(self, exec_mode): - initialize_pg(self.file_init_method, self.rank, self.world_size) - dst_rank = (self.rank + 1) % self.world_size + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] with dist_autograd.context() as context_id: if ExecMode.RPC_SYNC == exec_mode: ret = rpc.rpc_sync(worker_name(dst_rank), ret_requires_grad) @@ -685,9 +685,9 @@ def _test_grad_only_on_return_value(self, exec_mode): # Wait for the prev rank to be done with rpc. self._check_rpc_done(1) grads = dist_autograd.get_gradients(ctx_ids[1]) - self.assertEqual(1, len(grads)) - self.assertIn(requires_grad_tensor, grads) - self.assertEqual(torch.ones_like(ret), grads[requires_grad_tensor]) + self.assertEqual(1, len(grads)) # type: ignore[attr-defined] + self.assertIn(requires_grad_tensor, grads) # type: ignore[attr-defined] + self.assertEqual(torch.ones_like(ret), grads[requires_grad_tensor]) # type: ignore[attr-defined] # due to the above get_gradients call, ensure that dist autograd # contexts aren't cleaned up until all workers exit context managers dist.barrier() @@ -719,7 +719,7 @@ def _test_rpc_complex_args(self, exec_mode): else: raise ValueError("Unrecognized ExecMode {}".format(exec_mode)) - self.assertEqual(torch.stack(tensors), ret) + self.assertEqual(torch.stack(tensors), ret) # type: ignore[attr-defined] # Verify appropriate tensors have been attached the autograd graph. next_funcs = list( @@ -727,16 +727,16 @@ def _test_rpc_complex_args(self, exec_mode): )[0].next_functions idx = 0 for i in range(len(next_funcs)): - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] "torch::autograd::AccumulateGrad", next_funcs[i][0].name() ) - self.assertEqual(tensors[i], next_funcs[i][0].variable) + self.assertEqual(tensors[i], next_funcs[i][0].variable) # type: ignore[attr-defined] # Verify that the worker id has been recorded in the context ctx = dist_autograd._current_context() worker_ids = ctx._known_worker_ids() - self.assertEqual(len(worker_ids), 1) - self.assertEqual(worker_ids, {dst_rank}) + self.assertEqual(len(worker_ids), 1) # type: ignore[attr-defined] + self.assertEqual(worker_ids, {dst_rank}) # type: ignore[attr-defined] @dist_init def test_rpc_complex_args(self): @@ -747,7 +747,7 @@ def test_remote_complex_args(self): self._test_rpc_complex_args(ExecMode.REMOTE) def context_cleanup_test_helper(self, rpc_args, func, nested=False): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # test that in dist autograd, in the case that tensors communicated over RPC do # NOT require grad, we still cleanup the dist autograd contexts created @@ -755,11 +755,11 @@ def context_cleanup_test_helper(self, rpc_args, func, nested=False): # communicated over RPC even if tensor arguments do not require grad, as # it is possible that the response could. if nested: - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] nested_dst_rank = (dst_rank + 1) % self.world_size dst_ranks = {dst_rank} else: - dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} + dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} # type: ignore[attr-defined] with dist_autograd.context() as context_id: for dst_rank in dst_ranks: @@ -774,14 +774,14 @@ def context_cleanup_test_helper(self, rpc_args, func, nested=False): args=(context_id, 2), ) # the thread's context id should be cleaned up - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] dist_autograd._retrieve_context(context_id) # Ensure all peers have finished mutating the # `known_context_ids` set. dist.barrier() # check that all contexts have been cleaned up. success = _all_contexts_cleaned_up() - self.assertTrue(success) + self.assertTrue(success) # type: ignore[attr-defined] @dist_init def test_context_cleanup_tensor_with_grad(self): @@ -802,7 +802,7 @@ def test_context_cleanup_no_tensors(self): def test_context_cleanup_nested_rpc(self): t1 = torch.ones(3, 3, requires_grad=True) t2 = torch.zeros(3, 3, requires_grad=True) - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] args = (t1, t2, dst_rank, self.world_size, 0) self.context_cleanup_test_helper( rpc_args=args, func=my_py_nested_call, nested=True @@ -810,7 +810,7 @@ def test_context_cleanup_nested_rpc(self): @dist_init def test_worker_ids_recorded(self): - dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} + dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} # type: ignore[attr-defined] with dist_autograd.context() as context_id: # if no tensors require grad, we should still record worker_ids, as # the autograd context ID is still passed to other workers. @@ -824,7 +824,7 @@ def test_worker_ids_recorded(self): # all worker_ids in dst_ranks should be recorded. ctx = dist_autograd._current_context() worker_ids = ctx._known_worker_ids() - self.assertEqual(worker_ids, dst_ranks) + self.assertEqual(worker_ids, dst_ranks) # type: ignore[attr-defined] # worker_ids should be recorded when tensors do require grad t1.requires_grad = True @@ -838,7 +838,7 @@ def test_worker_ids_recorded(self): ) # all worker_ids in dst_ranks should be recorded. worker_ids = ctx._known_worker_ids() - self.assertEqual(worker_ids, dst_ranks) + self.assertEqual(worker_ids, dst_ranks) # type: ignore[attr-defined] @dist_init def test_dist_autograd_profiling(self): @@ -858,12 +858,12 @@ def get_event(partial_key): recv_event = get_event("RecvRpcBackward") backward_event = get_event("torch::distributed::autograd::backward") # There should be at least 1 send and recv_events each, corresponding to send/recv functions executed. - self.assertEqual(send_event.count, 1) - self.assertEqual(recv_event.count, 1) + self.assertEqual(send_event.count, 1) # type: ignore[attr-defined] + self.assertEqual(recv_event.count, 1) # type: ignore[attr-defined] # The CPU total for backward event should be great than send and recv, since # applying those functions in the backwards pass is a subset of the entire backward pass. - self.assertGreater(backward_event.cpu_time_total, send_event.cpu_time_total) - self.assertGreater(backward_event.cpu_time_total, recv_event.cpu_time_total) + self.assertGreater(backward_event.cpu_time_total, send_event.cpu_time_total) # type: ignore[attr-defined] + self.assertGreater(backward_event.cpu_time_total, recv_event.cpu_time_total) # type: ignore[attr-defined] @dist_init def test_error_in_context(self): @@ -871,7 +871,7 @@ def test_error_in_context(self): t1 = torch.rand(3, 3, requires_grad=True) t2 = torch.rand(6, 6, requires_grad=True) - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] # This should throw an error since matrix sizes don't match. rpc.rpc_sync( worker_name(self._next_rank()), torch.matmul, args=(t1, t2) @@ -888,21 +888,21 @@ def test_backward_no_grad_on_tensor(self): args=(t1, t2)).sum() dist_autograd.backward(context_id, [loss], retain_graph=True) - self.assertIsNone(t1.grad) - self.assertIsNone(t2.grad) + self.assertIsNone(t1.grad) # type: ignore[attr-defined] + self.assertIsNone(t2.grad) # type: ignore[attr-defined] # Now populate .grad with local autograd engine and # verify dist autograd doesn't mess with it. loss_local = torch.add(t1, t2).sum() loss_local.backward() - self.assertIsNotNone(t1.grad) - self.assertIsNotNone(t2.grad) + self.assertIsNotNone(t1.grad) # type: ignore[attr-defined] + self.assertIsNotNone(t2.grad) # type: ignore[attr-defined] t1_grad_before = t1.grad t2_grad_before = t2.grad dist_autograd.backward(context_id, [loss]) - self.assertEqual(t1_grad_before, t1.grad) - self.assertEqual(t2_grad_before, t2.grad) + self.assertEqual(t1_grad_before, t1.grad) # type: ignore[attr-defined] + self.assertEqual(t2_grad_before, t2.grad) # type: ignore[attr-defined] def _test_backward_simple(self, dst): # Run the same code locally and with dist autograd and verify gradients @@ -927,7 +927,7 @@ def test_backward_simple(self): @dist_init def test_backward_simple_self(self): - self._test_backward_simple(self.rank) + self._test_backward_simple(self.rank) # type: ignore[attr-defined] # The current rank first creates a tensor on the rref_owner, and then passes # the rref with another tensor to the callee to run either my_rref_add or @@ -957,11 +957,11 @@ def _test_backward_rref(self, callee, rref_owner): # verify grads on caller grads = dist_autograd.get_gradients(context_id) - self.assertIn(t2, grads) - self.assertEqual(grads[t2], t2.grad) + self.assertIn(t2, grads) # type: ignore[attr-defined] + self.assertEqual(grads[t2], t2.grad) # type: ignore[attr-defined] # verify grads on rref owner - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] rpc.rpc_sync( rref_owner, _compare_owner_value, @@ -977,15 +977,15 @@ def test_backward_rref(self): @dist_init def test_backward_rref_multi(self): - if self.rank > 0: + if self.rank > 0: # type: ignore[attr-defined] callee = "worker0" rref_owner = callee self._test_backward_rref(callee, rref_owner) @dist_init def test_backward_rref_nested(self): - callee = worker_name((self.rank + 1) % self.world_size) - rref_owner = worker_name((self.rank + 2) % self.world_size) + callee = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + rref_owner = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] self._test_backward_rref(callee, rref_owner) # In this test, every rank will serve as a parameter server (ps) and a @@ -1007,7 +1007,7 @@ def _test_trainer_ps(self, create_ref_fn, trainer_fn): # create rref on self rref_t1 = rpc.remote( - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] create_ref_fn, args=()) @@ -1017,9 +1017,9 @@ def _test_trainer_ps(self, create_ref_fn, trainer_fn): for rank_diff in rank_diffs: futures.append( rpc.rpc_async( - worker_name((self.rank + rank_diff) % self.world_size), + worker_name((self.rank + rank_diff) % self.world_size), # type: ignore[attr-defined] trainer_fn, - args=(rref_t1, t2, worker_name(self.rank), rank_diff), + args=(rref_t1, t2, worker_name(self.rank), rank_diff), # type: ignore[attr-defined] ) ) @@ -1035,8 +1035,8 @@ def _test_trainer_ps(self, create_ref_fn, trainer_fn): ctx_id = ctx_ids[rank_diff] grads = dist_autograd.get_gradients(ctx_id) local_t1 = rref_t1.to_here() - self.assertIn(local_t1, grads) - self.assertEqual(grads[local_t1], t1.grad) + self.assertIn(local_t1, grads) # type: ignore[attr-defined] + self.assertEqual(grads[local_t1], t1.grad) # type: ignore[attr-defined] # unblock trainers _set_rpc_done(None, 0) @@ -1171,7 +1171,7 @@ def test_backward_unused_send_function(self): t.join(10) # Wait for 10s. # Verify thread is still alive (indicating backward hasn't completed yet). - self.assertTrue(t.is_alive()) + self.assertTrue(t.is_alive()) # type: ignore[attr-defined] @dist_init def test_backward_autograd_engine_error(self): @@ -1197,7 +1197,7 @@ def test_backward_autograd_engine_error(self): worker_name(self._next_rank()), torch.div, args=(val, t2) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Error on Node [0-9]+: Simulate error on backward pass" ): # Run backwards, and validate we receive an error. @@ -1210,7 +1210,7 @@ def test_backward_autograd_engine_error(self): ) def test_backward_node_failure(self): rpc._set_rpc_timeout(5) # 5 seconds - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.rand((3, 3), requires_grad=True) @@ -1223,7 +1223,7 @@ def test_backward_node_failure(self): dist.barrier() # Kill all odd rank nodes. - if self.rank % 2 == 0: + if self.rank % 2 == 0: # type: ignore[attr-defined] shutdown_error_regex = self.get_shutdown_error_regex() # Wait for all other nodes to die. for rank in range(self.world_size): @@ -1232,7 +1232,7 @@ def test_backward_node_failure(self): # Shutdown sequence is not very well defined and as a result # we might see any error given by get_shutdown_error_regex() - with self.assertRaisesRegex(RuntimeError, shutdown_error_regex): + with self.assertRaisesRegex(RuntimeError, shutdown_error_regex): # type: ignore[attr-defined] # Run backwards, and validate we receive an error since all # other nodes are dead. dist_autograd.backward(context_id, [res.sum()]) @@ -1246,7 +1246,7 @@ def test_backward_without_context(self): t2 = torch.rand((3, 3), requires_grad=True) context_id = 100 # dummy context_id - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Could not find autograd context with id: {}".format(context_id), ): @@ -1257,7 +1257,7 @@ def test_backward_without_context(self): @dist_init def test_backward_without_rpc(self): - dst_rank = self.rank + dst_rank = self.rank # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.rand((3, 3), requires_grad=True) t2 = torch.rand((3, 3), requires_grad=True) @@ -1265,38 +1265,38 @@ def test_backward_without_rpc(self): dist_autograd.backward(context_id, [t3.sum()]) grads = dist_autograd.get_gradients(context_id) - self.assertEqual(2, len(grads)) - self.assertIn(t1, grads) - self.assertIn(t2, grads) - self.assertEqual(torch.ones(3, 3), grads[t1]) - self.assertEqual(torch.ones(3, 3), grads[t2]) + self.assertEqual(2, len(grads)) # type: ignore[attr-defined] + self.assertIn(t1, grads) # type: ignore[attr-defined] + self.assertIn(t2, grads) # type: ignore[attr-defined] + self.assertEqual(torch.ones(3, 3), grads[t1]) # type: ignore[attr-defined] + self.assertEqual(torch.ones(3, 3), grads[t2]) # type: ignore[attr-defined] @dist_init def test_backward_invalid_args(self): with dist_autograd.context() as context_id: - with self.assertRaisesRegex(TypeError, "incompatible function arguments"): - dist_autograd.backward(context_id, None) + with self.assertRaisesRegex(TypeError, "incompatible function arguments"): # type: ignore[attr-defined] + dist_autograd.backward(context_id, None) # type: ignore[arg-type] - with self.assertRaisesRegex(TypeError, "incompatible function arguments"): - dist_autograd.backward(None, None) + with self.assertRaisesRegex(TypeError, "incompatible function arguments"): # type: ignore[attr-defined] + dist_autograd.backward(None, None) # type: ignore[arg-type] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "No tensors provided for gradient computation" ): dist_autograd.backward(context_id, []) - with self.assertRaisesRegex(RuntimeError, "requires_grad not set on"): + with self.assertRaisesRegex(RuntimeError, "requires_grad not set on"): # type: ignore[attr-defined] t = torch.rand(3, 3) dist_autograd.backward(context_id, [t]) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "is not a scalar, all roots need to be scalar" ): t = torch.rand(3, 3, requires_grad=True) dist_autograd.backward(context_id, [t]) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "does not have a valid gradient function" ): t = torch.rand(1, requires_grad=True) @@ -1418,7 +1418,7 @@ def test_backward_python_udf_error(self): DistAutogradTest._nested_rpc_call_backward_error, args=(t1, t2, self._next_rank()), ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Simulate error on backward pass" ): dist_autograd.backward(context_id, [loss.sum()]) @@ -1433,7 +1433,7 @@ def test_backward_python_udf_error(self): def test_backward_node_failure_python_udf(self): # Set a short timeout to quickly time out failed RPCs. rpc._set_rpc_timeout(5) # 5 seconds - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.rand((3, 3), requires_grad=True) @@ -1449,17 +1449,17 @@ def test_backward_node_failure_python_udf(self): dist.barrier() # Kill rank 2 (last hop of nested rpc) and verify rank 0 receives an error. - if self.rank == 2: + if self.rank == 2: # type: ignore[attr-defined] return store = dist.distributed_c10d._get_default_store() - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # Wait for rank 2 to die. shutdown_error_regex = self.get_shutdown_error_regex() wait_until_node_failure(2, shutdown_error_regex) # Shutdown sequence is not very well defined and as a result # we might see any error given by get_shutdown_error_regex(). - with self.assertRaisesRegex(RuntimeError, shutdown_error_regex): + with self.assertRaisesRegex(RuntimeError, shutdown_error_regex): # type: ignore[attr-defined] # Run backwards, and validate we receive an error since rank 2 is dead. dist_autograd.backward(context_id, [res.sum()]) @@ -1499,8 +1499,8 @@ def test_backwards_nested_python_udf(self): dist_autograd.backward(context_id, [loss.sum()]) grads = dist_autograd.get_gradients(context_id) - self.assertEqual(t1.grad, grads[t1]) - self.assertEqual(t2.grad, grads[t2]) + self.assertEqual(t1.grad, grads[t1]) # type: ignore[attr-defined] + self.assertEqual(t2.grad, grads[t2]) # type: ignore[attr-defined] _test_clean_context_backward_context_id = None @@ -1538,7 +1538,7 @@ def test_clean_context_during_backward(self): It is fine for the 'backward' call to throw an exception in this test, but the process should not crash. """ - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] context = dist_autograd._new_context() context_id = context._context_id() @@ -1546,8 +1546,8 @@ def test_clean_context_during_backward(self): # Send the context id to all nodes. for i in range(0, self.world_size): - if i != self.rank: - rank_distance = (i - self.rank + self.world_size) % self.world_size + if i != self.rank: # type: ignore[attr-defined] + rank_distance = (i - self.rank + self.world_size) % self.world_size # type: ignore[attr-defined] rpc.rpc_sync( worker_name(i), _set_rpc_done, @@ -1557,7 +1557,7 @@ def test_clean_context_during_backward(self): dist.barrier() # Verify all context ids have been received. - self.assertEqual(self.world_size - 1, len(known_context_ids)) + self.assertEqual(self.world_size - 1, len(known_context_ids)) # type: ignore[attr-defined] t1 = torch.rand((3, 3), requires_grad=True) for i in range(0, 100): @@ -1567,10 +1567,10 @@ def test_clean_context_during_backward(self): # Call MyBackwardFunc as the first op of the backward pass to # ensure we release the context early in the backward pass. t1 = DistAutogradTest.MyBackwardFunc.apply(t1) - self.assertEqual(100, len(context._send_functions())) + self.assertEqual(100, len(context._send_functions())) # type: ignore[attr-defined] context_id = 100 # dummy context_id - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Could not find autograd context with id: {}".format(context_id), ): @@ -1639,7 +1639,7 @@ def test_embedding_bag_with_no_grad_tensors(self): args=(remote_embedding, context_id), ) - self.assertEqual(local_grad.to_dense(), remote_grad) + self.assertEqual(local_grad.to_dense(), remote_grad) # type: ignore[attr-defined] @classmethod def _mixed_requires_grad(cls, t1, t2): @@ -1657,14 +1657,14 @@ def test_mixed_requires_grad(self): ret = self._exec_func( exec_mode, DistAutogradTest._mixed_requires_grad, t1, t2 ) - self.assertEqual(t1 * t2, ret) + self.assertEqual(t1 * t2, ret) # type: ignore[attr-defined] dist_autograd.backward(context_id, [ret.sum()]) - self.assertTrue(t1.requires_grad) - self.assertFalse(t2.requires_grad) + self.assertTrue(t1.requires_grad) # type: ignore[attr-defined] + self.assertFalse(t2.requires_grad) # type: ignore[attr-defined] grads = dist_autograd.get_gradients(context_id) - self.assertIn(t1, grads) - self.assertNotIn(t2, grads) - self.assertEqual(t2, grads[t1]) + self.assertIn(t1, grads) # type: ignore[attr-defined] + self.assertNotIn(t2, grads) # type: ignore[attr-defined] + self.assertEqual(t2, grads[t1]) # type: ignore[attr-defined] class TestDebugInfoFunc(Function): @staticmethod @@ -1686,7 +1686,7 @@ def backward(ctx, input): @dist_init def test_debug_info(self): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] t1 = torch.rand((3, 3), requires_grad=True) t2 = torch.rand((3, 3), requires_grad=True) @@ -1695,7 +1695,7 @@ def test_debug_info(self): res = {} res[i] = t1 for rank in range(self.world_size): - if rank != self.rank: + if rank != self.rank: # type: ignore[attr-defined] res[i + 1] = rpc.rpc_sync( worker_name(rank), torch.add, args=(res[i], t2) ) @@ -1707,7 +1707,7 @@ def test_debug_info(self): i += 1 for rank in range(self.world_size): - if rank != self.rank: + if rank != self.rank: # type: ignore[attr-defined] res[i + 1] = rpc.rpc_sync( worker_name(rank), torch.add, args=(res[i], t2) ) @@ -1718,11 +1718,11 @@ def test_debug_info(self): debug_info = dist_autograd._get_debug_info() num_autograd_context = int(debug_info["num_autograd_contexts"]) # Need atleast one context and not more than 4. - self.assertTrue(num_autograd_context >= 1 and num_autograd_context <= 4) + self.assertTrue(num_autograd_context >= 1 and num_autograd_context <= 4) # type: ignore[attr-defined] for rd in range(self.world_size - 1): rpc.rpc_sync( - worker_name((self.rank + rd + 1) % self.world_size), + worker_name((self.rank + rd + 1) % self.world_size), # type: ignore[attr-defined] _set_rpc_done, args=(context_id, rd + 1), ) @@ -1732,15 +1732,15 @@ def test_debug_info(self): # Validate information debug_info = dist_autograd._get_debug_info() assert debug_info is not None - self.assertEqual(0, int(debug_info["num_current_backward_passes"])) + self.assertEqual(0, int(debug_info["num_current_backward_passes"])) # type: ignore[attr-defined] # only have `num_current_backward_passes` and `num_autograd contexts` - self.assertTrue(len(debug_info) == 2) + self.assertTrue(len(debug_info) == 2) # type: ignore[attr-defined] - self.assertTrue(_all_contexts_cleaned_up()) + self.assertTrue(_all_contexts_cleaned_up()) # type: ignore[attr-defined] # All contexts should be cleaned up. debug_info = dist_autograd._get_debug_info() - self.assertEqual(0, int(debug_info["num_autograd_contexts"])) + self.assertEqual(0, int(debug_info["num_autograd_contexts"])) # type: ignore[attr-defined] @staticmethod def _workload_thread(): @@ -1762,8 +1762,8 @@ def test_async_dist_autograd(self): hammering a single node with a lot of backward() calls. """ - initialize_pg(self.file_init_method, self.rank, self.world_size) - if self.rank != 0: + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] + if self.rank != 0: # type: ignore[attr-defined] # All other ranks schedule work on rank 0. threads = [] for i in range(20): @@ -1795,11 +1795,11 @@ def test_backward_accumulate_grads(self): # Verify the gradients are same for local and remote execution. grads = dist_autograd.get_gradients(context_id) - self.assertEqual(2, len(grads)) - self.assertIn(t1, grads) - self.assertIn(t2, grads) - self.assertEqual(t1.grad, grads[t1]) - self.assertEqual(t2.grad, grads[t2]) + self.assertEqual(2, len(grads)) # type: ignore[attr-defined] + self.assertIn(t1, grads) # type: ignore[attr-defined] + self.assertIn(t2, grads) # type: ignore[attr-defined] + self.assertEqual(t1.grad, grads[t1]) # type: ignore[attr-defined] + self.assertEqual(t2.grad, grads[t2]) # type: ignore[attr-defined] @staticmethod def _test_nested_backward_accumulate_grads(t1, t2, dst_rank): @@ -1836,7 +1836,7 @@ def test_multiple_backward(self): @dist_init(clean_shutdown=False) def test_multiple_backward_with_errors(self): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] t1 = torch.rand((3, 3), requires_grad=True) t2 = torch.rand((3, 3), requires_grad=True) with dist_autograd.context() as context_id: @@ -1849,7 +1849,7 @@ def test_multiple_backward_with_errors(self): # Run backward in a loop multiple times. for i in range(100): if i < 50: - with self.assertRaisesRegex(RuntimeError, "Simulate error on backward pass"): + with self.assertRaisesRegex(RuntimeError, "Simulate error on backward pass"): # type: ignore[attr-defined] dist_autograd.backward(context_id, [loss], retain_graph=True) elif i > 50: # Recovered from error. @@ -1927,8 +1927,8 @@ def backward(ctx, grad): with dist_autograd.context() as context_id: dist_autograd.backward(context_id, [NonContGradFunc.apply(MyFunc.apply(a, b))]) grads = dist_autograd.get_gradients(context_id) - self.assertFalse(grads[a].data_ptr() == MyFunc.static_grad_ptr) - self.assertFalse(grads[b].data_ptr() == MyFunc.static_grad_ptr) + self.assertFalse(grads[a].data_ptr() == MyFunc.static_grad_ptr) # type: ignore[attr-defined] + self.assertFalse(grads[b].data_ptr() == MyFunc.static_grad_ptr) # type: ignore[attr-defined] # test case that should trigger no copy for a with dist_autograd.context() as context_id: @@ -1937,7 +1937,7 @@ def backward(ctx, grad): p_g = MyFuncSingleGrad.static_grad_ptr p_a = grads[a].data_ptr() # Verify there was no clone. - self.assertTrue(p_a == p_g) + self.assertTrue(p_a == p_g) # type: ignore[attr-defined] # Test case that should trigger copy for both of a,b. This is # different in the distributed autograd case since we hold @@ -1949,10 +1949,10 @@ def backward(ctx, grad): p_a = grads[a].data_ptr() p_b = grads[b].data_ptr() # check a,b uses different grad buffer - self.assertFalse(p_a == p_b) + self.assertFalse(p_a == p_b) # type: ignore[attr-defined] # both should be copied. - self.assertFalse(grads[a].data_ptr() == MyFunc.static_grad_ptr) - self.assertFalse(grads[b].data_ptr() == MyFunc.static_grad_ptr) + self.assertFalse(grads[a].data_ptr() == MyFunc.static_grad_ptr) # type: ignore[attr-defined] + self.assertFalse(grads[b].data_ptr() == MyFunc.static_grad_ptr) # type: ignore[attr-defined] @dist_init def test_no_grad_copy_sparse(self): @@ -1984,7 +1984,7 @@ def backward(ctx, grad): i = torch.ones(1, 1, dtype=torch.long) nv = v.expand(8, 3) ni = i.expand(1, 8) - ngrad = torch.sparse.FloatTensor(ni, nv, torch.Size([10, 3])) + ngrad = torch.sparse.FloatTensor(ni, nv, torch.Size([10, 3])) # type: ignore[attr-defined] NonContGradFunc.static_grad_ptr = ngrad._values().data_ptr() return ngrad, ngrad @@ -2003,7 +2003,7 @@ def backward(ctx, grad): p_g = MyFunc.static_grad_ptr p_a = grads[a]._values().data_ptr() # check a uses the same buffer - self.assertTrue(p_a == p_g) + self.assertTrue(p_a == p_g) # type: ignore[attr-defined] # Run backwards multiple times. for i in range(10): @@ -2019,10 +2019,10 @@ def backward(ctx, grad): p_a = grads[a]._values().data_ptr() p_b = grads[b]._values().data_ptr() # check a,b uses different grad buffer - self.assertFalse(p_a == p_b) + self.assertFalse(p_a == p_b) # type: ignore[attr-defined] # Verify we cloned both grads. - self.assertFalse(p_a == p_g) - self.assertFalse(p_b == p_g) + self.assertFalse(p_a == p_g) # type: ignore[attr-defined] + self.assertFalse(p_b == p_g) # type: ignore[attr-defined] # Run backwards multiple times to verify accumulation. for i in range(10): @@ -2062,12 +2062,12 @@ def backward(ctx, grad): grads = dist_autograd.get_gradients(context_id) p_g = MyFunc.static_grad_ptr p_a = grads[a]._values().data_ptr() - self.assertIsNotNone(MyFunc.static_grad_indices_ref) - self.assertIsNotNone(MyFunc.static_grad_values_ref) + self.assertIsNotNone(MyFunc.static_grad_indices_ref) # type: ignore[attr-defined] + self.assertIsNotNone(MyFunc.static_grad_values_ref) # type: ignore[attr-defined] # grad would be stolen, since static_grad_indices_ref and # static_grad_values_ref are holding onto views and don't bump the # refcount. - self.assertTrue(p_g == p_a) + self.assertTrue(p_g == p_a) # type: ignore[attr-defined] @dist_init def test_post_hooks(self): @@ -2095,10 +2095,10 @@ def post_hook_add_two(output_grads, input_grads): with dist_autograd.context() as context_id: loss = a.sum() dist_autograd.backward(context_id, [loss]) - self.assertEqual(5, self.hook_called_times) + self.assertEqual(5, self.hook_called_times) # type: ignore[attr-defined] grads = dist_autograd.get_gradients(context_id) - self.assertEqual(1, len(grads)) - self.assertTrue(t in grads) + self.assertEqual(1, len(grads)) # type: ignore[attr-defined] + self.assertTrue(t in grads) # type: ignore[attr-defined] @staticmethod def _slow_add(t1, t2): @@ -2116,7 +2116,7 @@ def test_thread_local_context_id(self): t3.requires_grad = True t3.sum().backward() - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote(dst, DistAutogradTest._slow_add, args=(t1, t2)) with dist_autograd.context() as context_id: @@ -2127,7 +2127,7 @@ def test_thread_local_context_id(self): # thread_local states properly when jumping across threads on the # server side. dist_autograd.backward(context_id, [loss]) - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] rpc.rpc_sync( dst, _compare_owner_value, @@ -2147,9 +2147,9 @@ def test_gpu_simple(self): t3 = t1 + t2 dist_autograd.backward(context_id, [t3.sum()]) grads = dist_autograd.get_gradients(context_id) - self.assertEqual(2, len(grads)) - self.assertEqual(t1.grad, grads[t1]) - self.assertEqual(t2.grad, grads[t2]) + self.assertEqual(2, len(grads)) # type: ignore[attr-defined] + self.assertEqual(t1.grad, grads[t1]) # type: ignore[attr-defined] + self.assertEqual(t2.grad, grads[t2]) # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) @dist_init @@ -2203,14 +2203,14 @@ class FaultyAgentDistAutogradTest(RpcAgentTestFixture): # Reusing a simplified helper function from DistAutogradTest to ensure # autograd context is successfully cleaned up even when RPCs are failing. def context_cleanup_test_helper(self, rpc_args, func): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # test that in dist autograd, in the case that tensors communicated over RPC do # NOT require grad, we still cleanup the dist autograd contexts created # on other nodes. This is because the autograd context is still # communicated over RPC even if tensor arguments do not require grad, as # it is possible that the response could. - dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} + dst_ranks = {rank for rank in range(self.world_size) if rank != self.rank} # type: ignore[attr-defined] with dist_autograd.context() as context_id: for dst_rank in dst_ranks: @@ -2219,14 +2219,14 @@ def context_cleanup_test_helper(self, rpc_args, func): worker_name(dst_rank), _set_rpc_done, args=(context_id, 1) ) # the thread's context id should be cleaned up - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] dist_autograd._retrieve_context(context_id) # Ensure all peers have finished mutating the # `known_context_ids` set. dist.barrier() # check that all contexts have been cleaned up. success = _all_contexts_cleaned_up() - self.assertTrue(success) + self.assertTrue(success) # type: ignore[attr-defined] # no faulty_messages defined so this fails all retryable messages - see # faulty_rpc_agent_test_fixture.py for the list of retryable messages. @@ -2238,10 +2238,10 @@ def test_context_cleanup_tensor_with_grad(self): @dist_init def test_verify_backend_options(self): - self.assertEqual(self.rpc_backend, rpc.backend_registry.BackendType.FAULTY_PROCESS_GROUP) - self.assertEqual(self.rpc_backend_options.num_send_recv_threads, 8) - self.assertEqual(self.rpc_backend_options.num_fail_sends, 3) - self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 4) + self.assertEqual(self.rpc_backend, rpc.backend_registry.BackendType.FAULTY_PROCESS_GROUP) # type: ignore[attr-defined] + self.assertEqual(self.rpc_backend_options.num_send_recv_threads, 8) # type: ignore[attr-defined] + self.assertEqual(self.rpc_backend_options.num_fail_sends, 3) # type: ignore[attr-defined] + self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 4) # type: ignore[attr-defined] class WrapperModule(nn.Module): @@ -2262,29 +2262,29 @@ class TensorPipeCudaDistAutogradTest(RpcAgentTestFixture): @skip_if_lt_x_gpu(4) def test_device_maps_backward_pass(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # The reverse of this device mapping should be used for the backward pass. - options.set_device_map(dst, {self.rank: (self.rank + 1) % self.world_size}) + options.set_device_map(dst, {self.rank: (self.rank + 1) % self.world_size}) # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - t1 = torch.rand(10, device=self.rank, requires_grad=True) - t2 = torch.rand(10, device=self.rank, requires_grad=True) + t1 = torch.rand(10, device=self.rank, requires_grad=True) # type: ignore[attr-defined] + t2 = torch.rand(10, device=self.rank, requires_grad=True) # type: ignore[attr-defined] with dist_autograd.context() as context_id: res = rpc.rpc_sync(dst, torch.add, args=(t1, t2)) dist_autograd.backward(context_id, [res.sum()]) grads = dist_autograd.get_gradients(context_id) - self.assertEqual(torch.ones(10), grads[t1]) - self.assertEqual(torch.ones(10), grads[t2]) - self.assertEqual(t1.device, grads[t1].device) - self.assertEqual(t2.device, grads[t2].device) + self.assertEqual(torch.ones(10), grads[t1]) # type: ignore[attr-defined] + self.assertEqual(torch.ones(10), grads[t2]) # type: ignore[attr-defined] + self.assertEqual(t1.device, grads[t1].device) # type: ignore[attr-defined] + self.assertEqual(t2.device, grads[t2].device) # type: ignore[attr-defined] rpc.shutdown() @@ -2308,15 +2308,15 @@ def forward(self, input): def test_dist_autograd_sync_streams(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # The reverse of this device mapping should be used for the backward pass. - options.set_device_map(dst, {self.rank: (self.rank + 1) % self.world_size}) + options.set_device_map(dst, {self.rank: (self.rank + 1) % self.world_size}) # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -2324,7 +2324,7 @@ def test_dist_autograd_sync_streams(self): remote_compute = rpc.remote(dst, TensorPipeCudaDistAutogradTest.MyRemoteCompute) local_compute = TensorPipeCudaDistAutogradTest.MyLocalCompute(remote_compute) for _ in range(10): - input = torch.rand([1000, 10000], device=self.rank, requires_grad=True) + input = torch.rand([1000, 10000], device=self.rank, requires_grad=True) # type: ignore[attr-defined] # Run local autograd result = input * 2.0 r = random.random() @@ -2339,7 +2339,7 @@ def test_dist_autograd_sync_streams(self): # Compare grads. grads = dist_autograd.get_gradients(context_id) - self.assertEqual(input.grad, grads[input]) + self.assertEqual(input.grad, grads[input]) # type: ignore[attr-defined] rpc.shutdown() @@ -2347,17 +2347,17 @@ def test_dist_autograd_sync_streams(self): def test_gradients_synchronizations(self): options = self.rpc_backend_options for peer_rank in range(self.world_size): - options.set_device_map(worker_name(peer_rank), {self.rank: peer_rank}) + options.set_device_map(worker_name(peer_rank), {self.rank: peer_rank}) # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # this is master layers = [nn.Linear(2000, 2000) for _ in range(self.world_size - 1)] local_layers = [l.to(0) for l in layers] @@ -2369,7 +2369,7 @@ def test_gradients_synchronizations(self): args=(layers[rank - 1], rank) )) - x = torch.randn(5000, 2000).to(0) + x = torch.randn(5000, 2000).to(0) # type: ignore[call-overload] # local iteration local_model = nn.Sequential(*local_layers) local_model(x).sum().backward() @@ -2388,6 +2388,6 @@ def test_gradients_synchronizations(self): for i in range(len(futs)): local_gradients = [p.grad for p in local_layers[i].parameters()] for g1, g2 in zip(futs[i].wait(), local_gradients): - self.assertEqual(g1, g2) + self.assertEqual(g1, g2) # type: ignore[attr-defined] rpc.shutdown() diff --git a/torch/testing/_internal/distributed/rpc/dist_optimizer_test.py b/torch/testing/_internal/distributed/rpc/dist_optimizer_test.py index 250f0e382a751..e34a44637fb90 100644 --- a/torch/testing/_internal/distributed/rpc/dist_optimizer_test.py +++ b/torch/testing/_internal/distributed/rpc/dist_optimizer_test.py @@ -96,8 +96,8 @@ class DistOptimizerTest(RpcAgentTestFixture): @dist_init() def test_dist_optim_exception(self): # distributed version - owner1 = "worker%d" % ((self.rank + 1) % self.world_size) - owner2 = "worker%d" % ((self.rank + 2) % self.world_size) + owner1 = "worker%d" % ((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + owner2 = "worker%d" % ((self.rank + 2) % self.world_size) # type: ignore[attr-defined] remote_module1 = rpc.remote(owner1, MyModule) remote_module2 = rpc.remote(owner2, MyModule) @@ -118,21 +118,21 @@ def test_dist_optim_exception(self): loss = torch.add(output2.wait(), t1).sum() dist_autograd.backward(context_id, [loss]) - with self.assertRaisesRegex(Exception, "Error running optimizer"): + with self.assertRaisesRegex(Exception, "Error running optimizer"): # type: ignore[attr-defined] dist_optim.step(context_id) @dist_init() def test_dist_optim_exception_on_constructor(self): # distributed version - owner1 = "worker%d" % ((self.rank + 1) % self.world_size) - owner2 = "worker%d" % ((self.rank + 2) % self.world_size) + owner1 = "worker%d" % ((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + owner2 = "worker%d" % ((self.rank + 2) % self.world_size) # type: ignore[attr-defined] remote_module1 = rpc.remote(owner1, MyModule) remote_module2 = rpc.remote(owner2, MyModule) remote_param1 = remote_method(MyModule.get_w, remote_module1) remote_param2 = remote_method(MyModule.get_w, remote_module2) - with self.assertRaisesRegex(Exception, "Error creating optimizer."): + with self.assertRaisesRegex(Exception, "Error creating optimizer."): # type: ignore[attr-defined] dist_optim = DistributedOptimizer( OptimizerFailingOnConstructor, [remote_param1, remote_param2] ) @@ -159,8 +159,8 @@ def _test_dist_optim_base(self, optim_cls, *args, **kwargs): local_optim.step() # distributed version - owner1 = "worker%d" % ((self.rank + 1) % self.world_size) - owner2 = "worker%d" % ((self.rank + 2) % self.world_size) + owner1 = "worker%d" % ((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + owner2 = "worker%d" % ((self.rank + 2) % self.world_size) # type: ignore[attr-defined] remote_module1 = rpc.remote(owner1, MyModule) remote_module2 = rpc.remote(owner2, MyModule) @@ -170,8 +170,8 @@ def _test_dist_optim_base(self, optim_cls, *args, **kwargs): old_w1_remote = remote_param1.to_here() # sanity check: local and remote initial weights should match - self.assertEqual(old_w1, remote_param1.to_here()) - self.assertEqual(old_w2, remote_param2.to_here()) + self.assertEqual(old_w1, remote_param1.to_here()) # type: ignore[attr-defined] + self.assertEqual(old_w2, remote_param2.to_here()) # type: ignore[attr-defined] dist_optim = DistributedOptimizer( optim_cls, [remote_param1, remote_param2], *args, **kwargs @@ -192,11 +192,11 @@ def _test_dist_optim_base(self, optim_cls, *args, **kwargs): new_w2 = rpc_async_method(MyModule.get_w, remote_module2).wait() # ensure optimizer changed weights - self.assertNotEqual(old_w1, new_w1) - self.assertNotEqual(old_w2, new_w2) + self.assertNotEqual(old_w1, new_w1) # type: ignore[attr-defined] + self.assertNotEqual(old_w2, new_w2) # type: ignore[attr-defined] # ensure local equals remote - self.assertEqual(new_w1, module1.get_w()) - self.assertEqual(new_w2, module2.get_w()) + self.assertEqual(new_w1, module1.get_w()) # type: ignore[attr-defined] + self.assertEqual(new_w2, module2.get_w()) # type: ignore[attr-defined] @dist_init() def test_dist_optim(self): diff --git a/torch/testing/_internal/distributed/rpc/examples/parameter_server_test.py b/torch/testing/_internal/distributed/rpc/examples/parameter_server_test.py index 414e079b86d36..dabd33e71271c 100644 --- a/torch/testing/_internal/distributed/rpc/examples/parameter_server_test.py +++ b/torch/testing/_internal/distributed/rpc/examples/parameter_server_test.py @@ -32,7 +32,7 @@ class BatchUpdateParameterServer(object): def __init__(self, batch_update_size): self.model = nn.Linear(in_features, out_features) self.lock = threading.Lock() - self.future_model = torch.futures.Future() + self.future_model = torch.futures.Future() # type: ignore[var-annotated] self.batch_update_size = batch_update_size self.curr_update_size = 0 self.optimizer = optim.SGD(self.model.parameters(), lr=0.001, momentum=0.9) @@ -101,7 +101,7 @@ def run_trainer(ps_rref): def run_ps(trainers): timed_log("Start training") start = perf_counter() - ps_rref = rpc.RRef(BatchUpdateParameterServer(len(trainers))) + ps_rref = rpc.RRef(BatchUpdateParameterServer(len(trainers))) # type: ignore[var-annotated] futs = [] for trainer in trainers: futs.append( @@ -118,19 +118,19 @@ class ParameterServerTest(RpcAgentTestFixture): @dist_init(setup_rpc=False) def test_batch_updating_parameter_server(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) else: rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) diff --git a/torch/testing/_internal/distributed/rpc/examples/reinforcement_learning_rpc_test.py b/torch/testing/_internal/distributed/rpc/examples/reinforcement_learning_rpc_test.py index fff6e5865f774..019a9593a7e97 100644 --- a/torch/testing/_internal/distributed/rpc/examples/reinforcement_learning_rpc_test.py +++ b/torch/testing/_internal/distributed/rpc/examples/reinforcement_learning_rpc_test.py @@ -32,7 +32,7 @@ def _remote_method(method, rref, *args, **kwargs): a helper function to run method on the owner of rref and fetch back the result using RPC """ - args = [method, rref] + list(args) + args = [method, rref] + list(args) # type: ignore[assignment] return rpc_sync(rref.owner(), _call_method, args=args, kwargs=kwargs) @@ -84,7 +84,7 @@ def step(self, action): state = torch.randn(self.state_dim) reward = torch.rand(1).item() * self.reward_threshold done = self.iter >= self.num_iters - info = {} + info = {} # type: ignore[var-annotated] return state, reward, done, info @@ -125,9 +125,9 @@ def run_episode(self, agent_rref, n_steps): class Agent: def __init__(self, world_size): self.ob_rrefs = [] - self.agent_rref = RRef(self) - self.rewards = {} - self.saved_log_probs = {} + self.agent_rref = RRef(self) # type: ignore[var-annotated] + self.rewards = {} # type: ignore[var-annotated] + self.saved_log_probs = {} # type: ignore[var-annotated] self.policy = Policy() self.optimizer = optim.Adam(self.policy.parameters(), lr=1e-2) self.eps = np.finfo(np.float32).eps.item() @@ -197,24 +197,24 @@ def finish_episode(self): # use the minimum observer reward to calculate the running reward min_reward = min([sum(self.rewards[ob_id]) for ob_id in self.rewards]) - self.running_reward = 0.05 * min_reward + (1 - 0.05) * self.running_reward + self.running_reward = 0.05 * min_reward + (1 - 0.05) * self.running_reward # type: ignore[assignment] # clear saved probs and rewards for ob_id in self.rewards: self.rewards[ob_id] = [] self.saved_log_probs[ob_id] = [] - policy_loss, returns = [], [] + policy_loss, returns = [], [] # type: ignore[var-annotated] for r in rewards[::-1]: R = r + GAMMA * R returns.insert(0, R) - returns = torch.tensor(returns) - returns = (returns - returns.mean()) / (returns.std() + self.eps) + returns = torch.tensor(returns) # type: ignore[assignment] + returns = (returns - returns.mean()) / (returns.std() + self.eps) # type: ignore[attr-defined] for log_prob, R in zip(probs, returns): policy_loss.append(-log_prob * R) self.optimizer.zero_grad() - policy_loss = torch.cat(policy_loss).sum() - policy_loss.backward() + policy_loss = torch.cat(policy_loss).sum() # type: ignore[assignment] + policy_loss.backward() # type: ignore[attr-defined] self.optimizer.step() return min_reward @@ -232,12 +232,12 @@ def run_agent(agent, n_steps): class ReinforcementLearningRpcTest(RpcAgentTestFixture): @dist_init(setup_rpc=False) def test_rl_rpc(self): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # Rank 0 is the agent. rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -246,13 +246,13 @@ def test_rl_rpc(self): # Ensure training was run. We don't really care about whether the task was learned, # since the purpose of the test is to check the API calls. - self.assertGreater(agent.running_reward, 0.0) + self.assertGreater(agent.running_reward, 0.0) # type: ignore[attr-defined] else: # Other ranks are observers that passively wait for instructions from the agent. rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) diff --git a/torch/testing/_internal/distributed/rpc/faulty_rpc_agent_test_fixture.py b/torch/testing/_internal/distributed/rpc/faulty_rpc_agent_test_fixture.py index 2a091936f9625..2a588fef17857 100644 --- a/torch/testing/_internal/distributed/rpc/faulty_rpc_agent_test_fixture.py +++ b/torch/testing/_internal/distributed/rpc/faulty_rpc_agent_test_fixture.py @@ -21,7 +21,7 @@ class FaultyRpcAgentTestFixture(RpcAgentTestFixture): def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # type: ignore[call-arg] self.messages_to_fail = retryable_message_types self.messages_to_delay = default_messages_to_delay diff --git a/torch/testing/_internal/distributed/rpc/jit/dist_autograd_test.py b/torch/testing/_internal/distributed/rpc/jit/dist_autograd_test.py index c4887f8c23f31..fe05c9dce1f54 100644 --- a/torch/testing/_internal/distributed/rpc/jit/dist_autograd_test.py +++ b/torch/testing/_internal/distributed/rpc/jit/dist_autograd_test.py @@ -31,13 +31,13 @@ def fork_add(t1, t2, dst: str): class JitDistAutogradTest(RpcAgentTestFixture): @dist_init def test_get_gradients(self): - dst_rank = self.rank + dst_rank = self.rank # type: ignore[attr-defined] @torch.jit.script def dist_get_gradients(context_id: int) -> (Dict[Tensor, Tensor]): return dist_autograd.get_gradients(context_id) - FileCheck().check("get_gradients").run(str(dist_get_gradients.graph)) + FileCheck().check("get_gradients").run(str(dist_get_gradients.graph)) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.rand((3, 3), requires_grad=True) t2 = torch.rand((3, 3), requires_grad=True) @@ -46,26 +46,26 @@ def dist_get_gradients(context_id: int) -> (Dict[Tensor, Tensor]): dist_autograd.backward(context_id, [t3.sum()]) grads = dist_get_gradients(context_id) - self.assertEqual(2, len(grads)) - self.assertIn(t1, grads) - self.assertIn(t2, grads) - self.assertEqual(torch.ones(3, 3), grads[t1]) - self.assertEqual(torch.ones(3, 3), grads[t2]) + self.assertEqual(2, len(grads)) # type: ignore[attr-defined] + self.assertIn(t1, grads) # type: ignore[attr-defined] + self.assertIn(t2, grads) # type: ignore[attr-defined] + self.assertEqual(torch.ones(3, 3), grads[t1]) # type: ignore[attr-defined] + self.assertEqual(torch.ones(3, 3), grads[t2]) # type: ignore[attr-defined] @dist_init def test_dist_backward(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return @torch.jit.script def dist_backward_script(context_id: int, loss: torch.Tensor): dist_autograd.backward(context_id, [loss]) - FileCheck().check("dist_backward").run(str(dist_backward_script.graph)) + FileCheck().check("dist_backward").run(str(dist_backward_script.graph)) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t1 = torch.rand(3, 3, requires_grad=True) t2 = torch.rand(3, 3, requires_grad=True) - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] loss = rpc.rpc_sync(dst_worker_name, torch.add, args=(t1, t2)).sum() dist_backward_script(context_id, loss) @@ -74,19 +74,19 @@ def test_jit_fork_within_context(self): with dist_autograd.context() as context_id: t1 = torch.rand((3, 3), requires_grad=True) t2 = torch.rand((3, 3), requires_grad=True) - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] res = fork_add(t1, t2, dst_worker_name) loss = res.sum() dist_autograd.backward(context_id, [loss]) grads = dist_autograd.get_gradients(context_id) - self.assertEqual(2, len(grads)) - self.assertIn(t1, grads) - self.assertIn(t2, grads) + self.assertEqual(2, len(grads)) # type: ignore[attr-defined] + self.assertIn(t1, grads) # type: ignore[attr-defined] + self.assertIn(t2, grads) # type: ignore[attr-defined] @dist_init def test_restore_context_after_swtich_to_jit_thread(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return @torch.jit.script @@ -107,8 +107,8 @@ def forward_script( with dist_autograd.context() as context_id: t1 = torch.ones((2, 3), requires_grad=True) t2 = torch.ones((2, 3), requires_grad=True) - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] loss0, loss1 = forward_script(context_id, dst_worker_name, t1, t2) dist_autograd.backward(context_id, [loss0, loss1]) grad0, grad1 = dist_autograd.get_gradients(context_id) - self.assertEqual(grad0, grad1) + self.assertEqual(grad0, grad1) # type: ignore[attr-defined] diff --git a/torch/testing/_internal/distributed/rpc/jit/rpc_test.py b/torch/testing/_internal/distributed/rpc/jit/rpc_test.py index 45740f8bcfb95..043a9b5c5dee2 100644 --- a/torch/testing/_internal/distributed/rpc/jit/rpc_test.py +++ b/torch/testing/_internal/distributed/rpc/jit/rpc_test.py @@ -57,7 +57,7 @@ def return_value(value: int) -> int: class RRefAPITest: @dist_init def test_rref_is_owner(self): - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref_var = rpc_return_rref(dst_worker_name) @torch.jit.script @@ -65,66 +65,66 @@ def rref_tensor_is_owner(rref_var: RRef[Tensor]) -> bool: return rref_var.is_owner() res = rref_tensor_is_owner(rref_var) - self.assertEqual(res, False) + self.assertEqual(res, False) # type: ignore[attr-defined] @dist_init def test_rref_local_value(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref = rpc_return_rref(dst_worker_name) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, r"Can't call RRef.local_value\(\) on a non-owner RRef" ): rref_local_value(rref) ret = ret = rpc.rpc_sync(dst_worker_name, rref_local_value, (rref,)) - self.assertEqual(ret, torch.add(torch.ones(2, 2), 1)) + self.assertEqual(ret, torch.add(torch.ones(2, 2), 1)) # type: ignore[attr-defined] @dist_init def test_local_rref_local_value(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name(self.rank) + dst_worker_name = worker_name(self.rank) # type: ignore[attr-defined] rref = rpc.remote(dst_worker_name, return_value, (5,), {}) ret = rref_local_value(rref) - self.assertEqual(ret, 5) + self.assertEqual(ret, 5) # type: ignore[attr-defined] def _create_rref(self): - owner_rank = (self.rank + 2) % self.world_size + owner_rank = (self.rank + 2) % self.world_size # type: ignore[attr-defined] return rpc.remote( worker_name(owner_rank), torch.add, args=(torch.zeros(2, 2), 1) ) @dist_init def test_user_rrefs_confirmed(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref = self._create_rref() ret = rpc.rpc_sync( worker_name(dst_rank), script_check_rref_confirmed, args=(rref,) ) - self.assertEqual(ret, True) + self.assertEqual(ret, True) # type: ignore[attr-defined] @dist_init def test_user_rrefs_confirmed_remote(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref = self._create_rref() ret_rref = rpc.remote( worker_name(dst_rank), script_check_rref_confirmed, args=(rref,) ) - self.assertEqual(ret_rref.to_here(), True) + self.assertEqual(ret_rref.to_here(), True) # type: ignore[attr-defined] @dist_init def test_rref_list_mutate(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] list_rref = rpc.remote(dst, list_create) rpc.rpc_sync(dst, rref_list_mutate, args=(list_rref,)) - self.assertEqual(list_rref.to_here(), [1, 2, 3, 4, 5, 6]) + self.assertEqual(list_rref.to_here(), [1, 2, 3, 4, 5, 6]) # type: ignore[attr-defined] @torch.jit.script @@ -244,52 +244,52 @@ def rref_script_annotation(rref_var: RRef[Tensor]) -> Tensor: class RRefTypingTest: @dist_init def test_rref_as_arg_and_return(self): - n = self.rank + 1 - dst_rank = n % self.world_size + n = self.rank + 1 # type: ignore[attr-defined] + dst_rank = n % self.world_size # type: ignore[attr-defined] local_ret = one_arg(torch.ones(2, 2)) # create rref on current rank - rref = rpc.remote(worker_name(self.rank), one_arg, args=(torch.ones(2, 2),)) + rref = rpc.remote(worker_name(self.rank), one_arg, args=(torch.ones(2, 2),)) # type: ignore[attr-defined] # pass rref to another user in rpc call ret = rpc.rpc_sync(worker_name(dst_rank), rref_to_here, args=(rref,)) - self.assertEqual(ret, local_ret) + self.assertEqual(ret, local_ret) # type: ignore[attr-defined] # return rref in rpc call rref1 = rpc.rpc_sync(worker_name(dst_rank), return_rref, args=(rref,)) - self.assertEqual(rref1.to_here(), local_ret) + self.assertEqual(rref1.to_here(), local_ret) # type: ignore[attr-defined] # pass rref to another user in remote call rref2 = rpc.remote(worker_name(dst_rank), rref_to_here, args=(rref,)) - self.assertEqual(rref2.to_here(), local_ret) + self.assertEqual(rref2.to_here(), local_ret) # type: ignore[attr-defined] # return rref in remote call rref3 = rpc.remote(worker_name(dst_rank), return_rref, args=(rref,)) - self.assertEqual(rref3.to_here().to_here(), local_ret) + self.assertEqual(rref3.to_here().to_here(), local_ret) # type: ignore[attr-defined] @dist_init def test_my_script_module_with_rrefs(self): - n = self.rank + 1 - dst_rank = n % self.world_size + n = self.rank + 1 # type: ignore[attr-defined] + dst_rank = n % self.world_size # type: ignore[attr-defined] module_with_rrefs = MyScriptModuleWithRRefs(worker_name(dst_rank)) res = module_with_rrefs() - self.assertEqual(res, torch.ones(2, 2) * 9) + self.assertEqual(res, torch.ones(2, 2) * 9) # type: ignore[attr-defined] @dist_init def test_rref_python_annotation(self): - n = self.rank + 1 - dst_rank = n % self.world_size + n = self.rank + 1 # type: ignore[attr-defined] + dst_rank = n % self.world_size # type: ignore[attr-defined] rref_var = rpc_return_rref(worker_name(dst_rank)) res = rref_script_annotation(rref_var) - self.assertEqual(res, torch.ones(2, 2) + 1) + self.assertEqual(res, torch.ones(2, 2) + 1) # type: ignore[attr-defined] class FutureTypingTest: @dist_init def test_future_passed_between_python_and_jit(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] inputs = (torch.tensor([1, 1]), torch.tensor([2, 2])) ret_fut = rpc.rpc_async(worker_name(dst_rank), two_args_two_kwargs, args=inputs) expected_res = torch.tensor([10, 10]) @@ -298,7 +298,7 @@ def test_future_passed_between_python_and_jit(self): def future_wait_in_script(fut: Future[Tensor]) -> Tensor: return fut.wait() - self.assertEqual(future_wait_in_script(ret_fut), expected_res) + self.assertEqual(future_wait_in_script(ret_fut), expected_res) # type: ignore[attr-defined] @torch.jit.script def future_return_to_python( @@ -309,14 +309,14 @@ def future_return_to_python( ) fut_res = future_return_to_python(dst_rank, inputs) - self.assertEqual(fut_res.wait(), expected_res) + self.assertEqual(fut_res.wait(), expected_res) # type: ignore[attr-defined] @dist_init def test_future_python_annotation(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] input_0 = torch.ones(2, 2) input_1 = 1 expected_res = torch.add(input_0, input_1) @@ -332,7 +332,7 @@ def script_use_future() -> Tensor: return fut.wait() res = script_use_future() - self.assertEqual(res, expected_res) + self.assertEqual(res, expected_res) # type: ignore[attr-defined] @torch.jit.script @@ -386,44 +386,44 @@ def script_rref_run_forward_my_script_module(rref: RRef[MyModuleInterface]) -> T class LocalRRefTest: @dist_init def test_create_local_script_class_rref_in_py(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return # Create a local RRef. - rref_script_class = rpc.RRef(MyScriptClass(self.rank)) + rref_script_class = rpc.RRef(MyScriptClass(self.rank)) # type: ignore[var-annotated, attr-defined] ret = rref_script_class.to_here().get_value() - self.assertEqual(ret, self.rank) + self.assertEqual(ret, self.rank) # type: ignore[attr-defined] @dist_init def test_create_local_script_module_rref_in_py(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return # Create a local RRef. - rref_script_module = rpc.RRef(MyScriptModule(self.rank), MyModuleInterface) + rref_script_module = rpc.RRef(MyScriptModule(self.rank), MyModuleInterface) # type: ignore[var-annotated, attr-defined] ret = rref_script_module.to_here().forward() - self.assertEqual(ret, torch.ones(self.rank)) + self.assertEqual(ret, torch.ones(self.rank)) # type: ignore[attr-defined] # Create a local RRef without type hint. - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, ( "The RRef being created contains a ScriptModule, " "must provide its ModuleInterface type hint." ), ): - rref_script_module = rpc.RRef(MyScriptModule(self.rank)) + rref_script_module = rpc.RRef(MyScriptModule(self.rank)) # type: ignore[attr-defined] @dist_init def test_return_local_script_class_rref_in_py_and_use_in_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Create a local RRef remotely in Python. rref = rpc.rpc_sync( - dst_worker_name, owner_create_rref_my_script_class, args=(self.rank,) + dst_worker_name, owner_create_rref_my_script_class, args=(self.rank,) # type: ignore[attr-defined] ) def use_rref_on_owner(rref: RRef[MyScriptClass]) -> int: @@ -437,23 +437,23 @@ def use_rref_on_owner(rref: RRef[MyScriptClass]) -> int: # Use RRef in local Python RPC and remote Script run. ret = use_rref_on_owner(rref) - self.assertEqual(ret, self.rank) + self.assertEqual(ret, self.rank) # type: ignore[attr-defined] # Use RRef in local Script RPC and remote Script run. use_rref_on_owner_script = torch.jit.script(use_rref_on_owner) ret = use_rref_on_owner_script(rref) - self.assertEqual(ret, self.rank) + self.assertEqual(ret, self.rank) # type: ignore[attr-defined] @dist_init def test_return_local_script_module_rref_in_py_and_use_in_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Create a local RRef remotely in Python. rref = rpc.rpc_sync( - dst_worker_name, owner_create_rref_my_script_module, args=(self.rank,) + dst_worker_name, owner_create_rref_my_script_module, args=(self.rank,) # type: ignore[attr-defined] ) def use_rref_on_owner(rref: RRef[MyModuleInterface]) -> Tensor: @@ -470,12 +470,12 @@ def use_rref_on_owner(rref: RRef[MyModuleInterface]) -> Tensor: # Use RRef in local Python RPC and remote Script run. ret = use_rref_on_owner(rref) - self.assertEqual(ret, torch.ones(self.rank)) + self.assertEqual(ret, torch.ones(self.rank)) # type: ignore[attr-defined] # Use RRef in local Script RPC and remote Script run. use_rref_on_owner_script = torch.jit.script(use_rref_on_owner) ret = use_rref_on_owner_script(rref) - self.assertEqual(ret, torch.ones(self.rank)) + self.assertEqual(ret, torch.ones(self.rank)) # type: ignore[attr-defined] def python_function(): @@ -535,26 +535,26 @@ class JitRpcOpTest: # Call functions remotely from Script. @dist_init def test_all_kwargs_are_populated_by_defaults(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.tensor([1, 1]), torch.tensor([2, 2])) - kwargs = {} + kwargs = {} # type: ignore[var-annotated] for script_op in [script_rpc_async_call, script_rpc_sync_call, script_rpc_remote_call]: ret = script_op( dst_worker_name, args, kwargs ) - self.assertEqual(ret, torch.tensor([10, 10])) + self.assertEqual(ret, torch.tensor([10, 10])) # type: ignore[attr-defined] @dist_init def test_some_kwargs_are_populated_by_defaults(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.tensor([1, 1]), torch.tensor([2, 2])) kwargs = {"first_kwarg": torch.tensor([2, 2])} @@ -563,14 +563,14 @@ def test_some_kwargs_are_populated_by_defaults(self): ret = script_op( dst_worker_name, args, kwargs ) - self.assertEqual(ret, torch.tensor([9, 9])) + self.assertEqual(ret, torch.tensor([9, 9])) # type: ignore[attr-defined] @dist_init def test_no_kwargs_are_populated_by_defaults(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.tensor([1, 1]), torch.tensor([2, 2])) kwargs = { @@ -581,14 +581,14 @@ def test_no_kwargs_are_populated_by_defaults(self): ret = script_op( dst_worker_name, args, kwargs ) - self.assertEqual(ret, torch.tensor([8, 8])) + self.assertEqual(ret, torch.tensor([8, 8])) # type: ignore[attr-defined] @dist_init def test_args_and_kwargs_contain_different_types(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] @torch.jit.script def script_rpc_async_call_with_assorted_types( @@ -614,14 +614,14 @@ def script_rpc_async_call_with_assorted_types( ret = script_rpc_async_call_with_assorted_types( dst_worker_name ) - self.assertEqual(ret, (torch.tensor([4, 4]), "str_arg_str_kwarg", 4)) + self.assertEqual(ret, (torch.tensor([4, 4]), "str_arg_str_kwarg", 4)) # type: ignore[attr-defined] @dist_init def test_kwargs_not_passed(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] @torch.jit.script def script_rpc_async_call_without_kwargs_passed( @@ -635,14 +635,14 @@ def script_rpc_async_call_without_kwargs_passed( ret = script_rpc_async_call_without_kwargs_passed( dst_worker_name ) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @dist_init def test_args_kwargs_are_neither_passed(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] @torch.jit.script def script_rpc_async_call_without_args_kwargs_passed( @@ -655,37 +655,37 @@ def script_rpc_async_call_without_args_kwargs_passed( ret = script_rpc_async_call_without_args_kwargs_passed( dst_worker_name ) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @dist_init def test_less_than_needed_args_are_specified(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Notice, args matching happens during scripting. - with self.assertRaisesRegex(RuntimeError, "Argument second_arg not provided"): + with self.assertRaisesRegex(RuntimeError, "Argument second_arg not provided"): # type: ignore[attr-defined] @torch.jit.script def script_rpc_async_call_with_less_args( dst_worker_name: str, # noqa: E999 ): args = (torch.tensor([1, 1]),) - kwargs = {} + kwargs = {} # type: ignore[var-annotated] fut = rpc.rpc_async(dst_worker_name, two_args_two_kwargs, args, kwargs) ret = fut.wait() return ret @dist_init def test_more_than_needed_args_are_specified(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Notice, args matching happens during scripting. - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Expected at most 4 arguments but found 5 positional arguments", ): @@ -701,17 +701,17 @@ def script_rpc_async_call_with_more_args( torch.tensor([4, 4]), torch.tensor([5, 5]), ) - kwargs = {} + kwargs = {} # type: ignore[var-annotated] fut = rpc.rpc_async(dst_worker_name, two_args_two_kwargs, args, kwargs) ret = fut.wait() return ret @dist_init def test_unexepected_kwarg_is_specified(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Notice, kwargs matching happens during execution. @torch.jit.script @@ -724,41 +724,41 @@ def script_rpc_async_call_with_unexpected_kwarg( ret = fut.wait() return ret - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Unknown keyword argument 'third_kwarg'" ): ret = script_rpc_async_call_with_unexpected_kwarg( dst_worker_name ) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @dist_init def test_call_python_function_remotely_from_script_not_supported(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] @torch.jit.script def rpc_async_call_remote_py_function_in_torchscript(dst_worker_name: str): args = () - kwargs = {} + kwargs = {} # type: ignore[var-annotated] fut = rpc.rpc_async(dst_worker_name, python_function, args, kwargs) ret = fut.wait() return ret - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "attempted to get undefined function" ): ret = rpc_async_call_remote_py_function_in_torchscript(dst_worker_name) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @dist_init def test_call_script_function_that_raises_remotely_from_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Notice, TorchScript always translates(emits) Python `raise` statement, # as the exception message string, "Exception", @@ -768,23 +768,23 @@ def rpc_async_call_remote_raising_torchscript_in_torchscript( dst_worker_name: str, ): args = () - kwargs = {} + kwargs = {} # type: ignore[var-annotated] fut = rpc.rpc_async(dst_worker_name, raise_script, args, kwargs) ret = fut.wait() return ret - with self.assertRaisesRegex(RuntimeError, "Expected error"): + with self.assertRaisesRegex(RuntimeError, "Expected error"): # type: ignore[attr-defined] ret = rpc_async_call_remote_raising_torchscript_in_torchscript( dst_worker_name ) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @dist_init def test_call_script_function_that_not_exists_remotely_from_script(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] @torch.jit.script def nonexisting_script(): @@ -795,18 +795,18 @@ def rpc_async_call_remote_nonexisting_torchscript_in_torchscript( dst_worker_name: str, ): args = () - kwargs = {} + kwargs = {} # type: ignore[var-annotated] fut = rpc.rpc_async(dst_worker_name, nonexisting_script, args, kwargs) ret = fut.wait() return ret - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "attempted to get undefined function nonexisting_script" ): ret = rpc_async_call_remote_nonexisting_torchscript_in_torchscript( dst_worker_name ) - self.assertEqual(ret, 0) + self.assertEqual(ret, 0) # type: ignore[attr-defined] @torch.jit.ignore @@ -870,48 +870,48 @@ class JitRpcTest( ): @dist_init def test_torchscript_function(self): - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] local_ret = one_arg(torch.ones(2, 2)) ret = rpc.rpc_sync(dst_worker_name, one_arg, args=(torch.ones(2, 2),)) - self.assertEqual(ret, local_ret) + self.assertEqual(ret, local_ret) # type: ignore[attr-defined] rref = rpc.remote(dst_worker_name, one_arg, args=(torch.ones(2, 2),)) - self.assertEqual(rref.to_here(), local_ret) + self.assertEqual(rref.to_here(), local_ret) # type: ignore[attr-defined] # create rref to itself local_rref = rpc.remote( - worker_name(self.rank), one_arg, args=(torch.ones(2, 2),) + worker_name(self.rank), one_arg, args=(torch.ones(2, 2),) # type: ignore[attr-defined] ) - self.assertEqual(local_rref.to_here(), local_ret) + self.assertEqual(local_rref.to_here(), local_ret) # type: ignore[attr-defined] @dist_init def test_torchscript_function_exception(self): - dst_worker_name = worker_name((self.rank + 1) % self.world_size) - with self.assertRaisesRegex(RuntimeError, r"one_arg\(\) expected at most"): + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + with self.assertRaisesRegex(RuntimeError, r"one_arg\(\) expected at most"): # type: ignore[attr-defined] ret = rpc.rpc_sync(dst_worker_name, one_arg, args=(10, 20)) - with self.assertRaisesRegex(RuntimeError, r"one_arg\(\) expected at most"): + with self.assertRaisesRegex(RuntimeError, r"one_arg\(\) expected at most"): # type: ignore[attr-defined] rref = rpc.remote(dst_worker_name, one_arg, args=(10, 20)) @dist_init def test_torchscript_functions_not_supported(self): - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] - my_local_script_module = MyScriptModule(self.rank) + my_local_script_module = MyScriptModule(self.rank) # type: ignore[attr-defined] # It is not thread safe to instantiate MyScriptModule in multiple threads, # wait for local MyScriptModule instantiation to finish, # otherwise it could instantiate MyScriptModule in parallel with # server thread in the below - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() # rpc_sync still accepts script class and run it in # the same code path as python call. - ret = rpc.rpc_sync(dst_worker_name, MyScriptClass, args=(self.rank,)) + ret = rpc.rpc_sync(dst_worker_name, MyScriptClass, args=(self.rank,)) # type: ignore[attr-defined] # rpc_sync does not accept script module method. # Python 3.5 and Python 3.6 throw different error message, the only # common word can be greped is "pickle". - with self.assertRaisesRegex(TypeError, "pickle"): + with self.assertRaisesRegex(TypeError, "pickle"): # type: ignore[attr-defined] ret = rpc.rpc_async( dst_worker_name, my_local_script_module.forward, args=() ) @@ -926,72 +926,72 @@ def test_remote_script_module(self): api._ignore_rref_leak = True - local_ret = torch.ones(self.rank) + torch.ones(self.rank) + local_ret = torch.ones(self.rank) + torch.ones(self.rank) # type: ignore[attr-defined] - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size remote_ref = rpc.remote( - worker_name(dst_rank), construct_my_script_module, args=(self.rank,) + worker_name(dst_rank), construct_my_script_module, args=(self.rank,) # type: ignore[attr-defined] ) # pass rref arg to owner ret = rpc.rpc_sync( worker_name(dst_rank), run_ref_script_module, - args=(remote_ref, torch.ones(self.rank)), + args=(remote_ref, torch.ones(self.rank)), # type: ignore[attr-defined] ) - self.assertEqual(ret, local_ret) + self.assertEqual(ret, local_ret) # type: ignore[attr-defined] # pass rref arg to self/user - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "is an RRef to a ScriptModule. It can't be sent through RPC from owner,", ): ret = rpc.rpc_sync( - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] run_ref_script_module, - args=(remote_ref, torch.ones(self.rank)), + args=(remote_ref, torch.ones(self.rank)), # type: ignore[attr-defined] ) @dist_init def test_create_script_module_on_remote(self): - dst_name = worker_name((self.rank + 1) % self.world_size) + dst_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # Construct on remote end with rpc_sync created_script_module = rpc.rpc_sync( - dst_name, MyScriptModule, args=(self.rank,) + dst_name, MyScriptModule, args=(self.rank,) # type: ignore[attr-defined] ) # Forward should output a ones tensor of self.rank. - self.assertTrue(isinstance(created_script_module, torch.jit.ScriptModule)) + self.assertTrue(isinstance(created_script_module, torch.jit.ScriptModule)) # type: ignore[attr-defined] rank_ones_tensor = created_script_module() - self.assertEqual(torch.ones(self.rank), rank_ones_tensor) + self.assertEqual(torch.ones(self.rank), rank_ones_tensor) # type: ignore[attr-defined] # Construct ScriptModule with rpc.remote. - remote_script_module = rpc.remote(dst_name, MyScriptModule, args=(self.rank,)) + remote_script_module = rpc.remote(dst_name, MyScriptModule, args=(self.rank,)) # type: ignore[attr-defined] # Verify it is an instance of ScriptModule on remote end. remote_end_is_script = rpc.rpc_sync( remote_script_module.owner(), rref_isinstance, args=(remote_script_module, torch.jit.ScriptModule), ) - self.assertTrue(remote_end_is_script) + self.assertTrue(remote_end_is_script) # type: ignore[attr-defined] # Run forward pass remotely. remote_forward_output = remote_script_module.rpc_sync().forward() - self.assertEqual(remote_forward_output, torch.ones(self.rank)) + self.assertEqual(remote_forward_output, torch.ones(self.rank)) # type: ignore[attr-defined] # Run function defined on ScriptModule remotely. remote_func_output = remote_script_module.rpc_sync().custom_func() - self.assertEqual(remote_func_output, torch.ones(self.rank)) + self.assertEqual(remote_func_output, torch.ones(self.rank)) # type: ignore[attr-defined] # Ensure we can transfer ScriptModule RRef to this rank and run # forward pass. local_script_module = remote_script_module.to_here() - self.assertTrue(isinstance(local_script_module, torch.jit.ScriptModule)) + self.assertTrue(isinstance(local_script_module, torch.jit.ScriptModule)) # type: ignore[attr-defined] rank_ones_tensor = local_script_module() - self.assertEqual(rank_ones_tensor, torch.ones(self.rank)) + self.assertEqual(rank_ones_tensor, torch.ones(self.rank)) # type: ignore[attr-defined] local_script_func_output = local_script_module.custom_func() - self.assertEqual(local_script_func_output, torch.ones(self.rank)) + self.assertEqual(local_script_func_output, torch.ones(self.rank)) # type: ignore[attr-defined] @dist_init def test_load_script_module_with_pickled_rref(self): - dst_name = worker_name((self.rank + 1) % self.world_size) + dst_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] m1 = MyScriptModuleWithRRefs(dst_name) m2 = MyScriptModuleWithRRefs(dst_name) @@ -1007,15 +1007,15 @@ def test_load_script_module_with_pickled_rref(self): args=(f.getvalue(),) ) out2 = m2() - self.assertEqual(out1, out2) + self.assertEqual(out1, out2) # type: ignore[attr-defined] @dist_init def test_rref_jit_pickle_not_supported(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref_var = rpc_return_rref(worker_name(dst_rank)) with TemporaryFileName() as fname: - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "RRef jit pickling is only allowed inside RPC calls" ): save_rref(rref_var, fname) @@ -1023,30 +1023,30 @@ def test_rref_jit_pickle_not_supported(self): @dist_init def test_remote_script_throw(self): rref = rpc.remote( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_raise_func, args=(torch.ones(2),), ) - with self.assertRaisesRegex(Exception, ".*Expected error.*"): + with self.assertRaisesRegex(Exception, ".*Expected error.*"): # type: ignore[attr-defined] rref.to_here() @dist_init def test_remote_script_udf(self): rref = rpc.remote( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_udf, args=(torch.ones(2),), ) - self.assertEqual(rref.to_here(), torch.ones(2) * 2) + self.assertEqual(rref.to_here(), torch.ones(2) * 2) # type: ignore[attr-defined] @dist_init def test_async_script_udf(self): future = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_udf, args=(torch.ones(2),), ) - self.assertEqual(future.wait(), torch.ones(2) * 2) + self.assertEqual(future.wait(), torch.ones(2) * 2) # type: ignore[attr-defined] @dist_init def test_callback_simple(self): @@ -1054,15 +1054,15 @@ def callback(fut): return fut.wait() + 1 future = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_udf, args=(torch.ones(2),), ).then(callback) - self.assertEqual(future.wait(), torch.ones(2) * 2 + 1) + self.assertEqual(future.wait(), torch.ones(2) * 2 + 1) # type: ignore[attr-defined] @dist_init def test_callback_chain(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst = worker_name(n % self.world_size) def callback(fut): @@ -1076,7 +1076,7 @@ def callback(fut): for _ in range(num_cbs): fut = fut.then(callback) - self.assertEqual(fut.wait(), torch.ones(n, n) + 1 + num_cbs) + self.assertEqual(fut.wait(), torch.ones(n, n) + 1 + num_cbs) # type: ignore[attr-defined] @dist_init def test_add_done_callback(self): @@ -1087,7 +1087,7 @@ def callback(fut): callback_called = fut.wait() * 2 future = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_udf, args=(torch.ones(2),), ) @@ -1095,44 +1095,44 @@ def callback(fut): future.add_done_callback(callback) future_then = future.then(lambda _: True) - self.assertEqual(future.wait(), torch.ones(2) * 2) + self.assertEqual(future.wait(), torch.ones(2) * 2) # type: ignore[attr-defined] # We have no guarantee that the add_done_callback fn will execute before the test finishes. # Adding a 'then' callback that runs afterwards to guarantee we wait for the first callback future_then.wait() - self.assertEqual(callback_called, torch.ones(2) * 4) + self.assertEqual(callback_called, torch.ones(2) * 4) # type: ignore[attr-defined] @dist_init def test_async_script_throw(self): future = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_throw, args=(torch.ones(2),), ) - with self.assertRaisesRegex(Exception, ".*Expected error.*"): + with self.assertRaisesRegex(Exception, ".*Expected error.*"): # type: ignore[attr-defined] future.wait() @dist_init def test_callback_with_exception(self): def callback(fut): - with self.assertRaisesRegex(Exception, ".*Expected error.*"): + with self.assertRaisesRegex(Exception, ".*Expected error.*"): # type: ignore[attr-defined] fut.wait() raise RuntimeError("Another expected error") future = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] script_fork_wait_throw, args=(torch.ones(2),), ).then(callback) - with self.assertRaisesRegex(RuntimeError, "Another expected error"): + with self.assertRaisesRegex(RuntimeError, "Another expected error"): # type: ignore[attr-defined] future.wait() @dist_init def test_call_rpc_with_profiling(self): # Ensures that we can call torch.ops.profiler._call_end_callbacks_on_jit_fut on a jit # future from within a script function that calls rpc_async - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] with torch.autograd.profiler.profile() as prof: prof_key = _build_rpc_profiling_key( RPCExecMode.ASYNC, @@ -1148,17 +1148,17 @@ def test_call_rpc_with_profiling(self): # After that, this test should be modified to validate the function time. events = prof.function_events function_event = get_function_event(events, prof_key) - self.assertTrue(torch._jit_internal._qualified_name(one_arg) in function_event.name) + self.assertTrue(torch._jit_internal._qualified_name(one_arg) in function_event.name) # type: ignore[attr-defined] @dist_init def test_rpc_async_jit_profiled(self): # Tests that rpc_async calls made from within a TorchScript function are # profiled. - if self.rank == 0: - dst_rank = (self.rank + 1) % self.world_size + if self.rank == 0: # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker_name = worker_name(dst_rank) args = (torch.tensor([1, 1]), torch.tensor([2, 2])) - kwargs = {} + kwargs = {} # type: ignore[var-annotated] with torch.autograd.profiler.profile() as prof: script_rpc_async_call( dst_worker_name, args, kwargs @@ -1170,23 +1170,23 @@ def test_rpc_async_jit_profiled(self): rpc_async_jit_event = [ event for event in function_events - if qual_name in event.name and event.node_id == self.rank + if qual_name in event.name and event.node_id == self.rank # type: ignore[attr-defined] ] - self.assertEqual(len(rpc_async_jit_event), 1) + self.assertEqual(len(rpc_async_jit_event), 1) # type: ignore[attr-defined] rpc_async_jit_event = rpc_async_jit_event[0] profiled_name = _build_rpc_profiling_key( RPCExecMode.ASYNC_JIT, qual_name, - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] dst_worker_name, ) - self.assertEqual(profiled_name, rpc_async_jit_event.name) + self.assertEqual(profiled_name, rpc_async_jit_event.name) # type: ignore[attr-defined] remote_events = [event for event in function_events if event.is_remote] # All remote events should have taken place on dst_rank remote_event_node_ids = { remote_event.node_id for remote_event in remote_events } - self.assertEqual(remote_event_node_ids, {dst_rank}) + self.assertEqual(remote_event_node_ids, {dst_rank}) # type: ignore[attr-defined] # script_rpc_async_call invokes add operator # so we should see this as a remote event. remote_add = [ @@ -1195,12 +1195,12 @@ def test_rpc_async_jit_profiled(self): if "aten::add" in remote_event.name ][0] remote_add_profiled_name = f"{profiled_name}#remote_op: aten::add" - self.assertEqual(remote_add.name, remote_add_profiled_name) + self.assertEqual(remote_add.name, remote_add_profiled_name) # type: ignore[attr-defined] @dist_init def test_record_function_on_caller_rpc_async(self): - if self.rank == 0: - dst_rank = (self.rank + 1) % self.world_size + if self.rank == 0: # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker_name = worker_name(dst_rank) block_scope = "foo" with torch.autograd.profiler.profile() as prof: @@ -1212,25 +1212,25 @@ def test_record_function_on_caller_rpc_async(self): record_function_scope_event = [ event for event in function_events if event.name == block_scope ] - self.assertEqual(1, len(record_function_scope_event)) + self.assertEqual(1, len(record_function_scope_event)) # type: ignore[attr-defined] record_function_scope_event = record_function_scope_event[0] # Ensure RPC future is profiled. expected_key = _build_rpc_profiling_key( RPCExecMode.ASYNC_JIT, torch._jit_internal._qualified_name(script_add_ones), - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] dst_worker_name, ) jit_rpc_events = [ event for event in function_events if event.name == expected_key ] - self.assertEqual(2, len(jit_rpc_events)) + self.assertEqual(2, len(jit_rpc_events)) # type: ignore[attr-defined] # Validate that the record_function scope time is greater than both # of the individual RPC async call times. The reason it is not necessarily # greater than the sum is because the two can execute in parallel. for jit_rpc_event in jit_rpc_events: - self.assertTrue( - record_function_scope_event.cpu_time_total + self.assertTrue( # type: ignore[attr-defined] + record_function_scope_event.cpu_time_total # type: ignore[attr-defined] > jit_rpc_event.cpu_time_total ) @@ -1239,8 +1239,8 @@ def test_rpc_torchscript_record_function(self): # tests that torchscript functions can be profiled using with # record_function(...) over RPC. REMOTE_OP_STR = "#remote_op: " - if self.rank == 0: - dst_rank = (self.rank + 1) % self.world_size + if self.rank == 0: # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker_name = worker_name(dst_rank) block_scope = "foo" with torch.autograd.profiler.profile() as prof: @@ -1255,7 +1255,7 @@ def test_rpc_torchscript_record_function(self): torch._jit_internal._qualified_name( script_add_ones_with_record_function ), - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] dst_worker_name, ) + REMOTE_OP_STR @@ -1264,9 +1264,9 @@ def test_rpc_torchscript_record_function(self): remote_record_function_event = [ evt for evt in function_events if evt.name == expected_key ][0] - self.assertTrue(block_scope in remote_record_function_event.name) + self.assertTrue(block_scope in remote_record_function_event.name) # type: ignore[attr-defined] remote_children = remote_record_function_event.cpu_children - self.assertTrue("aten::add" in child.name for child in remote_children) + self.assertTrue("aten::add" in child.name for child in remote_children) # type: ignore[attr-defined] def test_record_function_jit_end_callbacks_with_fork(self): # Ensures that we can call rf._call_end_callbacks_on_future on a jit @@ -1280,10 +1280,10 @@ def test_record_function_jit_end_callbacks_with_fork(self): function_events = prof.function_events sleep_event = get_function_event(function_events, "foo") - self.assertEqual(sleep_event.name, "foo") + self.assertEqual(sleep_event.name, "foo") # type: ignore[attr-defined] # Validate that callbacks were fired at the right time by checking the # profiling event cpu time - self.assertGreaterAlmostEqual(sleep_event.cpu_time * 1e-6, sleep_interval) + self.assertGreaterAlmostEqual(sleep_event.cpu_time * 1e-6, sleep_interval) # type: ignore[attr-defined] def test_call_fork_in_jit_with_profiling(self): # Ensures that we can call torch.ops.profiler._call_end_callbacks_on_jit_fut on a jit @@ -1294,23 +1294,23 @@ def test_call_fork_in_jit_with_profiling(self): events = prof.function_events function_event = get_function_event(events, "foo") - self.assertEqual(function_event.name, "foo") + self.assertEqual(function_event.name, "foo") # type: ignore[attr-defined] @dist_init def test_async_function_simple(self): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] ret = rpc.rpc_sync( dst1, async_add, args=(dst2, torch.ones(2, 2), torch.ones(2, 2)) ) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] @dist_init def test_async_function_wrong_return_type(self): - with self.assertRaisesRegex(RuntimeError, "Expected Future but got Tensor"): + with self.assertRaisesRegex(RuntimeError, "Expected Future but got Tensor"): # type: ignore[attr-defined] rpc.rpc_sync( - worker_name((self.rank + 1) % self.world_size), async_wrong_type + worker_name((self.rank + 1) % self.world_size), async_wrong_type # type: ignore[attr-defined] ) @dist_init @@ -1326,7 +1326,7 @@ def test_async_function_wrong_decorator_order(self): # # type: (str, Tensor, Tensor) -> Future[Tensor] # return rpc.rpc_async(to, script_add, (x, y)) # ~~~ <--- HERE - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] @torch.jit.script @rpc.functions.async_execution @@ -1337,18 +1337,18 @@ def async_wrong_decorator_order( @dist_init def test_async_function_remote(self): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote( dst1, async_add, args=(dst2, torch.ones(2, 2), torch.ones(2, 2)) ) - self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1) + self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] @dist_init def test_async_function_remote_multi(self): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] num = 20 rrefs = [] @@ -1360,13 +1360,13 @@ def test_async_function_remote_multi(self): ) for i in range(num): - self.assertEqual(rrefs[i].to_here(), torch.ones(2, 2) + i) + self.assertEqual(rrefs[i].to_here(), torch.ones(2, 2) + i) # type: ignore[attr-defined] @dist_init def test_async_function_wrong_return_type_remote(self): rref = rpc.remote( - worker_name((self.rank + 1) % self.world_size), async_wrong_type + worker_name((self.rank + 1) % self.world_size), async_wrong_type # type: ignore[attr-defined] ) - with self.assertRaisesRegex(RuntimeError, "Expected Future but got Tensor"): + with self.assertRaisesRegex(RuntimeError, "Expected Future but got Tensor"): # type: ignore[attr-defined] rref.to_here() diff --git a/torch/testing/_internal/distributed/rpc/jit/rpc_test_faulty.py b/torch/testing/_internal/distributed/rpc/jit/rpc_test_faulty.py index 96ede7231a972..077fa53581bd3 100644 --- a/torch/testing/_internal/distributed/rpc/jit/rpc_test_faulty.py +++ b/torch/testing/_internal/distributed/rpc/jit/rpc_test_faulty.py @@ -87,10 +87,10 @@ class JitFaultyAgentRpcTest(RpcAgentTestFixture): def test_timeout_in_torchscript_function(self): # Call rpc_async + fut.wait() in torchscript function and ensure that # timeout is raised. - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.tensor([1, 1]), torch.tensor([2, 2])) kwargs = { @@ -100,20 +100,20 @@ def test_timeout_in_torchscript_function(self): expected_error = self.get_timeout_error_regex() # Ensure that we get a timeout if we override the default timeout and # the RPC takes longer to execute. - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc_async_call_with_timeout(dst_worker_name, args, kwargs, 0.5) # Ensure that we timeout if we don't specify a timeout but the default # is less than the RPC takes to execute. rpc._set_rpc_timeout(0.001) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] script_rpc_async_call( dst_worker_name, args, kwargs ) # Ensure that we run to completion if zero timeout is specified. ret = rpc_async_call_with_timeout(dst_worker_name, args, kwargs, 0) - self.assertEqual(ret, torch.tensor([8, 8])) + self.assertEqual(ret, torch.tensor([8, 8])) # type: ignore[attr-defined] # reset for clean shutdown rpc._set_rpc_timeout(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC) @@ -121,10 +121,10 @@ def test_timeout_in_torchscript_function(self): def test_timeout_in_python(self): # Ensures timeouts are raised if we call rpc_async from within a # torchscript function, but wait on the future in python. - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] args = (torch.tensor([1, 1]), torch.tensor([2, 2])) kwargs = { "first_kwarg": torch.tensor([2, 2]), @@ -133,20 +133,20 @@ def test_timeout_in_python(self): expected_error = self.get_timeout_error_regex() fut = rpc_async_call_with_timeout_future_ret(dst_worker_name, args, kwargs, 0.5) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure timeout if we don't specify but the default is less than the # RPC takes to execute. rpc._set_rpc_timeout(0.001) fut = rpc_async_call_future_ret(dst_worker_name, args, kwargs) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure run to completion if zero timeout is specified fut = rpc_async_call_with_timeout_future_ret(dst_worker_name, args, kwargs, 0) result = fut.wait() - self.assertEqual(result, torch.tensor([8, 8])) + self.assertEqual(result, torch.tensor([8, 8])) # type: ignore[attr-defined] # reset for clean shutdown rpc._set_rpc_timeout(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC) @@ -154,9 +154,9 @@ def test_timeout_in_python(self): def test_remote_timeout_to_here_in_jit(self): # Test that calling to_here() in JIT will raise timeout error if # rpc.remote failed. - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) rref = rpc.remote( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) @@ -164,30 +164,30 @@ def test_remote_timeout_to_here_in_jit(self): # Will ensure error handling callbacks are run. wait_until_pending_futures_and_users_flushed() # Call to_here() within a ScriptFunction and ensure it raises - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rref_to_here(rref) @dist_init(faulty_messages=[], messages_to_delay={"SCRIPT_RREF_FETCH_CALL": 1}) def test_rref_to_here_timeout_in_jit(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) rref = rpc.remote( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) ) expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rref_to_here_with_timeout(rref, 0.01) rref_to_here_with_timeout(rref, 100) @dist_init(faulty_messages=["SCRIPT_REMOTE_CALL"]) def test_rref_timeout_pickle_in_jit(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) rref = rpc.remote( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) @@ -196,15 +196,15 @@ def test_rref_timeout_pickle_in_jit(self): wait_until_pending_futures_and_users_flushed() # Call RPC with RRef arg in JIT, which will go through JIT pickling and # ensure error is raised. - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rpc_async_with_rref_arg(dst_worker, (rref, )) @dist_init(faulty_messages=["SCRIPT_REMOTE_CALL"]) def test_rref_timeout_pickle_script_func(self): # Similar to above test, but calls python rpc with script function. - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) rref = rpc.remote( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) @@ -212,5 +212,5 @@ def test_rref_timeout_pickle_script_func(self): # Will ensure error handling callbacks are run. wait_until_pending_futures_and_users_flushed() # Call RPC with script function that takes RRef, ensure timeout during pickling - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rpc.rpc_sync(dst_worker, rref_to_here, args=(rref, )) diff --git a/torch/testing/_internal/distributed/rpc/rpc_agent_test_fixture.py b/torch/testing/_internal/distributed/rpc/rpc_agent_test_fixture.py index 967539d056c05..c60f15ee9b3d0 100644 --- a/torch/testing/_internal/distributed/rpc/rpc_agent_test_fixture.py +++ b/torch/testing/_internal/distributed/rpc/rpc_agent_test_fixture.py @@ -22,7 +22,7 @@ def init_method(self): @property def file_init_method(self): return torch.testing._internal.dist_utils.INIT_METHOD_TEMPLATE.format( - file_name=self.file_name + file_name=self.file_name # type: ignore[attr-defined] ) @property diff --git a/torch/testing/_internal/distributed/rpc/rpc_test.py b/torch/testing/_internal/distributed/rpc/rpc_test.py index 84dfdbb460a60..b2594f60bb1e5 100644 --- a/torch/testing/_internal/distributed/rpc/rpc_test.py +++ b/torch/testing/_internal/distributed/rpc/rpc_test.py @@ -61,7 +61,7 @@ def udf_with_torch_ops(device=-1, use_record_function=False): if use_record_function else contextlib.suppress() ) - with device_ctx, record_function_ctx: + with device_ctx, record_function_ctx: # type: ignore[attr-defined] t1, t2 = torch.ones(1), torch.ones(1) t = torch.add(t1, t2) t = torch.mul(t, t) @@ -84,8 +84,8 @@ def udf_with_torch_ops(device=-1, use_record_function=False): REMOTE_OP_STR = "#remote_op: " -VALUE_FUTURE = concurrent.futures.Future() -DONE_FUTURE = concurrent.futures.Future() +VALUE_FUTURE = concurrent.futures.Future() # type: ignore[var-annotated] +DONE_FUTURE = concurrent.futures.Future() # type: ignore[var-annotated] FIFTY_MIL_CYCLES = 50000000 @@ -95,7 +95,7 @@ def __init__(self, world_size): def get_worker_infos(self): return { - rpc.WorkerInfo(name=worker_name(rank), id=rank) + rpc.WorkerInfo(name=worker_name(rank), id=rank) # type: ignore[call-arg] for rank in range(self.world_size) } @@ -366,7 +366,7 @@ def get_rref_debug_info(): def add_use_future_cb(to, x, y, z): - out = concurrent.futures.Future() + out = concurrent.futures.Future() # type: ignore[var-annotated] def callback(fut): out.set_result(fut.wait() + z) @@ -381,14 +381,14 @@ def get_events_from_profile(profile_rref): def add_use_future_set_result(to, x, y, z): - out = torch.futures.Future() + out = torch.futures.Future() # type: ignore[var-annotated] fut = rpc.rpc_async(to, torch.add, args=(x, y)) fut.then(lambda fut : out.set_result(fut.wait() + z)) return out.wait() def add_use_future_nested_cb(to, x, y, z): - out = torch.futures.Future() + out = torch.futures.Future() # type: ignore[var-annotated] def callback(fut1): fut2 = rpc.rpc_async(to, torch.add, args=(fut1.wait(), z)) @@ -432,7 +432,7 @@ def slow_async_add(to, x, y, device="cpu"): @rpc.functions.async_execution def async_add_with_future_ctor(to, x, y, z): - fut = torch.futures.Future() + fut = torch.futures.Future() # type: ignore[var-annotated] rpc.rpc_async(to, torch.add, args=(x, y)).then( lambda fut1: fut.set_result(fut1.wait() + z) ) @@ -473,13 +473,13 @@ def async_add_multi_fanout(to, x, num, step): # TODO: use torch.futures.collect_all lock = Lock() state = {"cnt": 0, "ret": torch.zeros_like(x)} - ret_future = torch.futures.Future() + ret_future = torch.futures.Future() # type: ignore[var-annotated] def inc_and_set(fut): with lock: - state["cnt"] += 1 + state["cnt"] += 1 # type: ignore[operator] state["ret"] += fut.wait() - if state["cnt"] >= len(futs): + if state["cnt"] >= len(futs): # type: ignore[operator] ret_future.set_result(state["ret"]) for fut in futs: @@ -526,7 +526,7 @@ def static_async_add(to, x, y, z): @classmethod @rpc.functions.async_execution def class_async_add(cls, to, x, y, z): - ret_fut = torch.futures.Future() + ret_fut = torch.futures.Future() # type: ignore[var-annotated] rpc.rpc_async(to, torch.add, args=(x, y)).then( lambda fut: ret_fut.set_result(fut.wait() + z) ) @@ -559,15 +559,15 @@ def __init__(self, init_method): class RpcTest(RpcAgentTestFixture): @dist_init def test_worker_id(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] peer_rank = n % self.world_size self_worker_info = rpc.get_worker_info() peer_worker_info = rpc.get_worker_info(worker_name(peer_rank)) - self.assertEqual(self_worker_info.name, worker_name(self.rank)) - self.assertEqual(peer_worker_info.name, worker_name(peer_rank)) + self.assertEqual(self_worker_info.name, worker_name(self.rank)) # type: ignore[attr-defined] + self.assertEqual(peer_worker_info.name, worker_name(peer_rank)) # type: ignore[attr-defined] - with self.assertRaisesRegex(RuntimeError, "Unknown destination worker"): + with self.assertRaisesRegex(RuntimeError, "Unknown destination worker"): # type: ignore[attr-defined] unknown_worker_id = rpc.get_worker_info("WorkerUnknown") @dist_init @@ -578,63 +578,63 @@ def test_get_worker_infos(self): expected_worker_names = { worker_name(rank) for rank in range(self.world_size) } - self.assertEqual(worker_names, expected_worker_names) + self.assertEqual(worker_names, expected_worker_names) # type: ignore[attr-defined] worker_ids = {worker_info.id for worker_info in worker_infos} expected_worker_ids = set(range(self.world_size)) - self.assertEqual(worker_ids, expected_worker_ids) + self.assertEqual(worker_ids, expected_worker_ids) # type: ignore[attr-defined] @dist_init def test_self_add(self): self_worker_info = rpc.get_worker_info() - self_worker_name = worker_name(self.rank) + self_worker_name = worker_name(self.rank) # type: ignore[attr-defined] fut = rpc.rpc_async(self_worker_info, torch.add, args=(torch.ones(2, 2), 1)) ret = rpc.rpc_sync(self_worker_info, torch.add, args=(torch.ones(2, 2), 1)) - self.assertEqual(fut.wait(), torch.ones(2, 2) + 1) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(fut.wait(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] @dist_init def test_send_to_rank(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] for exec_mode in [RPCExecMode.SYNC, RPCExecMode.ASYNC, RPCExecMode.REMOTE]: ret = self._run_func_in_mode(dst_rank, torch.add, exec_mode, args=(torch.ones(2, 2), 1)) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] # Test invalid ranks for exec_mode in [RPCExecMode.SYNC, RPCExecMode.ASYNC, RPCExecMode.REMOTE]: - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] self._run_func_in_mode(self.world_size + 1, torch.add, exec_mode, args=(torch.ones(2, 2), 1)) for exec_mode in [RPCExecMode.SYNC, RPCExecMode.ASYNC, RPCExecMode.REMOTE]: - with self.assertRaises(RuntimeError): + with self.assertRaises(RuntimeError): # type: ignore[attr-defined] self._run_func_in_mode(-1, torch.add, exec_mode, args=(torch.ones(2, 2), 1)) for exec_mode in [RPCExecMode.SYNC, RPCExecMode.ASYNC, RPCExecMode.REMOTE]: - with self.assertRaises(ValueError): + with self.assertRaises(ValueError): # type: ignore[attr-defined] self._run_func_in_mode(dst_rank + 0.5, torch.add, exec_mode, args=(torch.ones(2, 2), 1)) for exec_mode in [RPCExecMode.SYNC, RPCExecMode.ASYNC, RPCExecMode.REMOTE]: - with self.assertRaises(ValueError): + with self.assertRaises(ValueError): # type: ignore[attr-defined] self._run_func_in_mode(dst_rank - 0.5, torch.add, exec_mode, args=(torch.ones(2, 2), 1)) @dist_init def test_self_py_udf_remote(self): self_worker_info = rpc.get_worker_info() rref = rpc.remote(self_worker_info, my_function, args=(torch.ones(2, 2), 1, 3)) - self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1 + 3) + self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1 + 3) # type: ignore[attr-defined] def _test_self_remote_rref_as_rpc_arg(self, dst): self_worker_info = rpc.get_worker_info() rref = rpc.remote(self_worker_info, my_function, args=(torch.ones(2, 2), 1, 3)) fut = rpc.rpc_async(dst, add_rref_to_value, args=(rref, torch.ones(2, 2))) ret = rpc.rpc_sync(dst, add_rref_to_value, args=(rref, torch.ones(2, 2) + 1)) - self.assertEqual(ret, torch.ones(2, 2) + 1 + 3 + torch.ones(2, 2) + 1) - self.assertEqual(fut.wait(), torch.ones(2, 2) + 1 + 3 + torch.ones(2, 2)) + self.assertEqual(ret, torch.ones(2, 2) + 1 + 3 + torch.ones(2, 2) + 1) # type: ignore[attr-defined] + self.assertEqual(fut.wait(), torch.ones(2, 2) + 1 + 3 + torch.ones(2, 2)) # type: ignore[attr-defined] @dist_init def test_self_remote_rref_as_rpc_arg(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] self._test_self_remote_rref_as_rpc_arg(dst) @dist_init @@ -645,40 +645,40 @@ def _test_self_remote_rref_as_remote_arg(self, dst): self_worker_info = rpc.get_worker_info() rref = rpc.remote(self_worker_info, my_function, args=(torch.ones(2, 2), 1, 3)) ret_rref = rpc.remote(dst, add_rref_to_value, args=(rref, torch.ones(2, 2))) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] ret_rref.to_here(), torch.ones(2, 2) + 1 + 3 + torch.ones(2, 2) ) @dist_init def test_self_remote_rref_as_remote_arg(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] self._test_self_remote_rref_as_remote_arg(dst) @dist_init def test_rref_proxy_non_exist(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote(dst, my_function, args=(torch.ones(2, 2), 1, 3)) msg = "has no attribute \'non_exist\'" - with self.assertRaisesRegex(AttributeError, msg): + with self.assertRaisesRegex(AttributeError, msg): # type: ignore[attr-defined] rref.rpc_sync().non_exist() - with self.assertRaisesRegex(AttributeError, msg): + with self.assertRaisesRegex(AttributeError, msg): # type: ignore[attr-defined] rref.rpc_async().non_exist() - with self.assertRaisesRegex(AttributeError, msg): + with self.assertRaisesRegex(AttributeError, msg): # type: ignore[attr-defined] rref.remote().non_exist() def _test_rref_proxy_tensor(self, dst): rref = rpc.remote(dst, my_function, args=(torch.ones(2, 2), 1, 3)) expected = torch.ones(2, 2) + 1 + 3 - self.assertEqual(expected.size(), rref.rpc_sync().size()) - self.assertEqual(expected + 1, rref.rpc_async().add(1).wait()) - self.assertEqual(expected.view(1, 4), rref.remote().view(1, 4).to_here()) + self.assertEqual(expected.size(), rref.rpc_sync().size()) # type: ignore[attr-defined] + self.assertEqual(expected + 1, rref.rpc_async().add(1).wait()) # type: ignore[attr-defined] + self.assertEqual(expected.view(1, 4), rref.remote().view(1, 4).to_here()) # type: ignore[attr-defined] @dist_init def test_rref_proxy_tensor(self): - self._test_rref_proxy_tensor(worker_name((self.rank + 1) % self.world_size)) + self._test_rref_proxy_tensor(worker_name((self.rank + 1) % self.world_size)) # type: ignore[attr-defined] @dist_init def test_rref_proxy_tensor_self(self): @@ -687,7 +687,7 @@ def test_rref_proxy_tensor_self(self): @dist_init def test_rref_proxy_reuse(self): rref = rpc.remote( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] my_function, args=(torch.ones(2, 2), 1, 3) ) @@ -697,76 +697,76 @@ def test_rref_proxy_reuse(self): proxy_rpc_async = rref.rpc_async() proxy_remote = rref.remote() - self.assertEqual(expected.size(), proxy_rpc_sync.size()) - self.assertEqual(expected + 1, proxy_rpc_sync.add(1)) - self.assertEqual(expected.view(1, 4), proxy_rpc_sync.view(1, 4)) + self.assertEqual(expected.size(), proxy_rpc_sync.size()) # type: ignore[attr-defined] + self.assertEqual(expected + 1, proxy_rpc_sync.add(1)) # type: ignore[attr-defined] + self.assertEqual(expected.view(1, 4), proxy_rpc_sync.view(1, 4)) # type: ignore[attr-defined] - self.assertEqual(expected.size(), proxy_rpc_async.size().wait()) - self.assertEqual(expected + 3, proxy_rpc_async.add(3).wait()) - self.assertEqual(expected.view(4, 1), proxy_rpc_async.view(4, 1).wait()) + self.assertEqual(expected.size(), proxy_rpc_async.size().wait()) # type: ignore[attr-defined] + self.assertEqual(expected + 3, proxy_rpc_async.add(3).wait()) # type: ignore[attr-defined] + self.assertEqual(expected.view(4, 1), proxy_rpc_async.view(4, 1).wait()) # type: ignore[attr-defined] - self.assertEqual(expected.size(), proxy_remote.size().to_here()) - self.assertEqual(expected + 5, proxy_remote.add(5).to_here()) - self.assertEqual(expected.view(-1), proxy_remote.view(-1).to_here()) + self.assertEqual(expected.size(), proxy_remote.size().to_here()) # type: ignore[attr-defined] + self.assertEqual(expected + 5, proxy_remote.add(5).to_here()) # type: ignore[attr-defined] + self.assertEqual(expected.view(-1), proxy_remote.view(-1).to_here()) # type: ignore[attr-defined] def _test_rref_proxy_class(self, dst): rref = rpc.remote(dst, MyClass, args=(7,)) expected = MyClass(7) - self.assertEqual(expected.get_value(), rref.rpc_sync().get_value()) - self.assertEqual(expected.get_value(), rref.rpc_async().get_value().wait()) - self.assertEqual(expected.get_value(), rref.remote().get_value().to_here()) + self.assertEqual(expected.get_value(), rref.rpc_sync().get_value()) # type: ignore[attr-defined] + self.assertEqual(expected.get_value(), rref.rpc_async().get_value().wait()) # type: ignore[attr-defined] + self.assertEqual(expected.get_value(), rref.remote().get_value().to_here()) # type: ignore[attr-defined] expected.increment_value(3) - self.assertEqual(None, rref.rpc_sync().increment_value(1)) - self.assertEqual(None, rref.rpc_async().increment_value(1).wait()) - self.assertEqual(None, rref.remote().increment_value(1).to_here()) + self.assertEqual(None, rref.rpc_sync().increment_value(1)) # type: ignore[attr-defined] + self.assertEqual(None, rref.rpc_async().increment_value(1).wait()) # type: ignore[attr-defined] + self.assertEqual(None, rref.remote().increment_value(1).to_here()) # type: ignore[attr-defined] - self.assertEqual(expected.get_value(), rref.rpc_sync().get_value()) - self.assertEqual(expected.get_value(), rref.rpc_async().get_value().wait()) - self.assertEqual(expected.get_value(), rref.remote().get_value().to_here()) + self.assertEqual(expected.get_value(), rref.rpc_sync().get_value()) # type: ignore[attr-defined] + self.assertEqual(expected.get_value(), rref.rpc_async().get_value().wait()) # type: ignore[attr-defined] + self.assertEqual(expected.get_value(), rref.remote().get_value().to_here()) # type: ignore[attr-defined] - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_instance_method(2), rref.rpc_sync().my_instance_method(2) ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_instance_method(3), rref.rpc_async().my_instance_method(3).wait() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_instance_method(4), rref.remote().my_instance_method(4).to_here() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_static_method(9), rref.rpc_sync().my_static_method(9) ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_static_method(10), rref.rpc_async().my_static_method(10).wait() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_static_method(11), rref.remote().my_static_method(11).to_here() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_class_method(2, torch.zeros(2, 2)), rref.rpc_sync().my_class_method(2, torch.zeros(2, 2)) ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_class_method(2, torch.ones(3, 3)), rref.rpc_async().my_class_method(2, torch.ones(3, 3)).wait() ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] expected.my_class_method(2, torch.ones(4, 4)), rref.remote().my_class_method(2, torch.ones(4, 4)).to_here() ) @dist_init def test_rref_proxy_class(self): - self._test_rref_proxy_class(worker_name((self.rank + 1) % self.world_size)) + self._test_rref_proxy_class(worker_name((self.rank + 1) % self.world_size)) # type: ignore[attr-defined] @dist_init def test_rref_proxy_class_self(self): @@ -790,7 +790,7 @@ def test_register_rpc_backend_and_set_and_start_rpc_backend( _stub_init_rpc_backend_handler, ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "^RPC backend .+: already registered$" ): backend = rpc.backend_registry.register_backend( @@ -802,35 +802,35 @@ def test_register_rpc_backend_and_set_and_start_rpc_backend( rpc.init_rpc( name="worker1", backend=backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @dist_init(setup_rpc=False) def test_duplicate_name(self): - with self.assertRaisesRegex(RuntimeError, "is not unique"): + with self.assertRaisesRegex(RuntimeError, "is not unique"): # type: ignore[attr-defined] store, _, _ = next( torch.distributed.rendezvous( - self.init_method, rank=self.rank, world_size=self.world_size + self.init_method, rank=self.rank, world_size=self.world_size # type: ignore[attr-defined] ) ) rpc._init_rpc_backend( backend=self.rpc_backend, store=store, name="duplicate_name", - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @dist_init(setup_rpc=False) def test_duplicate_name_2(self): - with self.assertRaisesRegex(RuntimeError, "is not unique"): + with self.assertRaisesRegex(RuntimeError, "is not unique"): # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank % (self.world_size - 1)), + name=worker_name(self.rank % (self.world_size - 1)), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -838,37 +838,37 @@ def test_duplicate_name_2(self): @dist_init(setup_rpc=False) def test_reinit(self): rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # Wait for all init to complete. dist.barrier() # TODO: with TCP init, rank 0 raises Address already in use because # rank 0 is the start daemon and the store is created before checking if # RPC is already initialized in init_rpc. - if os.environ.get("RPC_INIT_WITH_TCP", None) == "1" and self.rank == 0: + if os.environ.get("RPC_INIT_WITH_TCP", None) == "1" and self.rank == 0: # type: ignore[attr-defined] expected_reinit_err = "Address already in use" else: expected_reinit_err = "is already initialized" - with self.assertRaisesRegex(RuntimeError, expected_reinit_err): + with self.assertRaisesRegex(RuntimeError, expected_reinit_err): # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) rpc.shutdown() def test_world_size_one(self): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] rpc.init_rpc( name="me", backend=self.rpc_backend, @@ -883,7 +883,7 @@ def test_world_size_one(self): my_tensor_function, args=(torch.ones(2, 2), torch.ones(2, 2)) ) - self.assertEqual(expect, result) + self.assertEqual(expect, result) # type: ignore[attr-defined] expect = torch.ones(3, 3) * 2 result = rpc.rpc_async( @@ -891,7 +891,7 @@ def test_world_size_one(self): my_tensor_function, args=(torch.ones(3, 3), torch.ones(3, 3)) ).wait() - self.assertEqual(expect, result) + self.assertEqual(expect, result) # type: ignore[attr-defined] expect = torch.ones(4, 4) * 2 result = rpc.remote( @@ -899,7 +899,7 @@ def test_world_size_one(self): my_tensor_function, args=(torch.ones(4, 4), torch.ones(4, 4)) ).to_here() - self.assertEqual(expect, result) + self.assertEqual(expect, result) # type: ignore[attr-defined] rpc.shutdown() @@ -908,30 +908,30 @@ def test_invalid_names(self): from torch.distributed.rpc import WorkerInfo worker_id = 0 - with self.assertRaisesRegex(RuntimeError, "Worker name must match"): + with self.assertRaisesRegex(RuntimeError, "Worker name must match"): # type: ignore[attr-defined] info = WorkerInfo("abc*", worker_id) - with self.assertRaisesRegex(RuntimeError, "Worker name must match"): + with self.assertRaisesRegex(RuntimeError, "Worker name must match"): # type: ignore[attr-defined] info = WorkerInfo(" ", worker_id) - with self.assertRaisesRegex(RuntimeError, "must be non-empty"): + with self.assertRaisesRegex(RuntimeError, "must be non-empty"): # type: ignore[attr-defined] info = WorkerInfo("", worker_id) # If the number in the message does not match, it is likely that the # value of MAX_NAME_LEN in RPC WorkerInfo has changed. - with self.assertRaisesRegex(RuntimeError, "shorter than 128"): + with self.assertRaisesRegex(RuntimeError, "shorter than 128"): # type: ignore[attr-defined] info = WorkerInfo("".join(["a" for i in range(500)]), worker_id) @dist_init def test_add(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] @staticmethod def return_callee_id(): @@ -939,67 +939,67 @@ def return_callee_id(): @dist_init def test_int_callee(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] ret = rpc.rpc_sync(dst_rank, RpcTest.return_callee_id) - self.assertEqual(ret, dst_rank) + self.assertEqual(ret, dst_rank) # type: ignore[attr-defined] @dist_init def test_add_with_id(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size workder_info = rpc.get_worker_info(worker_name(dst_rank)) ret = rpc.rpc_sync( workder_info, torch.add, args=(torch.ones(n, n), torch.ones(n, n)) ) - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_scalar_add(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), n) ) - self.assertEqual(ret, (torch.ones(n, n) + n)) + self.assertEqual(ret, (torch.ones(n, n) + n)) # type: ignore[attr-defined] @dist_init def test_async_add(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size fut = rpc.rpc_async( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_nonzero(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size x = torch.ones(self.world_size, self.world_size) - x[self.rank][self.rank] = 0 + x[self.rank][self.rank] = 0 # type: ignore[attr-defined] ret = rpc.rpc_sync(worker_name(dst_rank), torch.nonzero, args=(x,)) - self.assertEqual(ret, x.nonzero()) + self.assertEqual(ret, x.nonzero()) # type: ignore[attr-defined] @dist_init def test_multi_rpc(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] for i in range(20): - n = i + self.rank + 1 + n = i + self.rank + 1 # type: ignore[attr-defined] ret = rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] def _run_uneven_workload(self, num_repeat=30): # worker0 drives and waits for worker1 and worker2 # throughout the test. - if self.rank == 0: - self.assertTrue(self.world_size >= 3) + if self.rank == 0: # type: ignore[attr-defined] + self.assertTrue(self.world_size >= 3) # type: ignore[attr-defined] # Phase 1: Only worker1 has workload. dst = "worker1" @@ -1009,7 +1009,7 @@ def _run_uneven_workload(self, num_repeat=30): futs.append(fut) for fut in torch.futures.collect_all(futs).wait(): - self.assertEqual(fut.wait(), 0) + self.assertEqual(fut.wait(), 0) # type: ignore[attr-defined] # Phase 2: Only worker2 has workload. # If join is not correctly implemented, @@ -1021,13 +1021,13 @@ def _run_uneven_workload(self, num_repeat=30): futs.append(fut) for val in torch.futures.wait_all(futs): - self.assertEqual(val, 0) + self.assertEqual(val, 0) # type: ignore[attr-defined] def test_wait_all_workers(self): rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -1042,9 +1042,9 @@ def test_wait_all_workers(self): def test_wait_all_workers_twice(self): rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -1066,21 +1066,21 @@ def test_all_gather(self): for info in rpc._get_current_rpc_agent().get_worker_infos(): expected[info.name] = info.id - self.assertEqual(expected, results) + self.assertEqual(expected, results) # type: ignore[attr-defined] @dist_init def test_all_gather_timeout(self): rpc._set_rpc_timeout(0.1) - if self.rank == 0: - with self.assertRaisesRegex( + if self.rank == 0: # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "timed out in _all_gather after 0\\.10 seconds" ): rpc.api._all_gather(SlowPickleClass(0.5)) else: expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc.api._all_gather(SlowPickleClass(0.5)) @dist_init @@ -1092,24 +1092,24 @@ def test_graceful_shutdown_with_uneven_workload(self): def test_shutdown_followed_by_rpc(self): # Initialize RPC. rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] rpc.shutdown() - with self.assertRaisesRegex(RuntimeError, "^RPC has not been initialized"): + with self.assertRaisesRegex(RuntimeError, "^RPC has not been initialized"): # type: ignore[attr-defined] rpc.rpc_sync( worker_name(dst_rank), torch.add, @@ -1118,29 +1118,29 @@ def test_shutdown_followed_by_rpc(self): @dist_init def test_expected_src(self): - dst_rank = (self.rank + 1) % self.world_size - expected_src_rank = (self.rank - 1) % self.world_size - ret = rpc.rpc_sync(worker_name(dst_rank), set_value, args=(self.rank,)) + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] + expected_src_rank = (self.rank - 1) % self.world_size # type: ignore[attr-defined] + ret = rpc.rpc_sync(worker_name(dst_rank), set_value, args=(self.rank,)) # type: ignore[attr-defined] value = VALUE_FUTURE.result() - self.assertEqual(value, expected_src_rank) + self.assertEqual(value, expected_src_rank) # type: ignore[attr-defined] @dist_init def test_py_built_in(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync(worker_name(dst_rank), min, args=(n, n + 1, n + 2)) - self.assertEqual(ret, min(n, n + 1, n + 2)) + self.assertEqual(ret, min(n, n + 1, n + 2)) # type: ignore[attr-defined] @dist_init def test_py_user_defined(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), my_function, kwargs={"a": n, "b": n + 1, "c": n + 2}, ) - self.assertEqual(ret, my_function(n, n + 1, n + 2)) + self.assertEqual(ret, my_function(n, n + 1, n + 2)) # type: ignore[attr-defined] def test_build_rpc_profiling_key(self): # Tests that the name that shows up as an Event in profiling RPCs has all @@ -1149,26 +1149,26 @@ def test_build_rpc_profiling_key(self): rpc_profiling_key = _build_rpc_profiling_key( exec_mode, "foo", "worker0", "worker1" ) - self.assertIn(exec_mode.value, rpc_profiling_key) - self.assertIn("foo", rpc_profiling_key) - self.assertIn("worker0", rpc_profiling_key) - self.assertIn("worker1", rpc_profiling_key) + self.assertIn(exec_mode.value, rpc_profiling_key) # type: ignore[attr-defined] + self.assertIn("foo", rpc_profiling_key) # type: ignore[attr-defined] + self.assertIn("worker0", rpc_profiling_key) # type: ignore[attr-defined] + self.assertIn("worker1", rpc_profiling_key) # type: ignore[attr-defined] def check_profiling_info(self, self_worker_name, dst_worker_name, func, rpc_event, rpc_exec_mode): - self.assertTrue(self_worker_name in rpc_event.name) - self.assertTrue(dst_worker_name in rpc_event.name) + self.assertTrue(self_worker_name in rpc_event.name) # type: ignore[attr-defined] + self.assertTrue(dst_worker_name in rpc_event.name) # type: ignore[attr-defined] if isinstance(func, torch.jit.ScriptFunction): - self.assertTrue(torch._jit_internal._qualified_name(func) in rpc_event.name) + self.assertTrue(torch._jit_internal._qualified_name(func) in rpc_event.name) # type: ignore[attr-defined] else: - self.assertTrue(func.__name__ in rpc_event.name) - self.assertTrue(rpc_exec_mode.value in rpc_event.name) - self.assertEqual(rpc_event.count, 1) + self.assertTrue(func.__name__ in rpc_event.name) # type: ignore[attr-defined] + self.assertTrue(rpc_exec_mode.value in rpc_event.name) # type: ignore[attr-defined] + self.assertEqual(rpc_event.count, 1) # type: ignore[attr-defined] @dist_init def test_profiler_rpc_record_shapes(self): - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst = (self.rank + 1) % self.world_size + dst = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst) t1, t2 = torch.ones(100), torch.ones(100) with torch.autograd.profiler.profile(record_shapes=True) as prof: @@ -1189,13 +1189,13 @@ def test_profiler_rpc_record_shapes(self): event for event in local_function_events if "aten::add" in event.name ][0] local_add_input_shapes = local_add_event.input_shapes - self.assertEqual(remote_add_input_shapes, local_add_input_shapes) + self.assertEqual(remote_add_input_shapes, local_add_input_shapes) # type: ignore[attr-defined] @dist_init def test_profiler_rpc_memory(self): - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst = (self.rank + 1) % self.world_size + dst = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst) with torch.autograd.profiler.profile(profile_memory=True) as p: fut = rpc.rpc_async(dst_worker, udf_with_torch_ops, args=()) @@ -1205,7 +1205,7 @@ def test_profiler_rpc_memory(self): event_cpu_mem_usages = set(event.cpu_memory_usage for event in function_events) # if cpu_memory_usage was not propagated over the wire, this set would # only contain 0 (indicates no memory being profiled) - self.assertNotEqual({0}, event_cpu_mem_usages) + self.assertNotEqual({0}, event_cpu_mem_usages) # type: ignore[attr-defined] # No memory profiled if profile_memory=False with torch.autograd.profiler.profile(profile_memory=False) as p: fut = rpc.rpc_async(dst_worker, udf_with_torch_ops, args=()) @@ -1213,13 +1213,13 @@ def test_profiler_rpc_memory(self): function_events = p.function_events event_cpu_mem_usages = set(event.cpu_memory_usage for event in function_events) - self.assertEqual({0}, event_cpu_mem_usages) + self.assertEqual({0}, event_cpu_mem_usages) # type: ignore[attr-defined] @dist_init def test_profiler_export_trace(self): - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst = (self.rank + 1) % self.world_size + dst = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst) with torch.autograd.profiler.profile() as p: fut = rpc.rpc_async(dst_worker, udf_with_torch_ops, args=()) @@ -1234,18 +1234,18 @@ def test_profiler_export_trace(self): event_names = [event['name'] for event in trace] for expected_event_name in EXPECTED_REMOTE_EVENTS + [RPCExecMode.ASYNC.value]: event_exists = any([expected_event_name in event_name for event_name in event_names]) - self.assertTrue(event_exists) + self.assertTrue(event_exists) # type: ignore[attr-defined] @dist_init def test_profiler_rpc_key_names(self): # tests that remote events are properly prefixed with the RPC profiling key. - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return # Spawn multiple threads that send RPCs to ensure keys are correctly # prefixied when there are multiple RPCs being created/in flight at the # same time. - dst_ranks = [rank for rank in range(0, self.world_size) if rank != self.rank] + dst_ranks = [rank for rank in range(0, self.world_size) if rank != self.rank] # type: ignore[attr-defined] def rpc_with_profiling(dst_worker): with torch.autograd.profiler.profile() as prof: @@ -1259,7 +1259,7 @@ def rpc_with_profiling(dst_worker): rpc_profiling_key = _build_rpc_profiling_key( RPCExecMode.ASYNC, udf_with_torch_ops.__qualname__, - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] dst_worker, ) @@ -1267,9 +1267,9 @@ def rpc_with_profiling(dst_worker): for name, event in remote_event_names.items(): # Ensure that we have the expected key as part of the remote # event. - self.assertTrue(name.startswith(rpc_profiling_key)) - self.assertTrue(event.is_remote) - self.assertTrue(event.node_id == rpc.get_worker_info(dst_worker).id) + self.assertTrue(name.startswith(rpc_profiling_key)) # type: ignore[attr-defined] + self.assertTrue(event.is_remote) # type: ignore[attr-defined] + self.assertTrue(event.node_id == rpc.get_worker_info(dst_worker).id) # type: ignore[attr-defined] # Ensure that the remote event name also contains the operator. operator_name_substr = name[len(rpc_profiling_key) :] # Note: we don't assert that every remote event needs to be @@ -1286,7 +1286,7 @@ def rpc_with_profiling(dst_worker): # The set should be empty, otherwise its contained elements did # not show up in the remote profiler output. - self.assertTrue( + self.assertTrue( # type: ignore[attr-defined] remote_event_name_set == set(), f"Expected {remote_event_name_set} to be included in remote profiler output.", ) @@ -1308,10 +1308,10 @@ def rpc_with_profiling(dst_worker): def _run_test_profiler_remote_events_profiled(self): # Tests that we can successfully invoke the profiler on a remote node, # and collect the remote events back in the local profiler. - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst_ranks = [rank for rank in range(0, self.world_size) if rank != self.rank] + dst_ranks = [rank for rank in range(0, self.world_size) if rank != self.rank] # type: ignore[attr-defined] for dst in dst_ranks: dst_worker = worker_name(dst) with torch.autograd.profiler.profile() as prof: @@ -1322,7 +1322,7 @@ def _run_test_profiler_remote_events_profiled(self): rpc_event = get_function_event(events, RPCExecMode.ASYNC.value) self.check_profiling_info( - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] dst_worker, udf_with_torch_ops, rpc_event, @@ -1333,17 +1333,17 @@ def _run_test_profiler_remote_events_profiled(self): rpc_profiling_key = _build_rpc_profiling_key( RPCExecMode.ASYNC, udf_with_torch_ops.__qualname__, - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] worker_name(dst), ) for expected_remote_event_name in EXPECTED_REMOTE_EVENTS: expected_key = rpc_profiling_key + REMOTE_OP_STR + expected_remote_event_name - self.assertTrue(expected_key in remote_events) + self.assertTrue(expected_key in remote_events) # type: ignore[attr-defined] remote_event = remote_events[expected_key] # Remote event should have a node ID corresponding to the worker # it ran on. - self.assertEqual(remote_event.node_id, dst) + self.assertEqual(remote_event.node_id, dst) # type: ignore[attr-defined] # Validate order remote events show up in profiling output. def convert_remote_to_local(event_name): @@ -1358,7 +1358,7 @@ def convert_remote_to_local(event_name): for event in events if convert_remote_to_local(event.name) in EXPECTED_REMOTE_EVENTS ] - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] set(remote_events_list), set(EXPECTED_REMOTE_EVENTS), f"Mismatch between profiled events: {set(remote_events_list)} and expected events: {set(EXPECTED_REMOTE_EVENTS)}", @@ -1385,11 +1385,11 @@ def run_profiling_workload(self, dst): fut.wait() def _run_rpc_profiling_async_function(self, device="cpu"): - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] x = torch.ones(2) y = torch.ones(2) with torch.autograd.profiler.profile() as prof: @@ -1402,7 +1402,7 @@ def _run_rpc_profiling_async_function(self, device="cpu"): # slow_async_add resulted in an RPC from dst1 -> dst2, so this should be # recorded. key_prefix = _build_rpc_profiling_key( - RPCExecMode.ASYNC, slow_async_add.__qualname__, worker_name(self.rank), dst1 + RPCExecMode.ASYNC, slow_async_add.__qualname__, worker_name(self.rank), dst1 # type: ignore[attr-defined] ) nested_rpc_key_prefix = _build_rpc_profiling_key( @@ -1413,9 +1413,9 @@ def _run_rpc_profiling_async_function(self, device="cpu"): rpc_remote_event = [ event for event in remote_events if event.name == expected_key ] - self.assertEqual(1, len(rpc_remote_event)) + self.assertEqual(1, len(rpc_remote_event)) # type: ignore[attr-defined] rpc_remote_event = rpc_remote_event[0] - self.assertEqual(rpc_remote_event.node_id, (self.rank + 1) % self.world_size) + self.assertEqual(rpc_remote_event.node_id, (self.rank + 1) % self.world_size) # type: ignore[attr-defined] # slow_async_add's RPC does an add on dst2, which should be reflected as well. remote_add_key = ( expected_key + REMOTE_OP_STR + torch.jit._builtins._find_builtin(torch.add) @@ -1423,14 +1423,14 @@ def _run_rpc_profiling_async_function(self, device="cpu"): remote_add_event = [ event for event in remote_events if event.name == remote_add_key ] - self.assertEqual(1, len(remote_add_event)) + self.assertEqual(1, len(remote_add_event)) # type: ignore[attr-defined] remote_add_event = remote_add_event[0] # Validate that node_id is dst2. - self.assertEqual(remote_add_event.node_id, (self.rank + 2) % self.world_size) + self.assertEqual(remote_add_event.node_id, (self.rank + 2) % self.world_size) # type: ignore[attr-defined] @dist_init def test_rpc_profiling_async_function(self): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] self._run_rpc_profiling_async_function() if torch.cuda.is_available(): dist.barrier() @@ -1439,7 +1439,7 @@ def test_rpc_profiling_async_function(self): @single_threaded_process_group_agent @dist_init def test_rpc_profiling_async_function_single_threaded(self): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] self._run_rpc_profiling_async_function() if torch.cuda.is_available(): dist.barrier() @@ -1449,9 +1449,9 @@ def test_rpc_profiling_async_function_single_threaded(self): def test_rpc_profiling_remote_record_function(self): # test that functions run over RPC with record_function show the expected # profiled block. - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst_ranks = [i for i in range(self.world_size) if i != self.rank] + dst_ranks = [i for i in range(self.world_size) if i != self.rank] # type: ignore[attr-defined] for dst_rank in dst_ranks: dst_worker = worker_name(dst_rank) with torch.autograd.profiler.profile() as prof: @@ -1462,9 +1462,9 @@ def test_rpc_profiling_remote_record_function(self): record_function_remote_event = [ evt for evt in function_events if "##forward##" in evt.name ] - self.assertEqual(1, len(record_function_remote_event)) + self.assertEqual(1, len(record_function_remote_event)) # type: ignore[attr-defined] record_function_remote_event = record_function_remote_event[0] - self.assertEqual(record_function_remote_event.node_id, dst_rank) + self.assertEqual(record_function_remote_event.node_id, dst_rank) # type: ignore[attr-defined] # cpu_children only returns direct children, so here we get all # children recursively. @@ -1500,7 +1500,7 @@ def convert_remote_to_local(event_name): for evt in remote_children: local_name = convert_remote_to_local(evt.name) - self.assertTrue(local_name in local_children_names) + self.assertTrue(local_name in local_children_names) # type: ignore[attr-defined] def validate_profiling_workload(self, dst, prof): @@ -1513,11 +1513,11 @@ def convert_remote_to_local(event_name): for event in events if event.is_remote } - self.assertTrue("aten::mul" in remote_events) + self.assertTrue("aten::mul" in remote_events) # type: ignore[attr-defined] remote_mul_event = remote_events["aten::mul"] - self.assertEqual(remote_mul_event.node_id, dst) + self.assertEqual(remote_mul_event.node_id, dst) # type: ignore[attr-defined] self.check_profiling_info( - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] worker_name(dst), torch.mul, remote_mul_event, @@ -1525,8 +1525,8 @@ def convert_remote_to_local(event_name): ) def _run_test_profiler_with_autograd_context(self): - dst = (self.rank + 1) % self.world_size - if self.rank == 1: + dst = (self.rank + 1) % self.world_size # type: ignore[attr-defined] + if self.rank == 1: # type: ignore[attr-defined] # Cases where we can double wrap messages with profiling information and autograd info. with dist_autograd.context() as context_id: with torch.autograd.profiler.profile() as prof: @@ -1552,10 +1552,10 @@ def test_profiler_with_autograd_context(self): self._run_test_profiler_with_autograd_context() def _profiler_test_with_rpc(self, rpc_exec_mode, func, args, use_record_function=False, dst=None): - dst = dst if dst is not None else (self.rank + 1) % self.world_size + dst = dst if dst is not None else (self.rank + 1) % self.world_size # type: ignore[attr-defined] # only run profiler on rank 1. - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] with torch.autograd.profiler.profile() as prof: record_function_ctx_mgr = ( contextlib.suppress() @@ -1564,14 +1564,14 @@ def _profiler_test_with_rpc(self, rpc_exec_mode, func, args, use_record_function "foo" ) ) - with record_function_ctx_mgr as rf: + with record_function_ctx_mgr as rf: # type: ignore[attr-defined] if rpc_exec_mode == RPCExecMode.SYNC: rpc.rpc_sync(worker_name(dst), func, args=args) elif rpc_exec_mode == RPCExecMode.ASYNC: fut = rpc.rpc_async(worker_name(dst), func, args=args) fut.wait() else: - self.assertTrue(rpc_exec_mode == RPCExecMode.REMOTE) + self.assertTrue(rpc_exec_mode == RPCExecMode.REMOTE) # type: ignore[attr-defined] rref = rpc.remote(worker_name(dst), func, args=args) rref.to_here() # To avoid flakiness, wait for the RRef to be profiled. This @@ -1583,22 +1583,22 @@ def _profiler_test_with_rpc(self, rpc_exec_mode, func, args, use_record_function events = prof.function_events rpc_event = get_function_event(events, rpc_exec_mode.value) # verify Node ID for this rpc event. - self.assertEqual(rpc_event.node_id, self.rank) + self.assertEqual(rpc_event.node_id, self.rank) # type: ignore[attr-defined] # Ensure recording of remote events. remote_events = {event for event in events if event.node_id == dst} - {rpc_event} - self.assertGreaterEqual(len(remote_events), 1) + self.assertGreaterEqual(len(remote_events), 1) # type: ignore[attr-defined] for remote_event in remote_events: - self.assertEqual(remote_event.node_id, dst) + self.assertEqual(remote_event.node_id, dst) # type: ignore[attr-defined] if use_record_function: scope_event = get_function_event(events, "foo") # Since RPC call is within the scope, its CPU interval should be # contained within foo's interval. - self.assertLessEqual(scope_event.time_range.start, rpc_event.time_range.start) - self.assertGreaterEqual(scope_event.time_range.end, rpc_event.time_range.end) + self.assertLessEqual(scope_event.time_range.start, rpc_event.time_range.start) # type: ignore[attr-defined] + self.assertGreaterEqual(scope_event.time_range.end, rpc_event.time_range.end) # type: ignore[attr-defined] # the sender, dest worker, function run, and type of RPC should all # be recorded. - self_worker_name = worker_name(self.rank) + self_worker_name = worker_name(self.rank) # type: ignore[attr-defined] dst_worker_name = worker_name(dst) self.check_profiling_info(self_worker_name, dst_worker_name, func, rpc_event, rpc_exec_mode) if use_record_function: @@ -1606,7 +1606,7 @@ def _profiler_test_with_rpc(self, rpc_exec_mode, func, args, use_record_function # before the rpc event. foo_event_ix = next(i for i, event in enumerate(events) if "foo" in event.name) rpc_event_idx = next(i for i, event in enumerate(events) if rpc_exec_mode.value in event.name) - self.assertLess(foo_event_ix, rpc_event_idx) + self.assertLess(foo_event_ix, rpc_event_idx) # type: ignore[attr-defined] def _run_test_profiler_with_sync_rpc_udf(self): self._profiler_test_with_rpc(RPCExecMode.SYNC, my_sleep_func, args=(1,)) @@ -1679,7 +1679,7 @@ def _run_test_profiler_with_remote_udf(self): ) # test remote to self self._profiler_test_with_rpc( - RPCExecMode.REMOTE, my_sleep_func, args=(1,), dst=self.rank + RPCExecMode.REMOTE, my_sleep_func, args=(1,), dst=self.rank # type: ignore[attr-defined] ) @dist_init @@ -1704,7 +1704,7 @@ def _run_test_profiler_with_remote_builtin(self): RPCExecMode.REMOTE, torch.mul, args=(torch.ones(1), torch.ones(1)), - dst=self.rank, + dst=self.rank, # type: ignore[attr-defined] ) @dist_init @@ -1768,7 +1768,7 @@ def _run_test_profiler_with_script_remote_rpc(self): ) # test remote to self self._profiler_test_with_rpc( - RPCExecMode.REMOTE, my_script_func, args=(torch.tensor(1),), dst=self.rank + RPCExecMode.REMOTE, my_script_func, args=(torch.tensor(1),), dst=self.rank # type: ignore[attr-defined] ) @dist_init @@ -1793,7 +1793,7 @@ def _assert_top_level_events(self, process_global_events, expected_top_level_eve last_end_time = time_range.end top_level_event_names = sorted(top_level_event_names) expected_top_level_event_names = sorted(expected_top_level_event_names) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] top_level_event_names, expected_top_level_event_names, f"Expected events {expected_top_level_event_names}, but got {top_level_event_names}", @@ -1801,10 +1801,10 @@ def _assert_top_level_events(self, process_global_events, expected_top_level_eve @dist_init def test_server_process_global_profiler(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker_name = worker_name(dst_rank) x = torch.tensor(1) @@ -1833,7 +1833,7 @@ def test_server_process_global_profiler(self): @dist_init def test_async_record_function_double_end_callbacks(self): num_sleep_seconds = 1 - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] # Validate that calling the function twice results in an error. with torch.autograd.profiler.profile() as pf: with torch.autograd.profiler.record_function("foo") as rf: @@ -1841,7 +1841,7 @@ def test_async_record_function_double_end_callbacks(self): worker_name(0), my_sleep_func, args=(num_sleep_seconds,) ) rf._call_end_callbacks_on_future(fut) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "can only be called once." ): rf._call_end_callbacks_on_future(fut) @@ -1849,7 +1849,7 @@ def test_async_record_function_double_end_callbacks(self): @dist_init def test_async_record_function_cbs_jit_call(self): - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] with torch.autograd.profiler.profile() as pf: key = _build_rpc_profiling_key( RPCExecMode.ASYNC, @@ -1867,79 +1867,79 @@ def test_async_record_function_cbs_jit_call(self): # Validate that the profiling future returns the same value as the RPC # future. expected = torch.add(torch.tensor(1), torch.tensor(1)) - self.assertEqual(result, expected) + self.assertEqual(result, expected) # type: ignore[attr-defined] events = pf.function_events rpc_event = get_function_event( events, torch._jit_internal._qualified_name(my_script_func) ) - self.assertTrue(torch._jit_internal._qualified_name(my_script_func) in rpc_event.name) + self.assertTrue(torch._jit_internal._qualified_name(my_script_func) in rpc_event.name) # type: ignore[attr-defined] @dist_init def test_py_class_constructor(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync(worker_name(dst_rank), MyClass, args=(n,)) - self.assertEqual(ret.a, n) + self.assertEqual(ret.a, n) # type: ignore[attr-defined] @dist_init def test_py_class_instance_method(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), MyClass(2).my_instance_method, args=(n,) ) - self.assertEqual(ret, MyClass(2).my_instance_method(n)) + self.assertEqual(ret, MyClass(2).my_instance_method(n)) # type: ignore[attr-defined] @dist_init def test_py_class_method(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), MyClass.my_class_method, args=(n, n + 1) ) - self.assertEqual(ret, MyClass.my_class_method(n, n + 1)) + self.assertEqual(ret, MyClass.my_class_method(n, n + 1)) # type: ignore[attr-defined] @dist_init def test_py_class_static_method(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), MyClass.my_static_method, args=(n + 10,) ) - self.assertEqual(ret, MyClass.my_static_method(n + 10)) + self.assertEqual(ret, MyClass.my_static_method(n + 10)) # type: ignore[attr-defined] @dist_init def test_py_multi_async_call(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size dst_worker_info = rpc.get_worker_info(worker_name(dst_rank)) fut1 = rpc.rpc_async(dst_worker_info, MyClass.my_static_method, args=(n + 10,)) fut2 = rpc.rpc_async(dst_worker_info, min, args=(n, n + 1, n + 2)) - self.assertEqual(fut1.wait(), MyClass.my_static_method(n + 10)) - self.assertEqual(fut2.wait(), min(n, n + 1, n + 2)) + self.assertEqual(fut1.wait(), MyClass.my_static_method(n + 10)) # type: ignore[attr-defined] + self.assertEqual(fut2.wait(), min(n, n + 1, n + 2)) # type: ignore[attr-defined] @dist_init def test_py_no_return_result(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync(worker_name(dst_rank), no_result) - self.assertEqual(ret, no_result()) + self.assertEqual(ret, no_result()) # type: ignore[attr-defined] @dist_init def test_py_tensors(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), my_tensor_function, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(ret, my_tensor_function(torch.ones(n, n), torch.ones(n, n))) + self.assertEqual(ret, my_tensor_function(torch.ones(n, n), torch.ones(n, n))) # type: ignore[attr-defined] @dist_init def test_py_tensors_multi_async_call(self): futs = [] - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size for i in range(100): fut = rpc.rpc_async( @@ -1951,14 +1951,14 @@ def test_py_tensors_multi_async_call(self): j = 0 for val in torch.futures.wait_all(futs): - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] val, my_tensor_function(torch.ones(j, j), torch.ones(j, j)) ) j += 1 @dist_init def test_py_tensors_in_container(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size a = [torch.ones(n, n), torch.ones(n, n)] b = TensorClass(build_complex_tensors()) @@ -1966,11 +1966,11 @@ def test_py_tensors_in_container(self): ret = rpc.rpc_sync( worker_name(dst_rank), my_complex_tensor_function, args=(a, b, c) ) - self.assertEqual(ret, my_complex_tensor_function(a, b, c)) + self.assertEqual(ret, my_complex_tensor_function(a, b, c)) # type: ignore[attr-defined] @dist_init def test_py_nested_pickle(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( @@ -1981,13 +1981,13 @@ def test_py_nested_pickle(self): m = MyPickleClass() m.set(my_tensor_function(torch.ones(2, 2), torch.ones(2, 2))) - self.assertEqual(ret, run_nested_pickle(m, torch.ones(2, 2))) + self.assertEqual(ret, run_nested_pickle(m, torch.ones(2, 2))) # type: ignore[attr-defined] @dist_init def test_py_function_exception(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size - with self.assertRaises(TypeError): + with self.assertRaises(TypeError): # type: ignore[attr-defined] ret = rpc.rpc_sync(worker_name(dst_rank), no_result, args=(10,)) @dist_init @@ -1995,12 +1995,12 @@ def test_py_raise_in_user_func(self): with captured_output() as (_, err): # This barrier prevents a race condition where the main thread has # not entered the context manager when the remote function runs. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size fut = rpc.rpc_async(worker_name(dst_rank), raise_func) - with self.assertRaisesRegex(ValueError, expected_err): + with self.assertRaisesRegex(ValueError, expected_err): # type: ignore[attr-defined] fut.wait() # This barrier prevents a race condition where the main thread exits # context manager before the remote function has ran. @@ -2008,11 +2008,11 @@ def test_py_raise_in_user_func(self): # Validate that trainers log errors when running functions. stderr_lines = err.getvalue() - self.assertTrue(expected_err in stderr_lines) + self.assertTrue(expected_err in stderr_lines) # type: ignore[attr-defined] @dist_init def test_py_raise_in_user_func_escaped_str(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size fut = rpc.rpc_async(worker_name(dst_rank), raise_func_escape) try: @@ -2020,23 +2020,23 @@ def test_py_raise_in_user_func_escaped_str(self): except ValueError as e: msg = str(e) # Ensure newlines are unescaped to provide a better repr of error. - self.assertEqual(msg, msg.encode("utf-8").decode("unicode_escape")) + self.assertEqual(msg, msg.encode("utf-8").decode("unicode_escape")) # type: ignore[attr-defined] else: - self.assertTrue(False, "expected raise_func_escape to raise ValueError.") + self.assertTrue(False, "expected raise_func_escape to raise ValueError.") # type: ignore[attr-defined] @dist_init def test_nested_rpc(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size ret = rpc.rpc_sync( worker_name(dst_rank), nested_rpc, - args=(worker_name(self.rank),), + args=(worker_name(self.rank),), # type: ignore[attr-defined] ) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] def _stress_test_rpc(self, f, repeat=1000, args=()): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size futs = [] tik = time.time() @@ -2045,11 +2045,11 @@ def _stress_test_rpc(self, f, repeat=1000, args=()): futs.append(fut) for val in torch.futures.wait_all(futs): - self.assertEqual(val, 0) + self.assertEqual(val, 0) # type: ignore[attr-defined] tok = time.time() print( "Rank {} finished testing {} times in {} seconds.".format( - self.rank, repeat, tok - tik + self.rank, repeat, tok - tik # type: ignore[attr-defined] ) ) @@ -2067,27 +2067,27 @@ def test_stress_heavy_rpc_torchscript(self): @dist_init def test_builtin_remote_ret(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref = rpc.remote( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), torch.ones(n, n)), ) - self.assertEqual(rref.to_here(), torch.ones(n, n) * 2) + self.assertEqual(rref.to_here(), torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_builtin_remote_self(self): rref = rpc.remote( - worker_name(self.rank), + worker_name(self.rank), # type: ignore[attr-defined] torch.add, args=(torch.ones(2, 2), torch.ones(2, 2)), ) - self.assertEqual(rref.local_value(), torch.ones(2, 2) * 2) + self.assertEqual(rref.local_value(), torch.ones(2, 2) * 2) # type: ignore[attr-defined] def _test_multi_remote_call(self, fn, args_fn=lambda x: (), kwargs_fn=lambda x: {}): m = 10 - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rrefs = [] expected = [] @@ -2104,7 +2104,7 @@ def _test_multi_remote_call(self, fn, args_fn=lambda x: (), kwargs_fn=lambda x: expected.append(fn(*args_fn(n), **kwargs_fn(n))) for i in range(m): - self.assertEqual(rrefs[i].to_here(), expected[i]) + self.assertEqual(rrefs[i].to_here(), expected[i]) # type: ignore[attr-defined] @dist_init def test_multi_builtin_remote_ret(self): @@ -2115,14 +2115,14 @@ def args_fn(n): @dist_init def test_py_udf_remote(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref = rpc.remote( worker_name(dst_rank), my_function, kwargs={"a": n, "b": n + 1, "c": n + 2}, ) - self.assertEqual(rref.to_here(), my_function(n, n + 1, n + 2)) + self.assertEqual(rref.to_here(), my_function(n, n + 1, n + 2)) # type: ignore[attr-defined] @dist_init def test_multi_py_udf_remote(self): @@ -2133,7 +2133,7 @@ def kwargs_fn(n): @dist_init def test_py_rref_args(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref_a = rpc.remote( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), 2) @@ -2144,11 +2144,11 @@ def test_py_rref_args(self): rref_c = rpc.remote( worker_name(dst_rank), my_rref_function, args=(rref_a, rref_b) ) - self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) + self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) # type: ignore[attr-defined] @dist_init def test_py_rref_args_user_share(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] owner_rank = n % self.world_size user_rank = (n + 1) % self.world_size rref_a = rpc.remote( @@ -2160,11 +2160,11 @@ def test_py_rref_args_user_share(self): rref_c = rpc.remote( worker_name(user_rank), my_rref_function, args=(rref_a, rref_b) ) - self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) + self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) # type: ignore[attr-defined] @dist_init def test_py_rpc_rref_args(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref_a = rpc.remote( worker_name(dst_rank), my_function, args=(torch.ones(n, n), 2, 0) @@ -2177,11 +2177,11 @@ def test_py_rpc_rref_args(self): worker_name(dst_rank), my_rref_function, args=(rref_a, rref_b) ) - self.assertEqual(c, torch.ones(n, n) + 4) + self.assertEqual(c, torch.ones(n, n) + 4) # type: ignore[attr-defined] @dist_init def test_nested_remote(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank1 = n % self.world_size dst_rank2 = (n + 1) % self.world_size @@ -2190,11 +2190,11 @@ def test_nested_remote(self): nested_remote, args=(worker_name(dst_rank2),), ) - self.assertEqual(rref.to_here(), torch.ones(2, 2) + 3) + self.assertEqual(rref.to_here(), torch.ones(2, 2) + 3) # type: ignore[attr-defined] @dist_init def test_nested_rref(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank1 = n % self.world_size dst_rank2 = (n + 1) % self.world_size rref_of_rrefs = rpc.remote( @@ -2208,13 +2208,13 @@ def test_nested_rref(self): # This call is effectively A asking B to share its 2 UserRRefs. rrefs = rref_of_rrefs.to_here() - self.assertEqual(len(rrefs), 2) - self.assertEqual(rrefs[0].to_here(), torch.ones(2, 2) + 1) - self.assertEqual(rrefs[1].to_here(), torch.ones(2, 2) + 2) + self.assertEqual(len(rrefs), 2) # type: ignore[attr-defined] + self.assertEqual(rrefs[0].to_here(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] + self.assertEqual(rrefs[1].to_here(), torch.ones(2, 2) + 2) # type: ignore[attr-defined] @dist_init def test_nested_rref_stress(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank1 = n % self.world_size dst_rank2 = (n + 1) % self.world_size all_rrefs = [] @@ -2230,9 +2230,9 @@ def test_nested_rref_stress(self): for i in range(20): rref_of_rrefs = all_rrefs[i] rrefs = rref_of_rrefs.to_here() - self.assertEqual(len(rrefs), 2) - self.assertEqual(rrefs[0].to_here(), torch.ones(2, 2) + 1) - self.assertEqual(rrefs[1].to_here(), torch.ones(2, 2) + 2) + self.assertEqual(len(rrefs), 2) # type: ignore[attr-defined] + self.assertEqual(rrefs[0].to_here(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] + self.assertEqual(rrefs[1].to_here(), torch.ones(2, 2) + 2) # type: ignore[attr-defined] @dist_init def test_multi_layer_nested_async_rpc(self): @@ -2241,27 +2241,27 @@ def test_multi_layer_nested_async_rpc(self): # Otherwise, some peer could exit early, leaving others to timeout # errors or connection closed errors. ttl = 20 - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size multi_layer_nested_async_rpc(dst_rank, self.world_size, ttl) @dist_init def test_remote_with_exception(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size # check ref to other workers rref = rpc.remote(worker_name(dst_rank), raise_func) - with self.assertRaises(ValueError): + with self.assertRaises(ValueError): # type: ignore[attr-defined] rref.to_here() # check ref to itself - rref = rpc.remote(worker_name(self.rank), no_result, args=(10,)) - with self.assertRaises(TypeError): + rref = rpc.remote(worker_name(self.rank), no_result, args=(10,)) # type: ignore[attr-defined] + with self.assertRaises(TypeError): # type: ignore[attr-defined] rref.to_here() @dist_init def test_rpc_return_rref(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank1 = n % self.world_size dst_rank2 = (n + 1) % self.world_size rref = rpc.rpc_sync( @@ -2269,12 +2269,12 @@ def test_rpc_return_rref(self): rpc_return_rref, args=(worker_name(dst_rank2),), ) - self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1) + self.assertEqual(rref.to_here(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] @dist_init def test_rref_forward_chain(self): ttl = 8 - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref = rpc.remote( @@ -2284,31 +2284,31 @@ def test_rref_forward_chain(self): ret_rref = rref_forward_chain(dst_rank, self.world_size, rref, ttl) for i in range(ttl): - self.assertEqual(len(ret_rref), 1) + self.assertEqual(len(ret_rref), 1) # type: ignore[attr-defined] ret_rref = ret_rref[0].to_here() ret = ret_rref - self.assertEqual(ret, torch.add(torch.ones(n, n), 1)) + self.assertEqual(ret, torch.add(torch.ones(n, n), 1)) # type: ignore[attr-defined] @dist_init def test_local_rref_no_fork(self): - local_rref = RRef(35) - self.assertEqual(local_rref.local_value(), 35) + local_rref = RRef(35) # type: ignore[var-annotated] + self.assertEqual(local_rref.local_value(), 35) # type: ignore[attr-defined] @dist_init def test_local_value_not_on_owner(self): # ensure that an error message is thrown if a user tries to call # local_value() on a non-owning node. - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref = rpc.remote( worker_name(next_rank), torch.add, args=(torch.ones(1), torch.ones(1)) ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, ( - fr"For UserRRef\(rref_id=GloballyUniqueId\(created_on={self.rank}, local_id=0\), " + fr"For UserRRef\(rref_id=GloballyUniqueId\(created_on={self.rank}, local_id=0\), " # type: ignore[attr-defined] fr"fork_id=GloballyUniqueId\(created_on={self.rank}, local_id=1\)\), " r"can't call localValue\(\) on user " - fr"WorkerInfo\(id={self.rank}, name={worker_name(self.rank)}\). " + fr"WorkerInfo\(id={self.rank}, name={worker_name(self.rank)}\). " # type: ignore[attr-defined] fr"Call it on owner WorkerInfo\(id={next_rank}, name={worker_name(next_rank)}\)" ) ): @@ -2316,7 +2316,7 @@ def test_local_value_not_on_owner(self): @dist_init def test_return_local_rrefs(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref_list = rpc.rpc_sync( @@ -2337,7 +2337,7 @@ def test_return_local_rrefs(self): for rref in rref_list ] - self.assertEqual(rets, [11, 12, 13]) + self.assertEqual(rets, [11, 12, 13]) # type: ignore[attr-defined] @dist_init def _test_rref_type(self, blocking): @@ -2346,7 +2346,7 @@ def launched_rpc(events): expected_name = f"rpc_{RPCExecMode.ASYNC.value}#_rref_typeof_on_owner" return any([e.name.startswith(expected_name) for e in events]) - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote(dst, torch.add, args=(torch.ones(2), 1)) with torch.autograd.profiler.profile() as p: @@ -2354,14 +2354,14 @@ def launched_rpc(events): if not blocking: t = t.wait() - self.assertTrue(launched_rpc(p.function_events)) + self.assertTrue(launched_rpc(p.function_events)) # type: ignore[attr-defined] expected_type = type(torch.ones(2)) - self.assertEqual(t, expected_type) + self.assertEqual(t, expected_type) # type: ignore[attr-defined] futs = [] def verify(fut): - self.assertEqual(fut.value(), expected_type) + self.assertEqual(fut.value(), expected_type) # type: ignore[attr-defined] with torch.autograd.profiler.profile() as p: for _ in range(10): @@ -2370,24 +2370,24 @@ def verify(fut): futs.append(t) t.add_done_callback(verify) t = t.wait() - self.assertEqual(t, expected_type) + self.assertEqual(t, expected_type) # type: ignore[attr-defined] if not blocking: # Note that cached calls with blocking=False all return the same # cached original future. first_fut = futs[0] for f in futs[1:]: - self.assertTrue(f is first_fut) + self.assertTrue(f is first_fut) # type: ignore[attr-defined] # Ensure we never launch another RPC, other than for the very # first call. - self.assertFalse(launched_rpc(p.function_events)) - self.assertEqual(t, type(torch.ones(2))) + self.assertFalse(launched_rpc(p.function_events)) # type: ignore[attr-defined] + self.assertEqual(t, type(torch.ones(2))) # type: ignore[attr-defined] rref = rpc.remote(dst, MyClass, args=(0,)) rref_type = rref._get_type(blocking=blocking) if not blocking: rref_type = rref_type.wait() - self.assertEqual(rref_type, MyClass) + self.assertEqual(rref_type, MyClass) # type: ignore[attr-defined] def test_rref_type_blocking(self): self._test_rref_type(blocking=True) @@ -2397,17 +2397,17 @@ def test_rref_type_non_blocking(self): @dist_init def _test_rref_type_with_error(self, blocking): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] # 10 ms timeout rref = rpc.remote(dst, raise_func) # Blocking: error raised inline if blocking: - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] rref._get_type(blocking=blocking) else: # Non-blocking: Immediately return future, block on wait fut = rref._get_type(blocking=blocking) - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] fut.wait() @@ -2419,17 +2419,17 @@ def test_rref_type_with_error_non_blocking(self): @dist_init def _test_rref_type_owner(self, blocking): - rref = RRef(torch.ones(2) + 1) - rref_type = rref._get_type(blocking=blocking) + rref = RRef(torch.ones(2) + 1) # type: ignore[var-annotated] + rref_type = rref._get_type(blocking=blocking) # type: ignore[call-arg] if not blocking: rref_type = rref_type.wait() - self.assertEqual(rref_type, type(torch.ones(2))) + self.assertEqual(rref_type, type(torch.ones(2))) # type: ignore[attr-defined] rref = RRef(MyClass(0)) - rref_type = rref._get_type(blocking=blocking) + rref_type = rref._get_type(blocking=blocking) # type: ignore[call-arg] if not blocking: rref_type = rref_type.wait() - self.assertEqual(rref_type, MyClass) + self.assertEqual(rref_type, MyClass) # type: ignore[attr-defined] def test_rref_type_owner_blocking(self): self._test_rref_type_owner(blocking=True) @@ -2444,16 +2444,16 @@ def _slow_add(x, y): @dist_init def test_rref_type_slow_init(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote(dst, RpcTest._slow_add, args=(torch.ones(2), 1)) - self.assertEqual(rref._get_type(), type(torch.ones(2))) + self.assertEqual(rref._get_type(), type(torch.ones(2))) # type: ignore[attr-defined] @dist_init def test_owner_equality(self): - a = RRef(40) - b = RRef(50) + a = RRef(40) # type: ignore[var-annotated] + b = RRef(50) # type: ignore[var-annotated] - other_rank = (self.rank + 1) % self.world_size + other_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] other_a = rpc.remote( worker_name(other_rank), torch.add, args=(torch.ones(1), 1) ) @@ -2463,43 +2463,43 @@ def test_owner_equality(self): other_a.to_here() # to ensure clean termination other_b.to_here() - self.assertNotEqual(a.owner(), 23) - self.assertEqual(other_a.owner(), other_b.owner()) - self.assertNotEqual(a.owner(), other_a.owner()) - self.assertEqual(other_a.owner(), other_a.owner()) - self.assertEqual(other_a.owner(), other_b.owner()) - self.assertEqual(a.owner(), a.owner()) - self.assertEqual(a.owner(), b.owner()) - self.assertEqual(a.owner(), rpc.get_worker_info()) + self.assertNotEqual(a.owner(), 23) # type: ignore[attr-defined] + self.assertEqual(other_a.owner(), other_b.owner()) # type: ignore[attr-defined] + self.assertNotEqual(a.owner(), other_a.owner()) # type: ignore[attr-defined] + self.assertEqual(other_a.owner(), other_a.owner()) # type: ignore[attr-defined] + self.assertEqual(other_a.owner(), other_b.owner()) # type: ignore[attr-defined] + self.assertEqual(a.owner(), a.owner()) # type: ignore[attr-defined] + self.assertEqual(a.owner(), b.owner()) # type: ignore[attr-defined] + self.assertEqual(a.owner(), rpc.get_worker_info()) # type: ignore[attr-defined] x = dict() x[a.owner()] = a x[other_a.owner()] = other_a - self.assertEqual(x[a.owner()], a) - self.assertEqual(x[b.owner()], a) - self.assertEqual(x[other_a.owner()], other_a) - self.assertEqual(x[other_b.owner()], other_a) - self.assertEqual(len(x), 2) + self.assertEqual(x[a.owner()], a) # type: ignore[attr-defined] + self.assertEqual(x[b.owner()], a) # type: ignore[attr-defined] + self.assertEqual(x[other_a.owner()], other_a) # type: ignore[attr-defined] + self.assertEqual(x[other_b.owner()], other_a) # type: ignore[attr-defined] + self.assertEqual(len(x), 2) # type: ignore[attr-defined] @dist_init def test_pass_local_rrefs(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size dst_worker = worker_name(dst_rank) - rref = RRef(40) - self.assertEqual( + rref = RRef(40) # type: ignore[var-annotated] + self.assertEqual( # type: ignore[attr-defined] rpc.rpc_sync(dst_worker, add_rref_to_value, args=(rref, 50)), 90 ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] rpc.rpc_async(dst_worker, add_rref_to_value, args=(rref, 50)).wait(), 90 ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] rpc.remote(dst_worker, add_rref_to_value, args=(rref, 50)).to_here(), 90 ) @dist_init def test_remote_same_worker(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref_a = rpc.remote( worker_name(dst_rank), torch.add, args=(torch.ones(n, n), 2) @@ -2510,7 +2510,7 @@ def test_remote_same_worker(self): rref_c = rpc.remote( worker_name(dst_rank), my_rref_function, args=(rref_a, rref_b) ) - self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) + self.assertEqual(rref_c.to_here(), torch.ones(n, n) + 4) # type: ignore[attr-defined] @dist_init(setup_rpc=True) def test_call_method_on_rref(self): @@ -2519,7 +2519,7 @@ def test_call_method_on_rref(self): by using rref.owner() as destination of the call. """ vals = [10, 2, 5, 7] - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst_rank) # creates a remote object @@ -2547,7 +2547,7 @@ def test_call_method_on_rref(self): dst_worker, _call_method_on_rref, args=(MyClass.get_value, rref) ) - self.assertEqual(result, sum(vals)) + self.assertEqual(result, sum(vals)) # type: ignore[attr-defined] # Notice `rpc.api.shutdown()` accesses # `_delete_all_user_and_unforked_owner_rrefs` through @@ -2557,19 +2557,19 @@ def test_call_method_on_rref(self): @mock.patch.object(torch.distributed.rpc.api, "_delete_all_user_and_unforked_owner_rrefs") def _test_rref_leak(self, _mock_delete_all_user_and_unforked_owner_rrefs, ignore_leak): rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # Wait for all init to complete. dist.barrier() rref = rpc.remote( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] torch.add, args=(torch.ones(2, 2), 1), ) @@ -2581,7 +2581,7 @@ def _test_rref_leak(self, _mock_delete_all_user_and_unforked_owner_rrefs, ignore rpc.shutdown(graceful=True) else: api._ignore_rref_leak = False - with self.assertRaisesRegex(RuntimeError, "Leaking RRef"): + with self.assertRaisesRegex(RuntimeError, "Leaking RRef"): # type: ignore[attr-defined] rpc.shutdown(graceful=True) @dist_init(setup_rpc=False) @@ -2594,20 +2594,20 @@ def test_ignore_rref_leak(self): @dist_init def test_rref_str(self): - rref1 = RRef(self.rank) + rref1 = RRef(self.rank) # type: ignore[var-annotated, attr-defined] id_class = "GloballyUniqueId" - self.assertEqual( - "OwnerRRef({}(created_on={}, local_id=0))".format(id_class, self.rank), rref1.__str__() + self.assertEqual( # type: ignore[attr-defined] + "OwnerRRef({}(created_on={}, local_id=0))".format(id_class, self.rank), rref1.__str__() # type: ignore[attr-defined] ) - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref2 = rpc.remote( worker_name(dst_rank), torch.add, args=(torch.ones(2, 2), 1) ) - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] rref2.__str__(), "UserRRef(RRefId = {0}(created_on={1}, local_id=1), ForkId = {0}(created_on={1}, local_id=2))".format( - id_class, self.rank + id_class, self.rank # type: ignore[attr-defined] ), ) @@ -2615,24 +2615,24 @@ def test_rref_str(self): def test_rref_get_future(self): # Tests that we can obtain the future corresponding to the creation of # the RRef on remote end - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # Builtin rref = rpc.remote(worker_name(1), torch.add, args=(1, 1)) rref.to_here() fut = rref._get_future() - self.assertIsInstance(fut, torch._C.Future) + self.assertIsInstance(fut, torch._C.Future) # type: ignore[attr-defined] # UDF rref = rpc.remote(worker_name(1), foo_add, args=()) rref.to_here() fut = rref._get_future() - self.assertIsInstance(fut, torch._C.Future) + self.assertIsInstance(fut, torch._C.Future) # type: ignore[attr-defined] # Script rref = rpc.remote(worker_name(1), my_script_func, args=(torch.tensor(1), )) rref.to_here() fut = rref._get_future() - self.assertIsInstance(fut, torch._C.Future) + self.assertIsInstance(fut, torch._C.Future) # type: ignore[attr-defined] @dist_init @@ -2642,27 +2642,27 @@ def test_rref_context_debug_info(self): # The barrier before the check makes sure that all previous states are # cleared globally, the barrier after ensures that no following states # change gets into the current check. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # Check 1: local RRef does not update owners_ map or add a pending user. ################################################# - rref1 = RRef(self.rank) + rref1 = RRef(self.rank) # type: ignore[var-annotated, attr-defined] # don't need a barrier here as local RRef is handled by this thread info = _rref_context_get_debug_info() - self.assertIn("num_owner_rrefs", info) - self.assertIn("num_pending_users", info) + self.assertIn("num_owner_rrefs", info) # type: ignore[attr-defined] + self.assertIn("num_pending_users", info) # type: ignore[attr-defined] # RRef on local value is not added to context until shared across RPC - self.assertEqual(0, int(info["num_owner_rrefs"])) - self.assertEqual(0, int(info["num_pending_users"])) + self.assertEqual(0, int(info["num_owner_rrefs"])) # type: ignore[attr-defined] + self.assertEqual(0, int(info["num_pending_users"])) # type: ignore[attr-defined] # barrier after the check 1 dist.barrier() # Check 2: Sharing RRef as an arg should update owners_ map ########################################################### - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rpc.rpc_sync(worker_name(dst_rank), set_global_rref, args=(rref1,)) # barrier before check 2 @@ -2670,10 +2670,10 @@ def test_rref_context_debug_info(self): dist.barrier() info = _rref_context_get_debug_info() - self.assertIn("num_owner_rrefs", info) - self.assertEqual(1, int(info["num_owner_rrefs"])) + self.assertIn("num_owner_rrefs", info) # type: ignore[attr-defined] + self.assertEqual(1, int(info["num_owner_rrefs"])) # type: ignore[attr-defined] # no pending users since the fork is finished - self.assertEqual(0, int(info["num_pending_users"])) + self.assertEqual(0, int(info["num_pending_users"])) # type: ignore[attr-defined] # barrier after check 2 dist.barrier() @@ -2702,10 +2702,10 @@ def test_rref_context_debug_info(self): dist.barrier() info = _rref_context_get_debug_info() - self.assertIn("num_owner_rrefs", info) - self.assertEqual(2, int(info["num_owner_rrefs"])) + self.assertIn("num_owner_rrefs", info) # type: ignore[attr-defined] + self.assertEqual(2, int(info["num_owner_rrefs"])) # type: ignore[attr-defined] # no pending users since the fork is finished - self.assertEqual(0, int(info["num_pending_users"])) + self.assertEqual(0, int(info["num_pending_users"])) # type: ignore[attr-defined] # barrier after check 3 dist.barrier() @@ -2716,27 +2716,27 @@ def test_disable_gil_profiling(self): # GIL wait time not being recorded. # GIL profiling should be disabled by default. - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(1), torch.ones(1)) ) info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertRaises(KeyError, lambda: info["agent.gil_average_wait_time_us"]) + self.assertRaises(KeyError, lambda: info["agent.gil_average_wait_time_us"]) # type: ignore[attr-defined] rpc.enable_gil_profiling(True) rpc.rpc_sync( worker_name(dst_rank), torch.add, args=(torch.ones(1), torch.ones(1)) ) info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertIn("agent.gil_average_wait_time_us", info) + self.assertIn("agent.gil_average_wait_time_us", info) # type: ignore[attr-defined] @dist_init(setup_rpc=False) def test_local_shutdown(self): # test that we can start RPC and then immediately locally shutdown # without sending any messages. rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -2754,7 +2754,7 @@ def test_debug_info(self): agent_info = rpc.api._get_current_rpc_agent().get_debug_info() autograd_info = dist_autograd._get_debug_info() common_keys = rref_info.keys() & agent_info.keys() & autograd_info.keys() - self.assertEqual(0, len(common_keys)) + self.assertEqual(0, len(common_keys)) # type: ignore[attr-defined] expected = {} expected.update(rref_info) expected.update(agent_info) @@ -2762,10 +2762,10 @@ def test_debug_info(self): # NB: Key ordering is only preserved in python 3.6+. So here, we # manually check keys are equal. for key in expected.keys(): - self.assertIn(key, info.keys()) + self.assertIn(key, info.keys()) # type: ignore[attr-defined] for key in info.keys(): - self.assertIn(key, expected.keys()) + self.assertIn(key, expected.keys()) # type: ignore[attr-defined] @dist_init(setup_rpc=False) @unittest.skipIf( @@ -2776,19 +2776,19 @@ def test_handle_send_exceptions(self): # test that if a callee node has gone down, we raise an appropriate # exception instead of just crashing. rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) rpc._set_rpc_timeout(10) # This barrier is needed to ensure that some workers do not exit before # others have been brought up, for non ProcessGroupAgent backends. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() - if self.rank == 1: - dst_rank = (self.rank + 1) % self.world_size + if self.rank == 1: # type: ignore[attr-defined] + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst_rank) # allow destination worker to exit without joining error_str = self.get_shutdown_error_regex() @@ -2796,7 +2796,7 @@ def test_handle_send_exceptions(self): fut = rpc.rpc_async(dst_worker, torch.add, args=(torch.ones(1), 3)) # Shutdown sequence is not very well defined and as a result # we can see any of the error messages defined in get_shutdown_error_regex. - with self.assertRaisesRegex(RuntimeError, error_str): + with self.assertRaisesRegex(RuntimeError, error_str): # type: ignore[attr-defined] fut.wait() # exit all workers non-gracefully. rpc.shutdown(graceful=False) @@ -2804,8 +2804,8 @@ def test_handle_send_exceptions(self): @dist_init def test_deadlock(self): # this test is copied from https://github.com/pytorch/pytorch/issues/45089 - if self.rank == 1: - dst1 = worker_name((self.rank + 1) % self.world_size) + if self.rank == 1: # type: ignore[attr-defined] + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] x = torch.ones(2) y = torch.ones(2) rpc.rpc_async(dst1, RpcTest._slow_add, args=(x, y), timeout=15).wait() @@ -2815,7 +2815,7 @@ def test_deadlock(self): dist.init_process_group( backend="gloo", init_method=self.file_init_method, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, ) @@ -2823,13 +2823,13 @@ def test_deadlock(self): def test_local_shutdown_with_rpc(self): # test that we can start RPC, send RPCs, and then run local shutdown. rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rpc.rpc_sync( worker_name(dst_rank), @@ -2839,7 +2839,7 @@ def test_local_shutdown_with_rpc(self): # A barrier is needed to ensure that all RPCs are processed. # Otherwise, some RPCs can timeout since the receiving end # has terminated. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() # pass in graceful=False to ensure that we don't wait for other workers. rpc.shutdown(graceful=False) @@ -2854,14 +2854,14 @@ def test_set_and_get_default_rpc_timeout(self): rpc_backend_options.rpc_timeout = timeout rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) set_timeout = rpc.get_rpc_timeout() - self.assertEqual(timeout, set_timeout) + self.assertEqual(timeout, set_timeout) # type: ignore[attr-defined] rpc.shutdown() @dist_init @@ -2870,7 +2870,7 @@ def test_default_timeout_used(self): Tests that if no timeout is passed into rpc_async and rpc_sync, then the default timeout is used. """ - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rpc._set_rpc_timeout(0.001) # 1 ms # futures should time out and be marked with an exception indicating it as such. futs = [ @@ -2879,7 +2879,7 @@ def test_default_timeout_used(self): ] expected_error = self.get_timeout_error_regex() for fut in futs: - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # ensure that if a new timeout is set old futures don't time out but new ones do. @@ -2890,7 +2890,7 @@ def test_default_timeout_used(self): rpc._set_rpc_timeout(0.001) # fut2 should time out, fut1 should not. fut2 = rpc.rpc_async(worker_name(dst_rank), my_sleep_func, args=(1,)) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut2.wait() fut1.wait() @@ -2904,13 +2904,13 @@ def test_default_timeout_used(self): @dist_init def test_rpc_timeouts(self): # TODO: enable timeouts for rpc.remote/RRef (https://github.com/pytorch/pytorch/issues/33803) - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(dst_rank) timeout = 0.1 # 100 ms expected_error = self.get_timeout_error_regex() # Test async UDF fut = rpc.rpc_async(dst_worker, my_sleep_func, args=(1,), timeout=timeout) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure run to completion if there is no timeout and we use the default @@ -2918,7 +2918,7 @@ def test_rpc_timeouts(self): rpc.rpc_async(dst_worker, my_sleep_func, args=(1,)).wait() # Test sync UDF - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc.rpc_sync(dst_worker, my_sleep_func, args=(1,), timeout=timeout) # Ensure run to completion if there is no timeout and we use the default @@ -2929,9 +2929,9 @@ def test_rpc_timeouts(self): # still overridden if we pass in a different timeout to the APIs. rpc._set_rpc_timeout(0.001) fut = rpc.rpc_async(dst_worker, my_sleep_func, args=(1,)) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc.rpc_sync(dst_worker, my_sleep_func, args=(1,)) # The RPCs should run to completion since we override the timeout. @@ -2948,13 +2948,13 @@ def test_dist_init_decorator(self): def test_func(self): return "expected result" - self.assertEqual(test_func(self), "expected result") + self.assertEqual(test_func(self), "expected result") # type: ignore[attr-defined] - @dist_init + @dist_init # type: ignore[no-redef] def test_func(self): return "expected result" - self.assertEqual(test_func(self), "expected result") + self.assertEqual(test_func(self), "expected result") # type: ignore[attr-defined] def test_use_rpc_pickler(self): class TestPickler: @@ -2962,69 +2962,69 @@ class TestPickler: test_pickler = TestPickler() with _use_rpc_pickler(test_pickler): - self.assertTrue(torch.distributed.rpc.api._default_pickler is test_pickler) - self.assertTrue( + self.assertTrue(torch.distributed.rpc.api._default_pickler is test_pickler) # type: ignore[attr-defined] + self.assertTrue( # type: ignore[attr-defined] torch.distributed.rpc.api._default_pickler is _internal_rpc_pickler ) @dist_init def test_wait_all(self): with _wait_all(): - self.assertTrue(_thread_local_var.future_list == []) - dst = worker_name((self.rank + 1) % self.world_size) + self.assertTrue(_thread_local_var.future_list == []) # type: ignore[attr-defined] + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut = rpc.rpc_async(dst, torch.add, (torch.ones(2, 2), 1)) - self.assertTrue(len(_thread_local_var.future_list) == 1) - self.assertTrue(isinstance(_thread_local_var.future_list[0], torch._C.Future)) - self.assertTrue(fut.done()) - self.assertEqual(fut.wait(), torch.ones(2, 2) + 1) - self.assertFalse(hasattr(_thread_local_var, "future_list")) + self.assertTrue(len(_thread_local_var.future_list) == 1) # type: ignore[attr-defined] + self.assertTrue(isinstance(_thread_local_var.future_list[0], torch._C.Future)) # type: ignore[attr-defined] + self.assertTrue(fut.done()) # type: ignore[attr-defined] + self.assertEqual(fut.wait(), torch.ones(2, 2) + 1) # type: ignore[attr-defined] + self.assertFalse(hasattr(_thread_local_var, "future_list")) # type: ignore[attr-defined] @dist_init def test_wait_all_multiple_call(self): with _wait_all(): - self.assertTrue(_thread_local_var.future_list == []) - dst = worker_name((self.rank + 1) % self.world_size) + self.assertTrue(_thread_local_var.future_list == []) # type: ignore[attr-defined] + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] for i in range(20): fut = rpc.rpc_async(dst, torch.add, (torch.ones(i, i), 1)) res = rpc.rpc_sync(dst, torch.add, (torch.ones(i, i), 1)) - self.assertEqual(res, torch.ones(i, i) + 1) - self.assertEqual(fut.wait(), torch.ones(i, i) + 1) - self.assertTrue(len(_thread_local_var.future_list) == 20) - self.assertFalse(hasattr(_thread_local_var, "future_list")) + self.assertEqual(res, torch.ones(i, i) + 1) # type: ignore[attr-defined] + self.assertEqual(fut.wait(), torch.ones(i, i) + 1) # type: ignore[attr-defined] + self.assertTrue(len(_thread_local_var.future_list) == 20) # type: ignore[attr-defined] + self.assertFalse(hasattr(_thread_local_var, "future_list")) # type: ignore[attr-defined] @dist_init def test_wait_all_timeout(self): expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] with _wait_all(): - self.assertTrue(_thread_local_var.future_list == []) - dst = worker_name((self.rank + 1) % self.world_size) + self.assertTrue(_thread_local_var.future_list == []) # type: ignore[attr-defined] + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] timeout = 0.1 # 100 ms fut = rpc.rpc_async(dst, my_sleep_func, args=(1,), timeout=timeout) - self.assertFalse(hasattr(_thread_local_var, "future_list")) + self.assertFalse(hasattr(_thread_local_var, "future_list")) # type: ignore[attr-defined] @dist_init def test_wait_all_raise_in_user_func(self): - with self.assertRaises(ValueError): + with self.assertRaises(ValueError): # type: ignore[attr-defined] with _wait_all(): - self.assertTrue(_thread_local_var.future_list == []) - dst = worker_name((self.rank + 1) % self.world_size) + self.assertTrue(_thread_local_var.future_list == []) # type: ignore[attr-defined] + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut = rpc.rpc_async(dst, raise_func) - self.assertFalse(hasattr(_thread_local_var, "future_list")) + self.assertFalse(hasattr(_thread_local_var, "future_list")) # type: ignore[attr-defined] @dist_init def test_wait_all_raise_in_body(self): - with self.assertRaises(ValueError): + with self.assertRaises(ValueError): # type: ignore[attr-defined] with _wait_all(): raise_func() - self.assertFalse(hasattr(_thread_local_var, "future_list")) + self.assertFalse(hasattr(_thread_local_var, "future_list")) # type: ignore[attr-defined] timed_out_rpc_event = None @staticmethod def timed_out_rpc(): - RpcTest.timed_out_rpc_event.wait() + RpcTest.timed_out_rpc_event.wait() # type: ignore[attr-defined] @dist_init def test_wait_all_exit_early_python(self): @@ -3032,16 +3032,16 @@ def test_wait_all_exit_early_python(self): RpcTest.timed_out_rpc_event = Event() # Wait for all processes to initialize event. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut1 = rpc.rpc_async(dst, RpcTest.timed_out_rpc) fut2 = rpc.rpc_async(dst, raise_func) fut3 = rpc.rpc_async(dst, raise_func) # We should receive the error from fut2 - with self.assertRaisesRegex(ValueError, expected_err): + with self.assertRaisesRegex(ValueError, expected_err): # type: ignore[attr-defined] torch.futures.wait_all([fut1, fut2, fut3]) # Unblock RPC thread for fut1 @@ -3053,16 +3053,16 @@ def test_wait_all_exit_early_builtin(self): RpcTest.timed_out_rpc_event = Event() # Wait for all processes to initialize event. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut1 = rpc.rpc_async(dst, RpcTest.timed_out_rpc) fut2 = rpc.rpc_async(dst, torch.add, args=(torch.rand(10), torch.rand(5))) fut3 = rpc.rpc_async(dst, torch.add, args=(torch.rand(10), torch.rand(5))) # We should receive the error from fut2 - with self.assertRaisesRegex(RuntimeError, "size of tensor"): + with self.assertRaisesRegex(RuntimeError, "size of tensor"): # type: ignore[attr-defined] torch.futures.wait_all([fut1, fut2, fut3]) # Unblock RPC thread for fut1 @@ -3074,16 +3074,16 @@ def test_wait_all_exit_early_script_function(self): RpcTest.timed_out_rpc_event = Event() # Wait for all processes to initialize event. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] dist.barrier() - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut1 = rpc.rpc_async(dst, RpcTest.timed_out_rpc) fut2 = rpc.rpc_async(dst, raise_func_script, args=(expected_err,)) fut3 = rpc.rpc_async(dst, raise_func_script, args=(expected_err,)) # We should receive the error from fut2 - with self.assertRaisesRegex(RuntimeError, expected_err): + with self.assertRaisesRegex(RuntimeError, expected_err): # type: ignore[attr-defined] torch.futures.wait_all([fut1, fut2, fut3]) # Unblock RPC thread for fut1 @@ -3098,36 +3098,36 @@ def test_function_not_on_callee(self): caller_worker = "worker0" callee_worker = "worker1" - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] # Use delattr to remove the binding of a func on this nodes delattr(this_module, "foo_add") # notify remote end that we have removed it. - rpc.rpc_sync(caller_worker, set_value, args=(self.rank,)) + rpc.rpc_sync(caller_worker, set_value, args=(self.rank,)) # type: ignore[attr-defined] - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # func exists on caller, but not callee. # wait for remote end to remove the binding of foo_add func. wait_for_value_future() # Ensure that we have the attribute on this module. Otherwise, the test could fail due to a caller-side pickling error. - self.assertTrue(hasattr(this_module, "foo_add")) - with self.assertRaisesRegex( + self.assertTrue(hasattr(this_module, "foo_add")) # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] AttributeError, "RPC pickler does not serialize" ): rpc.rpc_sync(callee_worker, foo_add, args=()) @dist_init def test_non_garbage_collected_user_rref_due_to_local_circular_dependency(self): - dst_worker_name = worker_name((self.rank + 1) % self.world_size) + dst_worker_name = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] a = MyClass(1) b = MyClass(2) # This is to make Python not garbage collect a and b. - a.other = b - b.other = a + a.other = b # type: ignore[attr-defined] + b.other = a # type: ignore[attr-defined] - n = self.rank - a.rref = rpc.remote( + n = self.rank # type: ignore[attr-defined] + a.rref = rpc.remote( # type: ignore[attr-defined] dst_worker_name, torch.add, args=(torch.ones(n, n), 2) @@ -3136,13 +3136,13 @@ def test_non_garbage_collected_user_rref_due_to_local_circular_dependency(self): @dist_init(setup_rpc=False) def test_use_rref_after_shutdown(self): rpc.init_rpc( - name="worker%d" % self.rank, + name="worker%d" % self.rank, # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst_rank = n % self.world_size rref = rpc.remote( worker_name(dst_rank), @@ -3152,12 +3152,12 @@ def test_use_rref_after_shutdown(self): # pass in graceful=True to ensure that local UserRRefs are deleted. rpc.shutdown(graceful=True) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Cannot call to_here\\(\\) on it after deletion." ): rref.to_here() - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Cannot call fork an UserRRef after deletion." ): import torch.distributed.rpc.internal as internal @@ -3176,7 +3176,7 @@ def _gpu_tensor_list_arg(tensor_list): return torch.rand(3, 3) def _create_rref(self): - owner_rank = (self.rank + 2) % self.world_size + owner_rank = (self.rank + 2) % self.world_size # type: ignore[attr-defined] return rpc.remote( worker_name(owner_rank), torch.add, @@ -3185,68 +3185,68 @@ def _create_rref(self): @dist_init def test_user_rrefs_confirmed(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref = self._create_rref() ret = rpc.rpc_sync( worker_name(dst_rank), check_rref_confirmed, args=(rref,) ) - self.assertEqual(ret, True) + self.assertEqual(ret, True) # type: ignore[attr-defined] @dist_init def test_user_rrefs_confirmed_remote(self): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] rref = self._create_rref() ret_rref = rpc.remote( worker_name(dst_rank), check_rref_confirmed, args=(rref,) ) - self.assertEqual(ret_rref.to_here(), True) + self.assertEqual(ret_rref.to_here(), True) # type: ignore[attr-defined] @dist_init def test_rref_py_pickle_not_supported(self): - local_rref = RRef(35) + local_rref = RRef(35) # type: ignore[var-annotated] with TemporaryFileName() as fname: - with self.assertRaisesRegex(RuntimeError, "Can not pickle rref in python pickler"): + with self.assertRaisesRegex(RuntimeError, "Can not pickle rref in python pickler"): # type: ignore[attr-defined] torch.save(local_rref, fname) @dist_init def test_remote_throw(self): - rref = rpc.remote(worker_name((self.rank + 1) % self.world_size), + rref = rpc.remote(worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] raise_or_inc, args=(torch.ones(2),)) - with self.assertRaisesRegex(Exception, ".*Expected error.*"): + with self.assertRaisesRegex(Exception, ".*Expected error.*"): # type: ignore[attr-defined] rref.to_here() @dist_init def test_non_cont_tensors(self): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # Create a non-contiguous tensor. t = torch.rand(5, 5) t_view = t.narrow(1, 2, 2) - self.assertFalse(t_view.is_contiguous()) + self.assertFalse(t_view.is_contiguous()) # type: ignore[attr-defined] t_cont = t_view.contiguous() - self.assertTrue(t_cont.is_contiguous()) - self.assertEqual(t_view, t_cont) + self.assertTrue(t_cont.is_contiguous()) # type: ignore[attr-defined] + self.assertEqual(t_view, t_cont) # type: ignore[attr-defined] # Send non-cont tensor over RPC. - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] t_ret = rpc.rpc_sync(worker_name(next_rank), non_cont_test, args=(t_view, t_cont)) # Verify the returned tensor. - self.assertEqual(t_view, t_ret) - self.assertFalse(t_ret.is_contiguous()) + self.assertEqual(t_view, t_ret) # type: ignore[attr-defined] + self.assertFalse(t_ret.is_contiguous()) # type: ignore[attr-defined] @dist_init def test_callback_simple(self): - set_by_cb = concurrent.futures.Future() - n = self.rank + 1 + set_by_cb = concurrent.futures.Future() # type: ignore[var-annotated] + n = self.rank + 1 # type: ignore[attr-defined] def callback(fut): ret = fut.wait() - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] set_by_cb.set_result(ret.clone() + 1) fut = rpc.rpc_async( @@ -3257,14 +3257,14 @@ def callback(fut): fut.then(callback) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) - self.assertEqual(set_by_cb.result(), torch.ones(n, n) * 2 + 1) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] + self.assertEqual(set_by_cb.result(), torch.ones(n, n) * 2 + 1) # type: ignore[attr-defined] + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_callback_wrong_arg_num(self): - set_by_cb = concurrent.futures.Future() - n = self.rank + 1 + set_by_cb = concurrent.futures.Future() # type: ignore[var-annotated] + n = self.rank + 1 # type: ignore[attr-defined] fut = rpc.rpc_async( worker_name(n % self.world_size), @@ -3274,9 +3274,9 @@ def test_callback_wrong_arg_num(self): cb_fut = fut.then(my_function) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "my\\_function\\(\\) missing 2 required positional arguments" ): @@ -3284,12 +3284,12 @@ def test_callback_wrong_arg_num(self): @dist_init def test_callback_wrong_arg_type(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut0 = rpc.rpc_async(dst, torch.add, args=(torch.ones(2, 2), 1)) fut1 = fut0.then(lambda x: x + 1) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "unsupported operand type\\(s\\) for \\+" ): @@ -3298,11 +3298,11 @@ def test_callback_wrong_arg_type(self): @dist_init def test_callback_multi(self): num_cbs = 10 - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] def callback(idx, fut): ret = fut.wait() - self.assertEqual(ret, torch.ones(n, n) * 2) + self.assertEqual(ret, torch.ones(n, n) * 2) # type: ignore[attr-defined] return ret + idx fut = rpc.rpc_async( @@ -3315,19 +3315,19 @@ def callback(idx, fut): for idx in range(num_cbs): cb_futs.append(fut.then(partial(callback, idx))) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] for idx in range(num_cbs): - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] cb_futs[idx].wait(), torch.ones(n, n) * 2 + idx ) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_callback_chain(self): - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] dst = worker_name(n % self.world_size) def callback(fut): @@ -3343,23 +3343,23 @@ def callback(fut): for _ in range(num_cbs): fut = fut.then(callback) - self.assertEqual(fut.wait(), torch.ones(n, n) + 1 + num_cbs) + self.assertEqual(fut.wait(), torch.ones(n, n) + 1 + num_cbs) # type: ignore[attr-defined] @dist_init def test_callback_in_rpc(self): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] ret = rpc.rpc_sync( dst1, add_use_future_cb, args=(dst2, torch.ones(2, 2), 1, 2) ) - self.assertEqual(ret, torch.ones(2, 2) + 1 + 2) + self.assertEqual(ret, torch.ones(2, 2) + 1 + 2) # type: ignore[attr-defined] @dist_init def test_callback_with_ret(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] def callback(fut0): fut2 = rpc.rpc_async( @@ -3376,25 +3376,25 @@ def callback(fut0): args=(torch.ones(2, 2), 1) ).then(callback) - self.assertEqual(fut3.wait(), torch.ones(2, 2) + 3) + self.assertEqual(fut3.wait(), torch.ones(2, 2) + 3) # type: ignore[attr-defined] @dist_init def test_callback_with_error(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] def callback(fut0): - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] fut0.wait() raise RuntimeError("Another expected error") fut1 = rpc.rpc_async(dst, raise_func).then(callback) - with self.assertRaisesRegex(RuntimeError, "Another expected error"): + with self.assertRaisesRegex(RuntimeError, "Another expected error"): # type: ignore[attr-defined] fut1.wait() @dist_init def test_callback_none(self): - dst = worker_name((self.rank + 1) % self.world_size) - with self.assertRaisesRegex( + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] TypeError, "incompatible function arguments." ): @@ -3403,7 +3403,7 @@ def test_callback_none(self): @dist_init def test_add_done_callback(self): set_by_cb = False - n = self.rank + 1 + n = self.rank + 1 # type: ignore[attr-defined] def callback(fut): nonlocal set_by_cb @@ -3419,23 +3419,23 @@ def callback(fut): fut.add_done_callback(callback) fut_then = fut.then(lambda _: True) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] # We have no guarantee that the add_done_callback fn will execute before the test finishes. # Adding a 'then' callback that runs afterwards to guarantee we wait for the first callback fut_then.wait() - self.assertTrue(set_by_cb) - self.assertEqual(fut.wait(), torch.ones(n, n) * 2) + self.assertTrue(set_by_cb) # type: ignore[attr-defined] + self.assertEqual(fut.wait(), torch.ones(n, n) * 2) # type: ignore[attr-defined] @dist_init def test_mark_future_twice(self): fut = rpc.rpc_async( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] torch.add, args=(torch.zeros(2, 2), 1) ) - self.assertEqual(fut.wait(), torch.zeros(2, 2) + 1) - with self.assertRaisesRegex( + self.assertEqual(fut.wait(), torch.zeros(2, 2) + 1) # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Future can only be marked completed once" ): @@ -3443,47 +3443,47 @@ def test_mark_future_twice(self): @dist_init def test_pickle_future(self): - fut = torch.futures.Future() + fut = torch.futures.Future() # type: ignore[var-annotated] errMsg = "Can not pickle torch.futures.Future" - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] with TemporaryFileName() as fname: - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] rpc.rpc_sync(dst, fail_on_fut, args=(fut,)) with TemporaryFileName() as fname: - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] rpc.rpc_async(dst, fail_on_fut, args=(fut,)) with TemporaryFileName() as fname: - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] rpc.remote(dst, fail_on_fut, args=(fut,)) @dist_init def test_future_done(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut = rpc.rpc_async(dst, torch.add, args=(torch.zeros(2), 1)) fut.wait() - self.assertTrue(fut.done()) + self.assertTrue(fut.done()) # type: ignore[attr-defined] @dist_init def test_future_done_exception(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] fut = rpc.rpc_async(dst, raise_func) - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] fut.wait() - self.assertTrue(fut.done()) + self.assertTrue(fut.done()) # type: ignore[attr-defined] def _test_future_cb(self, func): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] ret = rpc.rpc_sync( dst1, func, args=(dst2, torch.ones(2, 2), 1, 2) ) - self.assertEqual(ret, torch.ones(2, 2) + 1 + 2) + self.assertEqual(ret, torch.ones(2, 2) + 1 + 2) # type: ignore[attr-defined] @dist_init def test_future_in_rpc(self): @@ -3502,9 +3502,9 @@ def _run_func_in_mode(self, to, fn, mode, args=None, kwargs=None): return rpc.remote(to, fn, args=args, kwargs=kwargs).to_here() def _test_async_function_raise(self, mode): - with self.assertRaisesRegex(RuntimeError, "Expected error"): + with self.assertRaisesRegex(RuntimeError, "Expected error"): # type: ignore[attr-defined] self._run_func_in_mode( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] async_raise_func, mode ) @@ -3526,9 +3526,9 @@ def _test_async_function_wrong_return_type(self, mode): "Functions decorated with @rpc\\.async_function must return a " "torch\\.futures\\.Future object," ) - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] self._run_func_in_mode( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] async_wrong_type, mode ) @@ -3547,19 +3547,19 @@ def test_async_function_wrong_return_type_remote(self): @dist_init def test_async_function_simple(self): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] ret = rpc.rpc_sync(dst1, async_add, args=(dst2, torch.ones(2, 2), 1)) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] def _test_async_function(self, fn, mode=RPCExecMode.SYNC): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] args = (dst2, torch.ones(2, 2), 1, 2) ret = self._run_func_in_mode(dst1, fn, mode, args=args) - self.assertEqual(ret, torch.ones(2, 2) + 3) + self.assertEqual(ret, torch.ones(2, 2) + 3) # type: ignore[attr-defined] @dist_init def test_async_function_with_future_ctor(self): @@ -3611,8 +3611,8 @@ def test_async_class_method_remote(self): ) def _test_test_async_class_rref_proxy(self, mode=RPCExecMode.SYNC): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] rref = rpc.remote(dst1, AsyncExecutionClass) x = torch.ones(2, 2) @@ -3630,7 +3630,7 @@ def _test_test_async_class_rref_proxy(self, mode=RPCExecMode.SYNC): ret += rref.remote().class_async_add(dst2, x, x, y).to_here() ret += rref.remote().bound_async_add(dst2, x, x, y).to_here() - self.assertEqual(ret, 3 * 4 * x) + self.assertEqual(ret, 3 * 4 * x) # type: ignore[attr-defined] @dist_init def test_async_class_rref_proxy(self): @@ -3645,14 +3645,14 @@ def test_async_class_rref_proxy_remote(self): self._test_test_async_class_rref_proxy(mode=RPCExecMode.REMOTE) def _test_async_function_multi(self, fn, mode=RPCExecMode.SYNC): - dst1 = worker_name((self.rank + 1) % self.world_size) - dst2 = worker_name((self.rank + 2) % self.world_size) + dst1 = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst2 = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] num = 20 step = 3 args = (dst2, torch.ones(2, 2), num, step) ret = self._run_func_in_mode(dst1, fn, mode, args=args) - self.assertEqual(ret, torch.ones(2, 2) + num * step) + self.assertEqual(ret, torch.ones(2, 2) + num * step) # type: ignore[attr-defined] @dist_init def test_async_function_multi_chained(self): @@ -3691,12 +3691,12 @@ def test_async_function_multi_fanout_remote(self): ) def _test_return_future(self, mode): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Can not pickle torch.futures.Future" ): self._run_func_in_mode( - worker_name((self.rank + 1) % self.world_size), + worker_name((self.rank + 1) % self.world_size), # type: ignore[attr-defined] return_future, mode ) @@ -3717,20 +3717,20 @@ def test_return_future_remote(self): def test_rref_timeout(self): # This test is similar to ones in FaultyProcessGroupTest, but is meant to be # run with other backends besides ProcessGroup. - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) # 10 ms timeout rref = rpc.remote(dst_worker, my_sleep_func, args=(2, ), timeout=0.01) # Future corresponding to the remote creation should time out. expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rref._get_future().wait() # Call to ensure pending callbacks are run. wait_until_pending_futures_and_users_flushed() - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rref.to_here() wait_until_owners_and_forks_on_rank(1, 1, rank=1) @@ -3744,22 +3744,22 @@ def test_init_pg_then_rpc(self): dist.init_process_group( backend="gloo", init_method=self.init_method, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) # Test RPC. - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] ret = rpc.rpc_sync(worker_name(next_rank), torch.add, args=(torch.ones(2, 2), 1)) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] # Test PG dist.barrier() @@ -3773,9 +3773,9 @@ def test_init_pg_then_rpc(self): ) def test_init_rpc_then_pg(self): rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -3783,14 +3783,14 @@ def test_init_rpc_then_pg(self): dist.init_process_group( backend="gloo", init_method=self.init_method, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, ) # Test RPC. - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] ret = rpc.rpc_sync(worker_name(next_rank), torch.add, args=(torch.ones(2, 2), 1)) - self.assertEqual(ret, torch.ones(2, 2) + 1) + self.assertEqual(ret, torch.ones(2, 2) + 1) # type: ignore[attr-defined] # Test PG dist.barrier() @@ -3800,23 +3800,23 @@ def test_init_rpc_then_pg(self): @dist_init def test_wait_all_with_exception(self): futs = [] - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] for _ in range(10): futs.append(rpc.rpc_async(dst, raise_func)) - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] ret = torch.futures.wait_all(futs) @dist_init def test_wait_all_with_partial_exception(self): futs = [] - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] for _ in range(10): futs.append(rpc.rpc_async(dst, torch.add, args=(torch.ones(2), 1))) futs.append(rpc.rpc_async(dst, raise_func)) - with self.assertRaisesRegex(ValueError, "Expected error"): + with self.assertRaisesRegex(ValueError, "Expected error"): # type: ignore[attr-defined] ret = torch.futures.wait_all(futs) @dist_init(setup_rpc=False) @@ -3825,12 +3825,12 @@ def test_wait_all_with_partial_exception(self): "Test does not work with TCP init, see https://github.com/pytorch/pytorch/issues/46491", ) def test_init_rpc_twice(self): - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) @@ -3841,39 +3841,39 @@ def test_init_rpc_twice(self): # Ensure rpc initialization works again. rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options, ) # Verify RPCs work after re-init. - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] rpc.rpc_sync(dst, torch.add, args=(torch.ones(2, 2), 1)) rpc.rpc_sync(dst, foo_add, args=()) rpc.shutdown() def test_wrong_types(self): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] TypeError, "Argument backend must be a member of BackendType", ): rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, backend="TENSORPIPE", ) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] TypeError, "Argument rpc_backend_options must be an instance of RpcBackendOptions", ): rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, backend=self.rpc_backend, rpc_backend_options={"init_method": self.init_method} @@ -3885,10 +3885,10 @@ def test_cannot_infer_backend_from_options(self): # agents' option classes. rpc_backend_options = FooBackendOptions(self.init_method) - with self.assertRaisesRegex(TypeError, "Could not infer backend for options"): + with self.assertRaisesRegex(TypeError, "Could not infer backend for options"): # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, # Do _not_ pass backend. rpc_backend_options=rpc_backend_options, @@ -3896,39 +3896,39 @@ def test_cannot_infer_backend_from_options(self): @dist_init def test_owner_rref_backward(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] t1 = torch.rand(10, 10, requires_grad=True) - rref = rpc.RRef(t1.sum() + t1.sum()) - rref.backward() + rref = rpc.RRef(t1.sum() + t1.sum()) # type: ignore[var-annotated] + rref.backward() # type: ignore[attr-defined] expected_grad = torch.ones_like(t1) * 2 - self.assertEqual(expected_grad, t1.grad) + self.assertEqual(expected_grad, t1.grad) # type: ignore[attr-defined] with dist_autograd.context() as context_id: t2 = rpc.rpc_sync(dst, torch.add, args=(t1, t1)) rref = rpc.RRef(t2.sum()) - rref.backward(context_id) - self.assertEqual(expected_grad, dist_autograd.get_gradients(context_id)[t1]) + rref.backward(context_id) # type: ignore[attr-defined] + self.assertEqual(expected_grad, dist_autograd.get_gradients(context_id)[t1]) # type: ignore[attr-defined] # Double backward. with dist_autograd.context() as context_id: t2 = rpc.rpc_sync(dst, torch.add, args=(t1, t1)) rref = rpc.RRef(t2.sum()) - rref.backward(context_id, retain_graph=True) - rref.backward(context_id) - self.assertEqual(expected_grad * 2, dist_autograd.get_gradients(context_id)[t1]) + rref.backward(context_id, retain_graph=True) # type: ignore[attr-defined] + rref.backward(context_id) # type: ignore[attr-defined] + self.assertEqual(expected_grad * 2, dist_autograd.get_gradients(context_id)[t1]) # type: ignore[attr-defined] # Test errors. - with self.assertRaisesRegex(RuntimeError, "tensors does not require grad and does not have a grad_fn"): - rpc.RRef(torch.rand(10)).backward() + with self.assertRaisesRegex(RuntimeError, "tensors does not require grad and does not have a grad_fn"): # type: ignore[attr-defined] + rpc.RRef(torch.rand(10)).backward() # type: ignore[attr-defined] - with self.assertRaisesRegex(RuntimeError, "grad can be implicitly created only for scalar outputs"): - rpc.RRef(torch.rand(10, requires_grad=True)).backward() + with self.assertRaisesRegex(RuntimeError, "grad can be implicitly created only for scalar outputs"): # type: ignore[attr-defined] + rpc.RRef(torch.rand(10, requires_grad=True)).backward() # type: ignore[attr-defined] - with self.assertRaisesRegex(RuntimeError, "Could not find autograd context with id: 100"): - rpc.RRef(torch.rand(10, requires_grad=True).sum()).backward(100) + with self.assertRaisesRegex(RuntimeError, "Could not find autograd context with id: 100"): # type: ignore[attr-defined] + rpc.RRef(torch.rand(10, requires_grad=True).sum()).backward(100) # type: ignore[attr-defined] - with self.assertRaisesRegex(RuntimeError, "RRef should contain a tensor for .backward()"): - rpc.RRef("foo").backward() + with self.assertRaisesRegex(RuntimeError, "RRef should contain a tensor for .backward()"): # type: ignore[attr-defined] + rpc.RRef("foo").backward() # type: ignore[attr-defined] @staticmethod def _sum(x): @@ -3940,20 +3940,20 @@ def _identity(x): @dist_init def test_user_rref_backward(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] t = torch.rand(10, requires_grad=True) with dist_autograd.context() as context_id: rref = rpc.remote(dst, RpcTest._sum, args=(t,)) rref.backward(context_id, retain_graph=True) rref.backward(context_id) - self.assertEqual(torch.ones_like(t) * 2, dist_autograd.get_gradients(context_id)[t]) + self.assertEqual(torch.ones_like(t) * 2, dist_autograd.get_gradients(context_id)[t]) # type: ignore[attr-defined] with dist_autograd.context() as context_id: rref = rpc.remote(dst, RpcTest._identity, args=("foo",)) - with self.assertRaisesRegex(RuntimeError, "RRef should contain a tensor for .backward()"): + with self.assertRaisesRegex(RuntimeError, "RRef should contain a tensor for .backward()"): # type: ignore[attr-defined] rref.backward(context_id) - with self.assertRaisesRegex(RuntimeError, "User RRefs require 'dist_autograd_ctx_id' to be specified"): + with self.assertRaisesRegex(RuntimeError, "User RRefs require 'dist_autograd_ctx_id' to be specified"): # type: ignore[attr-defined] rref.backward() class CudaRpcTest(RpcAgentTestFixture): @@ -3961,11 +3961,11 @@ class CudaRpcTest(RpcAgentTestFixture): @skip_if_lt_x_gpu(2) @dist_init def test_profiler_remote_cuda(self): - if self.rank != 1: + if self.rank != 1: # type: ignore[attr-defined] return - dst_cuda_0 = (self.rank + 1) % self.world_size - dst_cuda_1 = (self.rank + 2) % self.world_size + dst_cuda_0 = (self.rank + 1) % self.world_size # type: ignore[attr-defined] + dst_cuda_1 = (self.rank + 2) % self.world_size # type: ignore[attr-defined] dst_worker_cuda_0 = worker_name(dst_cuda_0) dst_worker_cuda_1 = worker_name(dst_cuda_1) @@ -3981,28 +3981,28 @@ def get_name(event): function_events = p.function_events for event in function_events: if event.is_async: - self.assertEqual(0, event.cuda_time_total) - self.assertEqual([], event.kernels) - self.assertEqual(0, event.cuda_time) + self.assertEqual(0, event.cuda_time_total) # type: ignore[attr-defined] + self.assertEqual([], event.kernels) # type: ignore[attr-defined] + self.assertEqual(0, event.cuda_time) # type: ignore[attr-defined] else: if event.node_id == 1: continue - self.assertTrue(event.node_id in [dst_cuda_0, dst_cuda_1]) + self.assertTrue(event.node_id in [dst_cuda_0, dst_cuda_1]) # type: ignore[attr-defined] if get_name(event) in EXPECTED_REMOTE_EVENTS: - self.assertGreater(event.cuda_time_total, 0) - self.assertEqual(1, len(event.kernels)) + self.assertGreater(event.cuda_time_total, 0) # type: ignore[attr-defined] + self.assertEqual(1, len(event.kernels)) # type: ignore[attr-defined] kernel = event.kernels[0] if event.node_id == dst_cuda_0: - self.assertEqual(kernel.device, 0) + self.assertEqual(kernel.device, 0) # type: ignore[attr-defined] if event.node_id == dst_cuda_1: - self.assertEqual(kernel.device, 1) - self.assertGreater(event.cuda_time, 0) + self.assertEqual(kernel.device, 1) # type: ignore[attr-defined] + self.assertGreater(event.cuda_time, 0) # type: ignore[attr-defined] # Validate that EXPECTED_REMOTE_EVENTS is a subset of remotely profiled # events. remote_events = [event for event in function_events if event.is_remote] remote_event_names = [get_name(event) for event in remote_events if get_name(event) in EXPECTED_REMOTE_EVENTS] - self.assertEqual(set(remote_event_names), set(EXPECTED_REMOTE_EVENTS)) + self.assertEqual(set(remote_event_names), set(EXPECTED_REMOTE_EVENTS)) # type: ignore[attr-defined] class ProcessGroupAgentRpcTest(RpcAgentTestFixture): @@ -4011,51 +4011,51 @@ def test_mismatched_type_for_options(self): # ProcessGroupRpcBackendOptions. rpc_backend_options = FooBackendOptions(self.init_method) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] TypeError, "`rpc_backend_options` must be a `ProcessGroupRpcBackendOptions`" ): rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, - backend=rpc.BackendType.PROCESS_GROUP, + backend=rpc.BackendType.PROCESS_GROUP, # type: ignore[attr-defined] rpc_backend_options=rpc_backend_options, ) def test_infer_backend_from_options(self): - rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( + rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( # type: ignore[call-arg] init_method=self.init_method ) - with self.assertLogs("torch.distributed.rpc", logging.WARNING) as cm: + with self.assertLogs("torch.distributed.rpc", logging.WARNING) as cm: # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, # Do _not_ pass backend. rpc_backend_options=rpc_backend_options, ) - self.assertIn( + self.assertIn( # type: ignore[attr-defined] "To silence this warning pass `backend=BackendType.PROCESS_GROUP` explicitly.", "\n".join(cm.output), ) - self.assertIsInstance(rpc.api._get_current_rpc_agent(), rpc.ProcessGroupAgent) + self.assertIsInstance(rpc.api._get_current_rpc_agent(), rpc.ProcessGroupAgent) # type: ignore[attr-defined] def test_logs_deprecation_warning(self): with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, - backend=rpc.BackendType.PROCESS_GROUP, + backend=rpc.BackendType.PROCESS_GROUP, # type: ignore[attr-defined] rpc_backend_options=self.rpc_backend_options, ) - self.assertEqual(1, len(w)) - self.assertIn( + self.assertEqual(1, len(w)) # type: ignore[attr-defined] + self.assertIn( # type: ignore[attr-defined] "It is recommended to migrate to the TENSORPIPE backend.", str(w[-1].message), ) @@ -4064,32 +4064,32 @@ def test_logs_deprecation_warning(self): def test_single_threaded_rref_owner(self): # We need a process group in order to perform a barrier at the end. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # This test aims to verify if the server can handle all internal RPC # messages using just one thread. caller_rank = 0 callee_rank = 1 - rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( + rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( # type: ignore[call-arg] init_method=self.rpc_backend_options.init_method, num_send_recv_threads=1 - ) if self.rank == callee_rank else self.rpc_backend_options + ) if self.rank == callee_rank else self.rpc_backend_options # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) - if self.rank == caller_rank: + if self.rank == caller_rank: # type: ignore[attr-defined] dst = worker_name(callee_rank) rrefs = [] # makes sure there is no existing OwnerRRefs on dst info = rpc.rpc_sync(dst, get_rref_debug_info) - self.assertEqual(0, int(info["num_owner_rrefs"])) + self.assertEqual(0, int(info["num_owner_rrefs"])) # type: ignore[attr-defined] # creating RRefs on dst for i in range(20): @@ -4106,12 +4106,12 @@ def test_single_threaded_rref_owner(self): # wait for results and check for i in range(len(futs)): - self.assertEqual(2 * (torch.zeros(2, 2) + i), futs[i].wait()) + self.assertEqual(2 * (torch.zeros(2, 2) + i), futs[i].wait()) # type: ignore[attr-defined] # check we created the expected number of RRefs on dst info = rpc.rpc_sync(dst, get_rref_debug_info) num_owner_rrefs = int(info["num_owner_rrefs"]) - self.assertEqual(len(futs), num_owner_rrefs) + self.assertEqual(len(futs), num_owner_rrefs) # type: ignore[attr-defined] # trigger RRef deletion del futs @@ -4130,32 +4130,32 @@ def test_single_threaded_rref_owner(self): def test_single_threaded_rref_to_here(self): # We need a process group in order to perform a barrier at the end. - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] # This test aims to verify if the server can handle all internal RPC # messages using just one thread. caller_rank = 0 callee_rank = 1 - rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( + rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( # type: ignore[call-arg] init_method=self.rpc_backend_options.init_method, num_send_recv_threads=1 - ) if self.rank == callee_rank else self.rpc_backend_options + ) if self.rank == callee_rank else self.rpc_backend_options # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) - if self.rank == caller_rank: + if self.rank == caller_rank: # type: ignore[attr-defined] dst = worker_name(callee_rank) rrefs = [] # makes sure there is no existing OwnerRRefs on dst info = rpc.rpc_sync(dst, get_rref_debug_info) - self.assertEqual(0, int(info["num_owner_rrefs"])) + self.assertEqual(0, int(info["num_owner_rrefs"])) # type: ignore[attr-defined] # creating RRefs on dst for i in range(20): @@ -4165,12 +4165,12 @@ def test_single_threaded_rref_to_here(self): # wait for results and check for i in range(len(rrefs)): - self.assertEqual(torch.zeros(2, 2) + i, rrefs[i].to_here()) + self.assertEqual(torch.zeros(2, 2) + i, rrefs[i].to_here()) # type: ignore[attr-defined] # check we created the expected number of RRefs on dst info = rpc.rpc_sync(dst, get_rref_debug_info) num_owner_rrefs = int(info["num_owner_rrefs"]) - self.assertEqual(len(rrefs), num_owner_rrefs) + self.assertEqual(len(rrefs), num_owner_rrefs) # type: ignore[attr-defined] # trigger RRef deletion del rrefs @@ -4189,58 +4189,58 @@ def test_single_threaded_rref_to_here(self): @dist_init def test_process_group_debug_info(self): rpc.enable_gil_profiling(True) - initialize_pg(self.file_init_method, self.rank, self.world_size) + initialize_pg(self.file_init_method, self.rank, self.world_size) # type: ignore[attr-defined] NUM_THREAD = self.rpc_backend_options.num_send_recv_threads info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertIn("agent.num_pending_requests", info) - self.assertIn("agent.thread_pool_size", info) - self.assertIn("agent.num_idle_threads", info) - self.assertIn("agent.gil_average_wait_time_us", info) - self.assertEqual(int(info["agent.num_pending_requests"]), 0) - self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) - self.assertEqual(int(info["agent.num_idle_threads"]), NUM_THREAD) + self.assertIn("agent.num_pending_requests", info) # type: ignore[attr-defined] + self.assertIn("agent.thread_pool_size", info) # type: ignore[attr-defined] + self.assertIn("agent.num_idle_threads", info) # type: ignore[attr-defined] + self.assertIn("agent.gil_average_wait_time_us", info) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.num_pending_requests"]), 0) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.num_idle_threads"]), NUM_THREAD) # type: ignore[attr-defined] # for the above check, add a barrier to ensure that another worker # cannot send a request before we check num_idle_threads, since we'd # use up an idle thread if we start processing that request. dist.barrier() - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] fut = rpc.rpc_async( worker_name(dst_rank), set_and_check_done, args=(dst_rank,) ) # blocks until the request arrives - self.assertEqual(self.rank, VALUE_FUTURE.result()) + self.assertEqual(self.rank, VALUE_FUTURE.result()) # type: ignore[attr-defined] info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertIn("agent.num_pending_requests", info) - self.assertIn("agent.thread_pool_size", info) - self.assertIn("agent.num_idle_threads", info) - self.assertIn("agent.gil_average_wait_time_us", info) - self.assertGreaterEqual(float(info["agent.gil_average_wait_time_us"]), 0) - self.assertEqual(int(info["agent.num_pending_requests"]), 1) - self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) + self.assertIn("agent.num_pending_requests", info) # type: ignore[attr-defined] + self.assertIn("agent.thread_pool_size", info) # type: ignore[attr-defined] + self.assertIn("agent.num_idle_threads", info) # type: ignore[attr-defined] + self.assertIn("agent.gil_average_wait_time_us", info) # type: ignore[attr-defined] + self.assertGreaterEqual(float(info["agent.gil_average_wait_time_us"]), 0) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.num_pending_requests"]), 1) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) # type: ignore[attr-defined] num_idle_threads = int(info["agent.num_idle_threads"]) # as we cannot know for sure whether the send thread has returned, there # might be either 1 or 2 busy threads - self.assertTrue(num_idle_threads in [NUM_THREAD - 1, NUM_THREAD - 2]) + self.assertTrue(num_idle_threads in [NUM_THREAD - 1, NUM_THREAD - 2]) # type: ignore[attr-defined] # add a barrier to make sure the request is not finished before checking # num_pending_requests dist.barrier() - DONE_FUTURE.set_result(self.rank) - self.assertEqual(dst_rank, fut.wait()) + DONE_FUTURE.set_result(self.rank) # type: ignore[attr-defined] + self.assertEqual(dst_rank, fut.wait()) # type: ignore[attr-defined] # add a barrier to make sure the dst_rank has finished processing the # request dist.barrier() info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertIn("agent.num_pending_requests", info) - self.assertIn("agent.thread_pool_size", info) - self.assertIn("agent.num_idle_threads", info) - self.assertEqual(int(info["agent.num_pending_requests"]), 0) - self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) + self.assertIn("agent.num_pending_requests", info) # type: ignore[attr-defined] + self.assertIn("agent.thread_pool_size", info) # type: ignore[attr-defined] + self.assertIn("agent.num_idle_threads", info) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.num_pending_requests"]), 0) # type: ignore[attr-defined] + self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREAD) # type: ignore[attr-defined] for retry in range(3): # even if the future has completed, there is no guarantee that @@ -4251,7 +4251,7 @@ def test_process_group_debug_info(self): if int(info["agent.num_idle_threads"]) == NUM_THREAD: break time.sleep(0.1) - self.assertEqual(int(info["agent.num_idle_threads"]), NUM_THREAD) + self.assertEqual(int(info["agent.num_idle_threads"]), NUM_THREAD) # type: ignore[attr-defined] # add a barrier to make sure SHUTDOWN message is not sent dist.barrier() @@ -4259,20 +4259,20 @@ def test_process_group_debug_info(self): @dist_init(setup_rpc=False) def test_set_and_get_num_send_recv_threads(self): NUM_THREADS = 27 - rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( + rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( # type: ignore[call-arg] init_method=self.rpc_backend_options.init_method, num_send_recv_threads=NUM_THREADS ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREADS) + self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREADS) # type: ignore[attr-defined] rpc.shutdown() @dist_init(setup_rpc=False) @@ -4284,15 +4284,15 @@ def test_process_group_set_default_timeout(self): rpc_timeout=timeout ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) default_timeout = rpc.get_rpc_timeout() - self.assertEqual(default_timeout, timeout) + self.assertEqual(default_timeout, timeout) # type: ignore[attr-defined] rpc.shutdown() @dist_init(setup_rpc=False) @@ -4301,11 +4301,11 @@ def test_process_group_options_throw_on_timedelta_timeout(self): timeout = timedelta() # Ensure that constructing ProcessGroupRpcBackendOptions with timedelta fails - with self.assertRaisesRegex(TypeError, "incompatible constructor arguments"): + with self.assertRaisesRegex(TypeError, "incompatible constructor arguments"): # type: ignore[attr-defined] rpc_backend_options = rpc.ProcessGroupRpcBackendOptions( init_method=self.rpc_backend_options.init_method, num_send_recv_threads=self.rpc_backend_options.num_send_recv_threads, - rpc_timeout=timeout, + rpc_timeout=timeout, # type: ignore[arg-type] ) class ProcessGroupAgentCudaRpcTest(RpcAgentTestFixture): @@ -4313,34 +4313,34 @@ class ProcessGroupAgentCudaRpcTest(RpcAgentTestFixture): @skip_if_lt_x_gpu(2) @dist_init def test_cuda(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] t1 = torch.rand(3, 3).cuda(0) t2 = torch.rand(3, 3).cuda(1) t3 = torch.rand(3, 3) # cuda tensors as args fail. - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] rpc.rpc_sync(dst, torch.add, args=(t1, t2)) # mix of cpu and cuda tensors as args fail. - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] rpc.rpc_sync(dst, torch.add, args=(t1, t3)) # gpu tensor list as args fails. - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] rpc.rpc_sync(dst, RpcTest._gpu_tensor_list_arg, args=([t1, t2])) # cuda tensors as return values fail. - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] rpc.rpc_sync(dst, RpcTest._return_gpu_tensor, args=()) # cuda tensors as a list of return value fails - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] rpc.rpc_sync(dst, RpcTest._return_gpu_tensor_list, args=()) # Sending to self should fail too. - with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): - rpc.rpc_sync(worker_name(self.rank), torch.add, args=(t1, t2)) + with self.assertRaisesRegex(RuntimeError, "RPC backend only supports CPU tensors.*Found tensor on device: cuda:0"): # type: ignore[attr-defined] + rpc.rpc_sync(worker_name(self.rank), torch.add, args=(t1, t2)) # type: ignore[attr-defined] class FaultyAgentRpcTest(RpcAgentTestFixture): @@ -4348,47 +4348,47 @@ class FaultyAgentRpcTest(RpcAgentTestFixture): # faulty_rpc_agent_test_fixture.py for the list of retryable messages. @dist_init(messages_to_delay={}) def test_check_failed_messages(self): - if self.rank == 0: - dst_worker_b = worker_name((self.rank + 1) % self.world_size) - dst_worker_c = worker_name((self.rank + 2) % self.world_size) + if self.rank == 0: # type: ignore[attr-defined] + dst_worker_b = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + dst_worker_c = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] # Worker0 sends RPC to Worker1 and creates an RRef there rref = rpc.remote(dst_worker_b, torch.add, args=(torch.ones(2, 2), torch.ones(2, 2))) # Worker0 sends an RPC to Worker2 with the RRef as an arg rpc.remote(dst_worker_c, add_rref_to_value, args=(rref, torch.ones(2, 2))) # check if the output is as expected - self.assertEqual(rref.to_here(), torch.add(torch.ones(2, 2), torch.ones(2, 2))) + self.assertEqual(rref.to_here(), torch.add(torch.ones(2, 2), torch.ones(2, 2))) # type: ignore[attr-defined] # explicitly delete all User RRefs _delete_all_user_and_unforked_owner_rrefs() @dist_init def test_verify_backend_options(self): - self.assertEqual(self.rpc_backend, rpc.backend_registry.BackendType.FAULTY_PROCESS_GROUP) - self.assertEqual(self.rpc_backend_options.num_send_recv_threads, 8) - self.assertEqual(self.rpc_backend_options.num_fail_sends, 3) - self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 4) - self.assertEqual(len(self.rpc_backend_options.messages_to_delay), 2) - self.assertEqual(self.rpc_backend_options.rpc_timeout, rpc.constants.DEFAULT_RPC_TIMEOUT_SEC) + self.assertEqual(self.rpc_backend, rpc.backend_registry.BackendType.FAULTY_PROCESS_GROUP) # type: ignore[attr-defined] + self.assertEqual(self.rpc_backend_options.num_send_recv_threads, 8) # type: ignore[attr-defined] + self.assertEqual(self.rpc_backend_options.num_fail_sends, 3) # type: ignore[attr-defined] + self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 4) # type: ignore[attr-defined] + self.assertEqual(len(self.rpc_backend_options.messages_to_delay), 2) # type: ignore[attr-defined] + self.assertEqual(self.rpc_backend_options.rpc_timeout, rpc.constants.DEFAULT_RPC_TIMEOUT_SEC) # type: ignore[attr-defined] @dist_init(faulty_messages=["RREF_FORK_REQUEST", "RREF_CHILD_ACCEPT"]) def test_custom_faulty_messages(self): - self.assertEqual( + self.assertEqual( # type: ignore[attr-defined] set(["RREF_FORK_REQUEST", "RREF_CHILD_ACCEPT"]), set(self.rpc_backend_options.messages_to_fail), ) @dist_init(faulty_messages=[]) def test_no_faulty_messages(self): - self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 0) + self.assertEqual(len(self.rpc_backend_options.messages_to_fail), 0) # type: ignore[attr-defined] @dist_init(messages_to_delay={"SCRIPT_CALL": 1.5}) def test_custom_messages_to_delay(self): - self.assertEqual(self.rpc_backend_options.messages_to_delay, {"SCRIPT_CALL": 1.5}) + self.assertEqual(self.rpc_backend_options.messages_to_delay, {"SCRIPT_CALL": 1.5}) # type: ignore[attr-defined] def _test_remote_message_dropped_pickle(self, dst=None): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size + dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) # Since we fail python_remote_call messages synchronously, the future # corresponding to this remote call will be marked with an error when @@ -4397,11 +4397,11 @@ def _test_remote_message_dropped_pickle(self, dst=None): # Call to ensure pending callbacks are run. wait_until_pending_futures_and_users_flushed() # Attempt to fork the RRef should raise an error indicating the rpc.remote timeout. - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rref._serialize() # Test that using RRef as arg over RPC (which forks) results in the same # error - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rpc.rpc_async(dst_worker, add_rref_to_value, args=(rref, 1)) @dist_init(faulty_messages=["PYTHON_REMOTE_CALL"]) @@ -4410,15 +4410,15 @@ def test_remote_message_dropped_pickle(self): @dist_init(faulty_messages=["PYTHON_REMOTE_CALL"]) def test_remote_message_dropped_pickle_to_self(self): - self._test_remote_message_dropped_pickle(self.rank) + self._test_remote_message_dropped_pickle(self.rank) # type: ignore[attr-defined] def _test_remote_message_dropped_timeout(self, func, args, dst=None): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return # test the case where rpc.remote() message creation is completely dropped. - dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size + dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) # Since we fail python_remote_call messages synchronously, the future # corresponding to this remote call will be marked with an error when @@ -4426,7 +4426,7 @@ def _test_remote_message_dropped_timeout(self, func, args, dst=None): rref = rpc.remote(dst_worker, func, args=args) # Call to ensure pending callbacks are run. wait_until_pending_futures_and_users_flushed() - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rref.to_here() # Note: during shutdown, logs will indicate "Could not find OwnerRRef..." # on the owning nodes, this is expected because the OwnerRRef was never @@ -4457,23 +4457,23 @@ def test_udf_remote_message_dropped_timeout_to_self(self): self._test_remote_message_dropped_timeout(func, args, dst=0) def _test_remote_message_delay_timeout(self, func, args, dst=None): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return # Test the case where remote message is eventually processed on the owner, # but the future on the creator times out before the response comes back. - dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size + dst_rank = dst if dst is not None else (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) # 10 ms timeout rref = rpc.remote(dst_worker, func, args=args, timeout=0.001) # Future corresponding to the remote creation should time out. expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rref._get_future().wait() # Call to ensure pending callbacks are run. wait_until_pending_futures_and_users_flushed() # to_here() should now pick up that rpc.remote() creation has failed. - with self.assertRaisesRegex(RuntimeError, "RRef creation"): + with self.assertRaisesRegex(RuntimeError, "RRef creation"): # type: ignore[attr-defined] rref.to_here() # Test the case where rpc.remote() times out, but to_here() has already @@ -4482,10 +4482,10 @@ def _test_remote_message_delay_timeout(self, func, args, dst=None): # calls localValue(), which does not send an RPC and thus does not have # a timeout. This can be supported by allowing future.wait() to # take in an optional timeout (https://github.com/pytorch/pytorch/issues/39280) - if dst_rank != self.rank: + if dst_rank != self.rank: # type: ignore[attr-defined] slow_rref = rpc.remote(dst_worker, func, args=args, timeout=2) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] # to_here() should raise timeout error, since it does not know about the # status of rpc.remote(). slow_rref.to_here(0.001) @@ -4495,7 +4495,7 @@ def _test_remote_message_delay_timeout(self, func, args, dst=None): # thus leading to a timeout. # Therefore, we wait until we get notification that pending owners have # been confirmed before sending out RRefUserDeletes. - if dst_rank != self.rank: + if dst_rank != self.rank: # type: ignore[attr-defined] wait_until_owners_and_forks_on_rank(2, 2, rank=dst_rank) @dist_init(faulty_messages=[], messages_to_delay={"PYTHON_REMOTE_CALL": 2}) @@ -4548,28 +4548,28 @@ def test_remote_message_script_delay_timeout_to_self(self): @dist_init(faulty_messages=[], messages_to_delay={"SCRIPT_RREF_FETCH_CALL": 1}) def test_rref_to_here_timeout(self): - if self.rank != 0: + if self.rank != 0: # type: ignore[attr-defined] return - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = "worker{}".format(dst_rank) rref = rpc.remote( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) ) expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rref.to_here(0.01) rref.to_here() @dist_init(faulty_messages=[]) def test_rpc_builtin_timeout(self): - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(next_rank) expected_error = self.get_timeout_error_regex() # PYTHON_CALL message types which correspond to Python UDF over RPC # by default get a delay (see faulty_rpc_agent_test_fixture) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc.rpc_sync( dst_worker, torch.add, @@ -4580,12 +4580,12 @@ def test_rpc_builtin_timeout(self): fut = rpc.rpc_async( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)), timeout=1 ) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure that the currently set default timeout is large enough such # that RPCs with delays still complete. - self.assertEqual(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC, rpc.get_rpc_timeout()) + self.assertEqual(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC, rpc.get_rpc_timeout()) # type: ignore[attr-defined] fut = rpc.rpc_async( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) ) @@ -4596,7 +4596,7 @@ def test_rpc_builtin_timeout(self): fut = rpc.rpc_async( dst_worker, torch.add, args=(torch.tensor(1), torch.tensor(1)) ) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure run to completion if we specify timeout of 0 @@ -4609,19 +4609,19 @@ def test_rpc_builtin_timeout(self): @dist_init(faulty_messages=[], messages_to_delay={"SCRIPT_CALL": 1.5}) def test_rpc_script_timeout(self): - next_rank = (self.rank + 1) % self.world_size + next_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst_worker = worker_name(next_rank) expected_error = self.get_timeout_error_regex() - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rpc.rpc_sync(dst_worker, my_script_func, args=(torch.tensor(1),), timeout=1) fut = rpc.rpc_async(dst_worker, my_script_func, args=(torch.tensor(1),), timeout=1) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure that the currently set default timeout is large enough such # that RPCs with delays still complete. - self.assertEqual(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC, rpc.get_rpc_timeout()) + self.assertEqual(rpc.constants.DEFAULT_RPC_TIMEOUT_SEC, rpc.get_rpc_timeout()) # type: ignore[attr-defined] fut = rpc.rpc_async( dst_worker, my_script_func, args=(torch.tensor(1),) ) @@ -4632,7 +4632,7 @@ def test_rpc_script_timeout(self): fut = rpc.rpc_async( dst_worker, my_script_func, args=(torch.tensor(1),) ) - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] fut.wait() # Ensure run to completion if we specify timeout of 0 @@ -4651,14 +4651,14 @@ def test_mismatched_type_for_options(self): # TensorPipeRpcBackendOptions. rpc_backend_options = FooBackendOptions(self.init_method) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] TypeError, "`rpc_backend_options` must be a `TensorPipeRpcBackendOptions`" ): rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, - backend=rpc.BackendType.TENSORPIPE, + backend=rpc.BackendType.TENSORPIPE, # type: ignore[attr-defined] rpc_backend_options=rpc_backend_options, ) @@ -4668,14 +4668,14 @@ def test_infer_backend_from_options(self): ) rpc.init_rpc( - name=worker_name(self.rank), - rank=self.rank, + name=worker_name(self.rank), # type: ignore[attr-defined] + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, # Do _not_ pass backend. rpc_backend_options=rpc_backend_options, ) - self.assertIsInstance(rpc.api._get_current_rpc_agent(), rpc.TensorPipeAgent) + self.assertIsInstance(rpc.api._get_current_rpc_agent(), rpc.TensorPipeAgent) # type: ignore[attr-defined] # FIXME Merge this test with the corresponding one in RpcTest. @dist_init(setup_rpc=False) @@ -4686,15 +4686,15 @@ def test_set_and_get_num_worker_threads(self): num_worker_threads=NUM_THREADS ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) info = rpc.api._get_current_rpc_agent().get_debug_info() - self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREADS) + self.assertEqual(int(info["agent.thread_pool_size"]), NUM_THREADS) # type: ignore[attr-defined] rpc.shutdown() # FIXME Merge this test with the corresponding one in RpcTest. @@ -4707,15 +4707,15 @@ def test_tensorpipe_set_default_timeout(self): rpc_timeout=timeout ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc_backend_options, ) default_timeout = rpc.get_rpc_timeout() - self.assertEqual(default_timeout, timeout) + self.assertEqual(default_timeout, timeout) # type: ignore[attr-defined] rpc.shutdown() # FIXME Merge this test with the corresponding one in RpcTest. @@ -4725,30 +4725,30 @@ def test_tensorpipe_options_throw_on_timedelta_timeout(self): timeout = timedelta() # Ensure that constructing TensorPipeRpcBackendOptions with timedelta fails - with self.assertRaisesRegex(TypeError, "incompatible constructor arguments"): + with self.assertRaisesRegex(TypeError, "incompatible constructor arguments"): # type: ignore[attr-defined] rpc_backend_options = rpc.TensorPipeRpcBackendOptions( init_method=self.rpc_backend_options.init_method, num_worker_threads=self.rpc_backend_options.num_worker_threads, - rpc_timeout=timeout, + rpc_timeout=timeout, # type: ignore[arg-type] ) @dist_init def _test_rref_get_type_timeout(self, blocking): # Test where we try to get the type of a RRef from an owner, but RRef # creation is slower than timeout passed into _get_type. - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst = worker_name(dst_rank) slow_rref = rpc.remote(dst, MyClass, args=(torch.ones(2, 2), True)) timeout = 0.5 expected_err = self.get_timeout_error_regex() # Blocking: blocks on inline call if blocking: - with self.assertRaisesRegex(RuntimeError, expected_err): + with self.assertRaisesRegex(RuntimeError, expected_err): # type: ignore[attr-defined] slow_rref._get_type(timeout=timeout, blocking=blocking) # Non-blocking: blocks on wait else: fut = slow_rref._get_type(timeout=timeout, blocking=blocking) - with self.assertRaisesRegex(RuntimeError, expected_err): + with self.assertRaisesRegex(RuntimeError, expected_err): # type: ignore[attr-defined] fut.wait() def test_rref_get_type_timeout_blocking(self): @@ -4759,23 +4759,23 @@ def test_rref_get_type_timeout_non_blocking(self): @dist_init def test_op_with_invalid_args(self): - dst = worker_name((self.rank + 1) % self.world_size) - with self.assertRaisesRegex( + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Overloaded torch operator invoked from Python failed to many any schema" ): rpc.rpc_sync(dst, torch.add, args=()) def _test_rref_proxy_timeout(self, rref_proxy_api): - dst_rank = (self.rank + 1) % self.world_size + dst_rank = (self.rank + 1) % self.world_size # type: ignore[attr-defined] dst = worker_name(dst_rank) rref = rpc.remote(dst, MyClass, args=(torch.ones(2, 2), )) # Ensure RRef is created on remote node. rref.to_here() rref_api = getattr(rref, rref_proxy_api) - self.assertTrue(rref_api is not None, f"Failed to get RRef proxy api: {rref_proxy_api}") + self.assertTrue(rref_api is not None, f"Failed to get RRef proxy api: {rref_proxy_api}") # type: ignore[attr-defined] expected_error = self.get_timeout_error_regex() timeout = 2 - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] result = rref_api(timeout=timeout).my_slow_method(torch.ones(2, 2)) if rref_api == rref.rpc_async: result.wait() @@ -4784,14 +4784,14 @@ def _test_rref_proxy_timeout(self, rref_proxy_api): # Case where rpc.remote() is stuck and exceeds timeout slow_rref = rpc.remote(dst, MyClass, args=(torch.ones(2, 2), True)) - timeout = 0.01 + timeout = 0.01 # type: ignore[assignment] rref_api = getattr(slow_rref, rref_proxy_api) # Note that even when we call rref.rpc_async() in this case, we # time out in future creation, not waiting for future. This is because # rref proxy function calls rref._get_type before returning future, # which blocks on the RRef being created on owner node, until the # specified timeout. - with self.assertRaisesRegex(RuntimeError, expected_error): + with self.assertRaisesRegex(RuntimeError, expected_error): # type: ignore[attr-defined] rref_api(timeout=timeout).my_instance_method(torch.ones(2, 2)) @dist_init @@ -4827,16 +4827,16 @@ def forward(self, x, is_rref=False): class TensorPipeAgentCudaRpcTest(RpcAgentTestFixture): def _test_device_maps(self, options, errMsg="Invalid device_map"): - with self.assertRaisesRegex(ValueError, errMsg): + with self.assertRaisesRegex(ValueError, errMsg): # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - self.assertFalse(rpc.api._is_current_rpc_agent_set()) + self.assertFalse(rpc.api._is_current_rpc_agent_set()) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) def test_device_maps_wrong_worker_name(self): @@ -4847,7 +4847,7 @@ def test_device_maps_wrong_worker_name(self): @skip_if_lt_x_gpu(1) def test_device_maps_invalid_max_local_device(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {torch.cuda.device_count(): 0}) self._test_device_maps( @@ -4858,7 +4858,7 @@ def test_device_maps_invalid_max_local_device(self): @skip_if_lt_x_gpu(1) def test_device_maps_invalid_max_remote_device(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {0: torch.cuda.device_count()}) self._test_device_maps(options) @@ -4866,7 +4866,7 @@ def test_device_maps_invalid_max_remote_device(self): @skip_if_lt_x_gpu(2) def test_device_maps_many_to_one(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {1: 0}) options.set_device_map(dst, {0: 0}) @@ -4874,11 +4874,11 @@ def test_device_maps_many_to_one(self): @skip_if_lt_x_gpu(2) def test_device_maps_one_to_many(self): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {0: 1}) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, "`set_device_map` only supports 1-to-1 mapping" ): options.set_device_map(dst, {0: 0}) @@ -4886,13 +4886,13 @@ def test_device_maps_one_to_many(self): @skip_if_lt_x_gpu(1) def test_device_maps_invalid_min_device(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) - with self.assertRaisesRegex( + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Device index must not be negative" ): options.set_device_map(dst, {-1: 0}) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Device index must not be negative" ): options.set_device_map(dst, {0: -1}) @@ -4907,13 +4907,13 @@ def _gpu_add(x, y): @skip_if_lt_x_gpu(2) def test_device_maps_gpu(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {0: 1, 1: 0}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -4921,10 +4921,10 @@ def test_device_maps_gpu(self): ret = rpc.rpc_sync( dst, TensorPipeAgentCudaRpcTest._gpu_add, - args=(torch.zeros(2).to(0), torch.ones(2).to(0)) + args=(torch.zeros(2).to(0), torch.ones(2).to(0)) # type: ignore[call-overload] ) - self.assertEqual(ret.device, torch.device(1)) - self.assertEqual(ret, (torch.zeros(2) + torch.ones(2)).to(1)) + self.assertEqual(ret.device, torch.device(1)) # type: ignore[attr-defined] + self.assertEqual(ret, (torch.zeros(2) + torch.ones(2)).to(1)) # type: ignore[attr-defined, call-overload] rpc.shutdown() @staticmethod @@ -4942,13 +4942,13 @@ def _test_device_maps_gpu(self, x_from, y_from, z_to, device_map, dst=None, fn=N y_to = device_map[y_from] options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) if dst is None else dst + dst = worker_name((self.rank + 1) % self.world_size) if dst is None else dst # type: ignore[attr-defined] options.set_device_map(dst, device_map) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -4962,8 +4962,8 @@ def _test_device_maps_gpu(self, x_from, y_from, z_to, device_map, dst=None, fn=N z_from = reverse_device_map[z_to] ret_device = "cpu" if ret.device.type == "cpu" else ret.device.index - self.assertEqual(ret_device, z_from) - self.assertEqual(ret, torch.ones(2).to(z_from)) + self.assertEqual(ret_device, z_from) # type: ignore[attr-defined] + self.assertEqual(ret, torch.ones(2).to(z_from)) # type: ignore[attr-defined] rpc.shutdown() @@ -5131,7 +5131,7 @@ def test_device_map_gpu_mixed_self_1(self): y_from=1, z_to=0, device_map={0 : 0, 1 : 1}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5141,7 +5141,7 @@ def test_device_map_gpu_mixed_self_2(self): y_from=1, z_to=1, device_map={0 : 0, 1 : 1}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5151,7 +5151,7 @@ def test_device_map_gpu_mixed_self_3(self): y_from=0, z_to=0, device_map={0 : 0, 1 : 1}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5161,7 +5161,7 @@ def test_device_map_gpu_mixed_self_4(self): y_from=0, z_to=1, device_map={0 : 0, 1 : 1}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5171,7 +5171,7 @@ def test_device_map_gpu_mixed_self_5(self): y_from=1, z_to=0, device_map={0 : 1, 1 : 0}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5181,7 +5181,7 @@ def test_device_map_gpu_mixed_self_6(self): y_from=1, z_to=1, device_map={0 : 1, 1 : 0}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5191,7 +5191,7 @@ def test_device_map_gpu_mixed_self_7(self): y_from=0, z_to=0, device_map={0 : 1, 1 : 0}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @skip_if_lt_x_gpu(2) @@ -5201,7 +5201,7 @@ def test_device_map_gpu_mixed_self_8(self): y_from=0, z_to=1, device_map={0 : 1, 1 : 0}, - dst=worker_name(self.rank) + dst=worker_name(self.rank) # type: ignore[attr-defined] ) @staticmethod @@ -5217,35 +5217,35 @@ def _test_device_maps_multi_gpu(self, dst): options.set_device_map(dst, {1: 0}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - x = torch.zeros(2).to(0) - y = torch.ones(2).to(1) + x = torch.zeros(2).to(0) # type: ignore[call-overload] + y = torch.ones(2).to(1) # type: ignore[call-overload] rets = rpc.rpc_sync( dst, TensorPipeAgentCudaRpcTest._gpu_add_multi_gpu, args=(x, y) ) - self.assertEqual(rets[0].device, torch.device(1)) - self.assertEqual(rets[1].device, torch.device(0)) - self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(1)) - self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) + self.assertEqual(rets[0].device, torch.device(1)) # type: ignore[attr-defined] + self.assertEqual(rets[1].device, torch.device(0)) # type: ignore[attr-defined] + self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(1)) # type: ignore[attr-defined, call-overload] + self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) # type: ignore[attr-defined, call-overload] rpc.shutdown() @skip_if_lt_x_gpu(2) def test_device_maps_multi_gpu(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] self._test_device_maps_multi_gpu(dst) @skip_if_lt_x_gpu(2) def test_device_maps_multi_gpu_self(self): - dst = worker_name(self.rank) + dst = worker_name(self.rank) # type: ignore[attr-defined] self._test_device_maps_multi_gpu(dst) @staticmethod @@ -5257,13 +5257,13 @@ def _gpu_add_return_to_gpu(x, y): @skip_if_lt_x_gpu(2) def test_device_maps_in_options(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=rpc.TensorPipeRpcBackendOptions( init_method=options.init_method, @@ -5275,12 +5275,12 @@ def test_device_maps_in_options(self): rets = rpc.rpc_sync( dst, TensorPipeAgentCudaRpcTest._gpu_add_multi_gpu, - args=(torch.zeros(2).to(0), torch.ones(2).to(1)) + args=(torch.zeros(2).to(0), torch.ones(2).to(1)) # type: ignore[call-overload] ) - self.assertEqual(rets[0].device, torch.device(1)) - self.assertEqual(rets[1].device, torch.device(0)) - self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(1)) - self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) + self.assertEqual(rets[0].device, torch.device(1)) # type: ignore[attr-defined] + self.assertEqual(rets[1].device, torch.device(0)) # type: ignore[attr-defined] + self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(1)) # type: ignore[attr-defined, call-overload] + self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) # type: ignore[attr-defined, call-overload] rpc.shutdown() def _test_device_maps_return_to_gpu(self, dst): @@ -5292,9 +5292,9 @@ def _test_device_maps_return_to_gpu(self, dst): options.set_device_map(dst, {3: 0}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -5305,21 +5305,21 @@ def _test_device_maps_return_to_gpu(self, dst): args=(torch.zeros(2), torch.ones(2)) ) for i in range(len(rets)): - self.assertEqual(rets[i].device, torch.device((3 + i) % 4)) - self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(3)) - self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) - self.assertEqual(rets[2], (torch.zeros(2) * torch.ones(2)).to(1)) - self.assertEqual(rets[3], (torch.zeros(2) / torch.ones(2)).to(2)) + self.assertEqual(rets[i].device, torch.device((3 + i) % 4)) # type: ignore[attr-defined] + self.assertEqual(rets[0], (torch.zeros(2) + torch.ones(2)).to(3)) # type: ignore[attr-defined, call-overload] + self.assertEqual(rets[1], (torch.zeros(2) - torch.ones(2)).to(0)) # type: ignore[attr-defined, call-overload] + self.assertEqual(rets[2], (torch.zeros(2) * torch.ones(2)).to(1)) # type: ignore[attr-defined, call-overload] + self.assertEqual(rets[3], (torch.zeros(2) / torch.ones(2)).to(2)) # type: ignore[attr-defined, call-overload] rpc.shutdown() @skip_if_lt_x_gpu(4) def test_device_maps_return_to_gpu(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] self._test_device_maps_return_to_gpu(dst) @skip_if_lt_x_gpu(4) def test_device_maps_return_to_gpu_self(self): - dst = worker_name(self.rank) + dst = worker_name(self.rank) # type: ignore[attr-defined] self._test_device_maps_return_to_gpu(dst) @staticmethod @@ -5327,29 +5327,29 @@ def _add_to_gpu(x, y): return (x + y).to(0) def _test_device_maps_missing_config(self, mode): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] errMsg = ( "TensorPipe RPC backend only supports CPU tensors by default.*" "`set_device_map` on `TensorPipeRpcBackendOptions`" ) - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] if mode == RPCExecMode.SYNC: - rpc.rpc_sync(dst, torch.add, args=(torch.zeros(2).to(0), 1)) + rpc.rpc_sync(dst, torch.add, args=(torch.zeros(2).to(0), 1)) # type: ignore[call-overload] elif mode == RPCExecMode.REMOTE: - rpc.remote(dst, torch.add, args=(torch.zeros(2).to(0), 1)).to_here() + rpc.remote(dst, torch.add, args=(torch.zeros(2).to(0), 1)).to_here() # type: ignore[call-overload] else: raise ValueError(f"unexpected mode {mode}") # make sure RPC is still functioning ret = rpc.rpc_sync(dst, torch.add, args=(torch.ones(2), 1)) - self.assertEqual(ret, torch.ones(2) + 1) + self.assertEqual(ret, torch.ones(2) + 1) # type: ignore[attr-defined] def _test_device_maps_missing_config_response(self, mode): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] errMsg = "Response device mapping is not available" - with self.assertRaisesRegex(RuntimeError, errMsg): + with self.assertRaisesRegex(RuntimeError, errMsg): # type: ignore[attr-defined] if mode == RPCExecMode.SYNC: rpc.rpc_sync( dst, @@ -5367,7 +5367,7 @@ def _test_device_maps_missing_config_response(self, mode): # make sure RPC is still functioning ret = rpc.rpc_sync(dst, torch.add, args=(torch.ones(2), 1)) - self.assertEqual(ret, torch.ones(2) + 1) + self.assertEqual(ret, torch.ones(2) + 1) # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) @dist_init @@ -5376,13 +5376,13 @@ def test_device_maps_missing_config(self): @skip_if_lt_x_gpu(1) def test_device_maps_missing_config_not_timeout(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=self.rpc_backend_options ) @@ -5394,7 +5394,7 @@ def test_device_maps_missing_config_not_timeout(self): rpc.shutdown() tok = time.time() - self.assertTrue(tok - tik < timeout) + self.assertTrue(tok - tik < timeout) # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) @dist_init @@ -5426,13 +5426,13 @@ def test_device_maps_missing_config_remote_response(self): @skip_if_lt_x_gpu(2) def test_device_maps_remote(self): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, {1: 0}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -5443,8 +5443,8 @@ def test_device_maps_remote(self): args=(torch.zeros(2), 1) ) - self.assertEqual(rref.to_here().device.index, 1) - self.assertEqual(rref.to_here(), torch.ones(2).to(1)) + self.assertEqual(rref.to_here().device.index, 1) # type: ignore[attr-defined] + self.assertEqual(rref.to_here(), torch.ones(2).to(1)) # type: ignore[attr-defined, call-overload] rpc.shutdown() @@ -5463,13 +5463,13 @@ def _slow_add_on_user_stream(x, y): def _test_custom_stream(self, fn, device_map): options = self.rpc_backend_options - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options.set_device_map(dst, device_map) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -5479,13 +5479,13 @@ def _test_custom_stream(self, fn, device_map): rpc.shutdown() def _test_stream_sync(self, dst): - x = torch.ones(2, 2).to(0) + x = torch.ones(2, 2).to(0) # type: ignore[call-overload] ret = rpc.rpc_sync( dst, TensorPipeAgentCudaRpcTest._slow_add_on_user_stream, args=(x, x) ) - self.assertEqual(ret, 2 * x) + self.assertEqual(ret, 2 * x) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) def test_custom_stream(self): @@ -5494,7 +5494,7 @@ def test_custom_stream(self): def _test_stream_multi_async(self, dst): futs = [] for i in range(20): - x = torch.ones(2, 2).to(0) * i + x = torch.ones(2, 2).to(0) * i # type: ignore[call-overload] futs.append( rpc.rpc_async( dst, @@ -5504,7 +5504,7 @@ def _test_stream_multi_async(self, dst): ) for i in range(20): - self.assertEqual(futs[i].wait(), 2 * torch.ones(2, 2).to(0) * i) + self.assertEqual(futs[i].wait(), 2 * torch.ones(2, 2).to(0) * i) # type: ignore[attr-defined, call-overload] @skip_if_lt_x_gpu(2) def test_custom_stream_multi(self): @@ -5524,16 +5524,16 @@ def _nested_slow_add_on_user_stream(dst, x, y, z): return TensorPipeAgentCudaRpcTest._slow_add_on_user_stream(ret, z) def _test_stream_nested_sync(self, dst): - x = torch.ones(2, 2).to(0) - y = torch.ones(2, 2).to(0) * 2 - z = torch.ones(2, 2).to(0) * 3 - nested_dst = worker_name((self.rank + 2) % self.world_size) + x = torch.ones(2, 2).to(0) # type: ignore[call-overload] + y = torch.ones(2, 2).to(0) * 2 # type: ignore[call-overload] + z = torch.ones(2, 2).to(0) * 3 # type: ignore[call-overload] + nested_dst = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] ret = rpc.rpc_sync( dst, TensorPipeAgentCudaRpcTest._nested_slow_add_on_user_stream, args=(nested_dst, x, y, z) ) - self.assertEqual(ret, 6 * x) + self.assertEqual(ret, 6 * x) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) def test_custom_stream_nested(self): @@ -5543,18 +5543,18 @@ def test_custom_stream_nested(self): ) def _test_stream_nested_multi_async(self, dst): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] futs = [] n = 5 xs, ys, zs = [], [], [] for i in range(n): - x = torch.ones(2, 2).to(0) * (i - 1) - y = torch.ones(2, 2).to(0) * i - z = torch.ones(2, 2).to(0) * (i + 1) + x = torch.ones(2, 2).to(0) * (i - 1) # type: ignore[call-overload] + y = torch.ones(2, 2).to(0) * i # type: ignore[call-overload] + z = torch.ones(2, 2).to(0) * (i + 1) # type: ignore[call-overload] xs.append(x) ys.append(y) zs.append(z) - nested_dst = worker_name((self.rank + 2) % self.world_size) + nested_dst = worker_name((self.rank + 2) % self.world_size) # type: ignore[attr-defined] futs.append( rpc.rpc_async( dst, @@ -5564,7 +5564,7 @@ def _test_stream_nested_multi_async(self, dst): ) for i in range(n): - self.assertEqual(futs[i].wait(), xs[i] + ys[i] + zs[i]) + self.assertEqual(futs[i].wait(), xs[i] + ys[i] + zs[i]) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) def test_custom_stream_nested_multi(self): @@ -5582,22 +5582,22 @@ def _gpu_add_wrong_gpus(x, y): @skip_if_lt_x_gpu(1) def test_device_mismatch(self): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options options.set_device_map(dst, {0: 0}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - x = torch.zeros(2).to(0) - y = torch.ones(2).to(0) + x = torch.zeros(2).to(0) # type: ignore[call-overload] + y = torch.ones(2).to(0) # type: ignore[call-overload] - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "Expected all tensors to be on the same device, but found at least two devices" ): @@ -5610,19 +5610,19 @@ def test_device_mismatch(self): rpc.shutdown() def _test_rref_synchronization(self, local_device, remote_device): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options options.set_device_map(dst, {local_device : remote_device}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] # This test compares rref.rpc_sync().forward(x) vs rref.remote().forward(x).to_here() # If to_here() is properly synchronized with forward(x) the results must be identical # This test needs multiple iterations and significant batch size to simulate real @@ -5633,7 +5633,7 @@ def _test_rref_synchronization(self, local_device, remote_device): x = torch.randn(200, 1, 28, 28).to(local_device) actual = rref.remote().forward(x).to_here() expected = rref.rpc_sync().forward(x) - self.assertEqual(actual, expected) + self.assertEqual(actual, expected) # type: ignore[attr-defined] rpc.shutdown() @@ -5659,25 +5659,25 @@ def _test_rref_as_arg_synchronization( remote_device, devicesOptions=None ): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options options.set_device_map(dst, {local_device: remote_device}) - input_src = worker_name((self.rank - 1 + self.world_size) % self.world_size) + input_src = worker_name((self.rank - 1 + self.world_size) % self.world_size) # type: ignore[attr-defined] options.set_device_map(input_src, {remote_device: local_device}) if devicesOptions is not None: - options.set_devices(devicesOptions[self.rank]) + options.set_devices(devicesOptions[self.rank]) # type: ignore[attr-defined] rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - if self.rank == 1: + if self.rank == 1: # type: ignore[attr-defined] # This test compares rref.rpc_sync().forward(x) vs rref.remote().forward(x).to_here() # If to_here() is properly synchronized with forward(x) the results must be identical # This test needs multiple iterations and significant batch size to simulate real @@ -5685,10 +5685,10 @@ def _test_rref_as_arg_synchronization( # see https://github.com/pytorch/pytorch/issues/54771 rref = rpc.remote(dst, MyConvNetForMNIST, args=(remote_device,)) for _ in range(10): - rref_x = RRef(torch.randn(200, 1, 28, 28).to(local_device)) + rref_x = RRef(torch.randn(200, 1, 28, 28).to(local_device)) # type: ignore[var-annotated] actual = rref.remote().forward(rref_x, True).to_here() expected = rref.rpc_sync().forward(rref_x, True) - self.assertEqual(actual, expected) + self.assertEqual(actual, expected) # type: ignore[attr-defined] rpc.shutdown() @@ -5727,7 +5727,7 @@ def _test_rref_forward_synchronization(self, local_device, remote_device): model_dst = worker_name(1) out_relay = worker_name(2) - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # for 1) model construction 2) forward execution options.set_device_map(model_dst, {local_device: remote_device}) @@ -5735,24 +5735,24 @@ def _test_rref_forward_synchronization(self, local_device, remote_device): # returning to the worker. This is intentional, to test RRef # forward CUDA stream synchronizations. options.set_device_map(out_relay, {local_device: local_device}) - elif self.rank == 1: + elif self.rank == 1: # type: ignore[attr-defined] # worker1 hosts the model and runs forward. The forward functions # calls RRef.to_here(), hence needs to configure the device map options.set_device_map(input_src, {remote_device: local_device}) - elif self.rank == 2: + elif self.rank == 2: # type: ignore[attr-defined] # worker2 will get the out RRef and call to_here() and hence, needs # to configure devcie map. options.set_device_map(model_dst, {local_device: remote_device}) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] # This test compares rref.rpc_sync().forward(x) vs rref.remote().forward(x).to_here() # If to_here() is properly synchronized with forward(x) the results must be identical # This test needs multiple iterations and significant batch size to simulate real @@ -5760,7 +5760,7 @@ def _test_rref_forward_synchronization(self, local_device, remote_device): # see https://github.com/pytorch/pytorch/issues/54771 rref = rpc.remote(model_dst, MyConvNetForMNIST, args=(remote_device,)) for _ in range(10): - rref_input = RRef(torch.randn(200, 1, 28, 28).to(local_device)) + rref_input = RRef(torch.randn(200, 1, 28, 28).to(local_device)) # type: ignore[var-annotated] rref_out = rref.remote().forward(rref_input, True) out = rpc.remote( out_relay, @@ -5768,7 +5768,7 @@ def _test_rref_forward_synchronization(self, local_device, remote_device): args=(rref_out,) ).to_here() expected = rref.rpc_sync().forward(rref_input, True) - self.assertEqual(out, expected) + self.assertEqual(out, expected) # type: ignore[attr-defined] rpc.shutdown() @@ -5789,7 +5789,7 @@ def test_rref_forward_synchronization4(self): self._test_rref_forward_synchronization("cuda:1", "cuda:1") def _test_owner_rref_forward_synchronization(self, local_device, remote_device): - if self.rank == 0: + if self.rank == 0: # type: ignore[attr-defined] options = self.rpc_backend_options options.set_device_map("w0", {local_device: remote_device}) rpc.init_rpc( @@ -5809,7 +5809,7 @@ def _test_owner_rref_forward_synchronization(self, local_device, remote_device): # the owner of the RRef. v0 = rpc.RRef(output).remote().sum().to_here().item() v1 = output.sum().item() - self.assertEqual(v0, v1) + self.assertEqual(v0, v1) # type: ignore[attr-defined] rpc.shutdown() @@ -5831,19 +5831,19 @@ def test_owner_rref_forward_synchronization4(self): @skip_if_lt_x_gpu(1) def test_devices_option_mismatch(self): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "but not included the devices field" ): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = self.rpc_backend_options options.set_device_map(dst, {0 : 0}) options.set_devices([1]) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -5852,11 +5852,11 @@ def test_devices_option_mismatch(self): @skip_if_lt_x_gpu(1) def test_devices_option_mismatch_reverse(self): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] RuntimeError, "but not included the devices field" ): - dst = worker_name((self.rank + 1) % self.world_size) + dst = worker_name((self.rank + 1) % self.world_size) # type: ignore[attr-defined] options = rpc.TensorPipeRpcBackendOptions( init_method=self.rpc_backend_options.init_method, @@ -5866,9 +5866,9 @@ def test_devices_option_mismatch_reverse(self): ) rpc.init_rpc( - name=worker_name(self.rank), + name=worker_name(self.rank), # type: ignore[attr-defined] backend=self.rpc_backend, - rank=self.rank, + rank=self.rank, # type: ignore[attr-defined] world_size=self.world_size, rpc_backend_options=options, ) @@ -5877,28 +5877,28 @@ def test_devices_option_mismatch_reverse(self): @skip_if_lt_x_gpu(1) def test_cuda_future_device_as_int(self): - fut = Future(devices=[0]) + fut = Future(devices=[0]) # type: ignore[var-annotated] @skip_if_lt_x_gpu(1) def test_cuda_future_device_as_str(self): - fut = Future(devices=["cuda:0"]) + fut = Future(devices=["cuda:0"]) # type: ignore[var-annotated] @skip_if_lt_x_gpu(1) def test_cuda_future_device_as_device(self): - fut = Future(devices=[torch.device("cuda", 0)]) + fut = Future(devices=[torch.device("cuda", 0)]) # type: ignore[var-annotated] @skip_if_lt_x_gpu(1) def test_cuda_future_device_not_cuda(self): - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, "Expected devices to have indices, got cpu" ): - fut = Future(devices=["cpu"]) + fut = Future(devices=["cpu"]) # type: ignore[var-annotated] def _test_cuda_future_extraction(self, wrapper, unwrapper): # We check proper CUDA stream synchronization by filling the tensor with # the expected value in one stream, and reading it from another stream. tensor = torch.zeros((100,), device="cuda:0") - future = Future(devices=["cuda:0"]) + future = Future(devices=["cuda:0"]) # type: ignore[var-annotated] with torch.cuda.device("cuda:0"): stream = torch.cuda.Stream() another_stream = torch.cuda.Stream() @@ -5907,7 +5907,7 @@ def _test_cuda_future_extraction(self, wrapper, unwrapper): tensor.fill_(1) future.set_result(wrapper(tensor)) with torch.cuda.stream(another_stream): - self.assertTrue(torch.eq(unwrapper(future.wait()), 1).all().item()) + self.assertTrue(torch.eq(unwrapper(future.wait()), 1).all().item()) # type: ignore[attr-defined] @skip_if_lt_x_gpu(1) def test_cuda_future_can_extract_cuda_tensor(self): @@ -5933,7 +5933,7 @@ def test_cuda_future_callback_changes_devices(self): # the expected value in one stream, and reading it from another stream. tensor0 = torch.zeros((100,), device="cuda:0") tensor1 = torch.zeros((100,), device="cuda:1") - parent_future = Future(devices=["cuda:0", "cuda:1"]) + parent_future = Future(devices=["cuda:0", "cuda:1"]) # type: ignore[var-annotated] def cb(fut): t0 = fut.value() @@ -5950,13 +5950,13 @@ def cb(fut): with torch.cuda.device("cuda:1"): another_stream = torch.cuda.Stream() with torch.cuda.stream(another_stream): - self.assertTrue(torch.eq(child_future.wait(), 1).all().item()) + self.assertTrue(torch.eq(child_future.wait(), 1).all().item()) # type: ignore[attr-defined] @skip_if_lt_x_gpu(2) def test_cuda_future_value_on_bad_device(self): tensor0 = torch.zeros((100,), device="cuda:0") tensor1 = torch.zeros((100,), device="cuda:1") - parent_future = Future(devices=["cuda:1"]) + parent_future = Future(devices=["cuda:1"]) # type: ignore[var-annotated] # As a plus, we test that futures still invoke callbacks even in case of # error, and that the child futures are successful if those callbacks @@ -5974,7 +5974,7 @@ def cb(fut): torch.cuda._sleep(int(1000 * get_cycles_per_ms())) tensor0.fill_(1) parent_future.set_result(tensor0) - with self.assertRaisesRegex( + with self.assertRaisesRegex( # type: ignore[attr-defined] ValueError, r"The result contained tensors residing on device\(s\) cuda:0 " r"which are not among the expected device\(s\) cuda:1", @@ -5983,4 +5983,4 @@ def cb(fut): with torch.cuda.device("cuda:1"): another_stream = torch.cuda.Stream() with torch.cuda.stream(another_stream): - self.assertTrue(torch.eq(child_future.wait(), 1).all().item()) + self.assertTrue(torch.eq(child_future.wait(), 1).all().item()) # type: ignore[attr-defined] diff --git a/torch/testing/_internal/hypothesis_utils.py b/torch/testing/_internal/hypothesis_utils.py index 15e7b4512a42a..739e0ffb0b066 100644 --- a/torch/testing/_internal/hypothesis_utils.py +++ b/torch/testing/_internal/hypothesis_utils.py @@ -168,7 +168,7 @@ def array_shapes(draw, min_dims=1, max_dims=None, min_side=1, max_side=None, max candidate = st.lists(st.integers(min_side, max_side), min_size=min_dims, max_size=max_dims) if max_numel is not None: candidate = candidate.filter(lambda x: reduce(int.__mul__, x, 1) <= max_numel) - return draw(candidate.map(tuple)) + return draw(candidate.map(tuple)) # type: ignore[arg-type] """Strategy for generating test cases for tensors. @@ -312,7 +312,7 @@ def tensor_conv( output_channels = output_channels_per_group * groups if isinstance(spatial_dim, Iterable): - spatial_dim = draw(st.sampled_from(spatial_dim)) + spatial_dim = draw(st.sampled_from(spatial_dim)) # type: ignore[call-overload] feature_map_shape = [] for i in range(spatial_dim): @@ -352,10 +352,10 @@ def tensor_conv( # Creating (and loading) a separate profile overrides any settings the user # already specified. hypothesis_version = hypothesis.version.__version_info__ -current_settings = settings._profiles[settings._current_profile].__dict__ +current_settings = settings._profiles[settings._current_profile].__dict__ # type: ignore[attr-defined] current_settings['deadline'] = None if hypothesis_version >= (3, 16, 0) and hypothesis_version < (5, 0, 0): - current_settings['timeout'] = hypothesis.unlimited + current_settings['timeout'] = hypothesis.unlimited # type: ignore[attr-defined] def assert_deadline_disabled(): if hypothesis_version < (3, 27, 0): import warnings