Python torch.Size() Examples
The following are 30
code examples of torch.Size().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch
, or try the search function
.
Example #1
Source File: DDPAE_utils.py From DDPAE-video-prediction with MIT License | 7 votes |
def image_to_object(images, pose, object_size): ''' Inverse pose, crop and transform image patches. param images: (... x C x H x W) tensor param pose: (N x 3) tensor ''' N, pose_size = pose.size() n_channels, H, W = images.size()[-3:] images = images.view(N, n_channels, H, W) if pose_size == 3: transformer_inv = expand_pose(pose_inv(pose)) elif pose_size == 6: transformer_inv = pose_inv_full(pose) grid = F.affine_grid(transformer_inv, torch.Size((N, n_channels, object_size, object_size))) obj = F.grid_sample(images, grid) return obj
Example #2
Source File: DDPAE_utils.py From DDPAE-video-prediction with MIT License | 7 votes |
def object_to_image(objects, pose, image_size): ''' param images: (N x C x H x W) tensor param pose: (N x 3) tensor ''' N, pose_size = pose.size() _, n_channels, _, _ = objects.size() if pose_size == 3: transformer = expand_pose(pose) elif pose_size == 6: transformer = pose.view(N, 2, 3) grid = F.affine_grid(transformer, torch.Size((N, n_channels, image_size, image_size))) components = F.grid_sample(objects, grid) return components
Example #3
Source File: test_backbones.py From mmdetection with Apache License 2.0 | 6 votes |
def test_res2net_backbone(): with pytest.raises(KeyError): # Res2Net depth should be in [50, 101, 152] Res2Net(depth=18) # Test Res2Net with scales 4, base_width 26 model = Res2Net(depth=50, scales=4, base_width=26) for m in model.modules(): if is_block(m): assert m.scales == 4 model.init_weights() model.train() imgs = torch.randn(1, 3, 224, 224) feat = model(imgs) assert len(feat) == 4 assert feat[0].shape == torch.Size([1, 256, 56, 56]) assert feat[1].shape == torch.Size([1, 512, 28, 28]) assert feat[2].shape == torch.Size([1, 1024, 14, 14]) assert feat[3].shape == torch.Size([1, 2048, 7, 7])
Example #4
Source File: point_sample.py From mmdetection with Apache License 2.0 | 6 votes |
def generate_grid(num_grid, size, device): """Generate regular square grid of points in [0, 1] x [0, 1] coordinate space. Args: num_grid (int): The number of grids to sample, one for each region. size (tuple(int, int)): The side size of the regular grid. device (torch.device): Desired device of returned tensor. Returns: (torch.Tensor): A tensor of shape (num_grid, size[0]*size[1], 2) that contains coordinates for the regular grids. """ affine_trans = torch.tensor([[[1., 0., 0.], [0., 1., 0.]]], device=device) grid = F.affine_grid( affine_trans, torch.Size((1, 1, *size)), align_corners=False) grid = normalize(grid) return grid.view(1, -1, 2).expand(num_grid, -1, -1)
Example #5
Source File: test_backbones.py From mmdetection with Apache License 2.0 | 6 votes |
def test_resnext_backbone(): with pytest.raises(KeyError): # ResNeXt depth should be in [50, 101, 152] ResNeXt(depth=18) # Test ResNeXt with group 32, base_width 4 model = ResNeXt(depth=50, groups=32, base_width=4) for m in model.modules(): if is_block(m): assert m.conv2.groups == 32 model.init_weights() model.train() imgs = torch.randn(1, 3, 224, 224) feat = model(imgs) assert len(feat) == 4 assert feat[0].shape == torch.Size([1, 256, 56, 56]) assert feat[1].shape == torch.Size([1, 512, 28, 28]) assert feat[2].shape == torch.Size([1, 1024, 14, 14]) assert feat[3].shape == torch.Size([1, 2048, 7, 7])
Example #6
Source File: base_test.py From nsf with MIT License | 6 votes |
def test_sample(self): num_samples = 10 context_size = 20 input_shape = [2, 3, 4] context_shape = [5, 6] flow = base.Flow( transform=transforms.AffineScalarTransform(scale=2.0), distribution=distributions.StandardNormal(input_shape), ) maybe_context = torch.randn(context_size, *context_shape) for context in [None, maybe_context]: with self.subTest(context=context): samples = flow.sample(num_samples, context=context) self.assertIsInstance(samples, torch.Tensor) if context is None: self.assertEqual(samples.shape, torch.Size([num_samples] + input_shape)) else: self.assertEqual( samples.shape, torch.Size([context_size, num_samples] + input_shape))
Example #7
Source File: net_utils.py From cascade-rcnn_Pytorch with MIT License | 6 votes |
def _affine_grid_gen(rois, input_size, grid_size): rois = rois.detach() x1 = rois[:, 1::4] / 16.0 y1 = rois[:, 2::4] / 16.0 x2 = rois[:, 3::4] / 16.0 y2 = rois[:, 4::4] / 16.0 height = input_size[0] width = input_size[1] zero = Variable(rois.data.new(rois.size(0), 1).zero_()) theta = torch.cat([\ (x2 - x1) / (width - 1), zero, (x1 + x2 - width + 1) / (width - 1), zero, (y2 - y1) / (height - 1), (y1 + y2 - height + 1) / (height - 1)], 1).view(-1, 2, 3) grid = F.affine_grid(theta, torch.Size((rois.size(0), 1, grid_size, grid_size))) return grid
Example #8
Source File: CBP.py From fast-MPN-COV with MIT License | 6 votes |
def __init__(self, thresh=1e-8, projDim=8192, input_dim=512): super(CBP, self).__init__() self.thresh = thresh self.projDim = projDim self.input_dim = input_dim self.output_dim = projDim torch.manual_seed(1) self.h_ = [ torch.randint(0, self.output_dim, (self.input_dim,),dtype=torch.long), torch.randint(0, self.output_dim, (self.input_dim,),dtype=torch.long) ] self.weights_ = [ (2 * torch.randint(0, 2, (self.input_dim,)) - 1).float(), (2 * torch.randint(0, 2, (self.input_dim,)) - 1).float() ] indices1 = torch.cat((torch.arange(input_dim, dtype=torch.long).reshape(1, -1), self.h_[0].reshape(1, -1)), dim=0) indices2 = torch.cat((torch.arange(input_dim, dtype=torch.long).reshape(1, -1), self.h_[1].reshape(1, -1)), dim=0) self.sparseM = [ torch.sparse.FloatTensor(indices1, self.weights_[0], torch.Size([self.input_dim, self.output_dim])).to_dense(), torch.sparse.FloatTensor(indices2, self.weights_[1], torch.Size([self.input_dim, self.output_dim])).to_dense(), ]
Example #9
Source File: parameter.py From pyfilter with MIT License | 6 votes |
def size_getter(shape: Union[int, Tuple[int, ...], torch.Size]) -> torch.Size: """ Helper function for defining a size object. :param shape: The shape :return: Size object """ if shape is None: return torch.Size([]) elif isinstance(shape, torch.Size): return shape elif isinstance(shape, int): return torch.Size([shape]) return torch.Size(shape) # NB: This is basically the same as original, but we include the prior as well
Example #10
Source File: sir.py From pyfilter with MIT License | 6 votes |
def __init__(self, theta, initial_dist, dt, num_steps=10): """ Implements a SIR model where the number of sick has been replaced with the fraction of sick people of the entire population. Model taken from this article: https://arxiv.org/pdf/2004.06680.pdf :param theta: The parameters (beta, gamma, sigma) """ if initial_dist.event_shape != torch.Size([3]): raise NotImplementedError('Must be of size 3!') def g(x, beta, gamma, sigma): g1 = -sigma * x[..., 0] * x[..., 1] g3 = torch.zeros_like(g1) return concater(g1, -g1, g3) inc_dist = Independent(Normal(torch.zeros(1), math.sqrt(dt) * torch.ones(1)), 1) super().__init__((f, g), theta, initial_dist, inc_dist, dt=dt, num_steps=num_steps)
Example #11
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_LinearNoBatch(self): norm = Normal(0., 1.) linear = AffineProcess((f, g), (1., 1.), norm, norm) # ===== Initialize ===== # x = linear.i_sample() # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(linear.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1])) # ===== Sample path ===== # path = linear.sample_path(num + 1) self.assertEqual(samps.shape, path.shape)
Example #12
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_Poisson(self): shape = 10, 100 a = 1e-2 * torch.ones((shape[0], 1)) dt = 1e-2 dist = Poisson(dt * 0.1) init = Normal(a, 1.) sde = AffineEulerMaruyama((f_sde, g_sde), (a, 0.15), init, dist, dt=dt, num_steps=10) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 1000 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #13
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_SDE(self): shape = 1000, 100 a = 1e-2 * torch.ones((shape[0], 1)) dt = 0.1 norm = Normal(0., math.sqrt(dt)) init = Normal(a, 1.) sde = AffineEulerMaruyama((f_sde, g_sde), (a, 0.15), init, norm, dt=dt, num_steps=10) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #14
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_MultiDimensional(self): mu = torch.zeros(2) scale = torch.ones_like(mu) shape = 1000, 100 mvn = Independent(Normal(mu, scale), 1) mvn = AffineProcess((f, g), (1., 1.), mvn, mvn) # ===== Initialize ===== # x = mvn.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(mvn.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape, *mu.shape])) # ===== Sample path ===== # path = mvn.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #15
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_BatchedParameter(self): norm = Normal(0., 1.) shape = 1000, 100 a = torch.ones((shape[0], 1)) init = Normal(a, 1.) linear = AffineProcess((f, g), (a, 1.), init, norm) # ===== Initialize ===== # x = linear.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(linear.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = linear.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #16
Source File: timeseries.py From pyfilter with MIT License | 6 votes |
def test_LinearBatch(self): norm = Normal(0., 1.) linear = AffineProcess((f, g), (1., 1.), norm, norm) # ===== Initialize ===== # shape = 1000, 100 x = linear.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(linear.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = linear.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #17
Source File: utils.py From pyfilter with MIT License | 6 votes |
def test_UnscentedTransform2D(self): # ===== 2D model ===== # mat = torch.eye(2) scale = torch.diag(mat) norm = Normal(0., 1.) mvn = MultivariateNormal(torch.zeros(2), torch.eye(2)) mvnlinear = AffineProcess((fmvn, g), (mat, scale), mvn, mvn) mvnoblinear = AffineObservations((fomvn, gomvn), (1.,), norm) mvnmodel = StateSpaceModel(mvnlinear, mvnoblinear) # ===== Perform unscented transform ===== # uft = UnscentedFilterTransform(mvnmodel) res = uft.initialize(3000) p = uft.predict(res) c = uft.correct(0., p) assert isinstance(c.x_dist(), MultivariateNormal) and c.x_dist().mean.shape == torch.Size([3000, 2])
Example #18
Source File: test_fbnet.py From Res2Net-maskrcnn with MIT License | 5 votes |
def _test_primitive(self, device, op_name, op_func, N, C_in, C_out, expand, stride): op = op_func(C_in, C_out, expand, stride).to(device) input = torch.rand([N, C_in, 7, 7], dtype=torch.float32).to(device) output = op(input) self.assertEqual( output.shape[:2], torch.Size([N, C_out]), 'Primitive {} failed for shape {}.'.format(op_name, input.shape) )
Example #19
Source File: test_backbones.py From Res2Net-maskrcnn with MIT License | 5 votes |
def test_build_backbones(self): ''' Make sure backbones run ''' self.assertGreater(len(registry.BACKBONES), 0) for name, backbone_builder in registry.BACKBONES.items(): print('Testing {}...'.format(name)) if name in BACKBONE_CFGS: cfg = load_config(BACKBONE_CFGS[name]) else: # Use default config if config file is not specified cfg = copy.deepcopy(g_cfg) backbone = backbone_builder(cfg) # make sures the backbone has `out_channels` self.assertIsNotNone( getattr(backbone, 'out_channels', None), 'Need to provide out_channels for backbone {}'.format(name) ) N, C_in, H, W = 2, 3, 224, 256 input = torch.rand([N, C_in, H, W], dtype=torch.float32) out = backbone(input) for cur_out in out: self.assertEqual( cur_out.shape[:2], torch.Size([N, backbone.out_channels]) )
Example #20
Source File: utils_mesh.py From DIB-R with MIT License | 5 votes |
def mtx2tfsparse(mtx): m, n = mtx.shape rows, cols = np.nonzero(mtx) # N = rows.shape[0] # value = np.ones(shape=(N,), dtype=np.float32) value = mtx[rows, cols] v = torch.FloatTensor(value) i = torch.LongTensor(np.stack((rows, cols), axis=0)) tfspmtx = torch.sparse.FloatTensor(i, v, torch.Size([m, n])) return tfspmtx ################################################################
Example #21
Source File: s2v_lib.py From pytorch_structure2vec with MIT License | 5 votes |
def PrepareLoopyBP(self, graph_list, is_directed=0): assert not is_directed total_num_nodes, total_num_edges = self._prepare_graph(graph_list, is_directed) total_edge_pairs = self.lib.NumEdgePairs(self.batch_graph_handle) n2e_idxes = torch.LongTensor(2, total_num_edges * 2) n2e_vals = torch.FloatTensor(total_num_edges * 2) e2e_idxes = torch.LongTensor(2, total_edge_pairs) e2e_vals = torch.FloatTensor(total_edge_pairs) e2n_idxes = torch.LongTensor(2, total_num_edges * 2) e2n_vals = torch.FloatTensor(total_num_edges * 2) subg_idxes = torch.LongTensor(2, total_num_nodes) subg_vals = torch.FloatTensor(total_num_nodes) idx_list = (ctypes.c_void_p * 4)() idx_list[0] = ctypes.c_void_p(n2e_idxes.numpy().ctypes.data) idx_list[1] = ctypes.c_void_p(e2e_idxes.numpy().ctypes.data) idx_list[2] = ctypes.c_void_p(e2n_idxes.numpy().ctypes.data) idx_list[3] = ctypes.c_void_p(subg_idxes.numpy().ctypes.data) val_list = (ctypes.c_void_p * 4)() val_list[0] = ctypes.c_void_p(n2e_vals.numpy().ctypes.data) val_list[1] = ctypes.c_void_p(e2e_vals.numpy().ctypes.data) val_list[2] = ctypes.c_void_p(e2n_vals.numpy().ctypes.data) val_list[3] = ctypes.c_void_p(subg_vals.numpy().ctypes.data) self.lib.PrepareLoopyBP(self.batch_graph_handle, ctypes.cast(idx_list, ctypes.c_void_p), ctypes.cast(val_list, ctypes.c_void_p)) n2e_sp = torch.sparse.FloatTensor(n2e_idxes, n2e_vals, torch.Size([total_num_edges * 2, total_num_nodes])) e2e_sp = torch.sparse.FloatTensor(e2e_idxes, e2e_vals, torch.Size([total_num_edges * 2, total_num_edges * 2])) e2n_sp = torch.sparse.FloatTensor(e2n_idxes, e2n_vals, torch.Size([total_num_nodes, total_num_edges * 2])) subg_sp = torch.sparse.FloatTensor(subg_idxes, subg_vals, torch.Size([len(graph_list), total_num_nodes])) return n2e_sp, e2e_sp, e2n_sp, subg_sp
Example #22
Source File: s2v_lib.py From pytorch_structure2vec with MIT License | 5 votes |
def PrepareMeanField(self, graph_list, is_directed=0): assert not is_directed total_num_nodes, total_num_edges = self._prepare_graph(graph_list, is_directed) n2n_idxes = torch.LongTensor(2, total_num_edges * 2) n2n_vals = torch.FloatTensor(total_num_edges * 2) e2n_idxes = torch.LongTensor(2, total_num_edges * 2) e2n_vals = torch.FloatTensor(total_num_edges * 2) subg_idxes = torch.LongTensor(2, total_num_nodes) subg_vals = torch.FloatTensor(total_num_nodes) idx_list = (ctypes.c_void_p * 3)() idx_list[0] = n2n_idxes.numpy().ctypes.data idx_list[1] = e2n_idxes.numpy().ctypes.data idx_list[2] = subg_idxes.numpy().ctypes.data val_list = (ctypes.c_void_p * 3)() val_list[0] = n2n_vals.numpy().ctypes.data val_list[1] = e2n_vals.numpy().ctypes.data val_list[2] = subg_vals.numpy().ctypes.data self.lib.PrepareMeanField(self.batch_graph_handle, ctypes.cast(idx_list, ctypes.c_void_p), ctypes.cast(val_list, ctypes.c_void_p)) n2n_sp = torch.sparse.FloatTensor(n2n_idxes, n2n_vals, torch.Size([total_num_nodes, total_num_nodes])) e2n_sp = torch.sparse.FloatTensor(e2n_idxes, e2n_vals, torch.Size([total_num_nodes, total_num_edges * 2])) subg_sp = torch.sparse.FloatTensor(subg_idxes, subg_vals, torch.Size([len(graph_list), total_num_nodes])) return n2n_sp, e2n_sp, subg_sp
Example #23
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_TwoFactorSIRD(self): dist = Dirichlet(torch.tensor([10000., 1., 1., 1.])) sird = m.ThreeFactorSIRD((0.1, 0.05, 0.05, 0.01, 0.05, 0.05, 0.05), dist, dt=1e-1) x = sird.sample_path(1000) self.assertEqual(x.shape, torch.Size([1000, 4]))
Example #24
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_TwoFactorSEIRD(self): dist = Dirichlet(torch.tensor([10000., 1., 1., 1., 1.])) seird = m.TwoFactorSEIRD((0.1, 0.05, 0.05, 0.01, 0.1, 0.05, 0.05), dist, dt=1e-1) x = seird.sample_path(1000) self.assertEqual(x.shape, torch.Size([1000, 5]))
Example #25
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_OneStepEuler(self): shape = 1000, 100 a = 1e-2 * torch.ones((shape[0], 1)) init = Normal(a, 1.) dt = 1. norm = Normal(0., math.sqrt(dt)) sde = OneStepEulerMaruyma((f_sde, g_sde), (a, 0.15), init, norm, dt) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #26
Source File: test_backbones.py From mmdetection with Apache License 2.0 | 5 votes |
def test_res2net_bottle2neck(): with pytest.raises(AssertionError): # Style must be in ['pytorch', 'caffe'] Bottle2neck(64, 64, base_width=26, scales=4, style='tensorflow') with pytest.raises(AssertionError): # Scale must be larger than 1 Bottle2neck(64, 64, base_width=26, scales=1, style='pytorch') # Test Res2Net Bottle2neck structure block = Bottle2neck( 64, 64, base_width=26, stride=2, scales=4, style='pytorch') assert block.scales == 4 # Test Res2Net Bottle2neck with DCN dcn = dict(type='DCN', deformable_groups=1, fallback_on_stride=False) with pytest.raises(AssertionError): # conv_cfg must be None if dcn is not None Bottle2neck( 64, 64, base_width=26, scales=4, dcn=dcn, conv_cfg=dict(type='Conv')) Bottle2neck(64, 64, dcn=dcn) # Test Res2Net Bottle2neck forward block = Bottle2neck(64, 16, base_width=26, scales=4) x = torch.randn(1, 64, 56, 56) x_out = block(x) assert x_out.shape == torch.Size([1, 64, 56, 56])
Example #27
Source File: test_backbones.py From mmdetection with Apache License 2.0 | 5 votes |
def test_renext_bottleneck(): with pytest.raises(AssertionError): # Style must be in ['pytorch', 'caffe'] BottleneckX(64, 64, groups=32, base_width=4, style='tensorflow') # Test ResNeXt Bottleneck structure block = BottleneckX( 64, 64, groups=32, base_width=4, stride=2, style='pytorch') assert block.conv2.stride == (2, 2) assert block.conv2.groups == 32 assert block.conv2.out_channels == 128 # Test ResNeXt Bottleneck with DCN dcn = dict(type='DCN', deformable_groups=1, fallback_on_stride=False) with pytest.raises(AssertionError): # conv_cfg must be None if dcn is not None BottleneckX( 64, 64, groups=32, base_width=4, dcn=dcn, conv_cfg=dict(type='Conv')) BottleneckX(64, 64, dcn=dcn) # Test ResNeXt Bottleneck forward block = BottleneckX(64, 16, groups=32, base_width=4) x = torch.randn(1, 64, 56, 56) x_out = block(x) assert x_out.shape == torch.Size([1, 64, 56, 56])
Example #28
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_OneFactorFractionalSIR(self): dist = Dirichlet(torch.tensor([10000., 1., 1.])) sir = m.OneFactorSIR((0.1, 0.05, 0.1), dist, dt=1e-1) x = sir.sample_path(1000) self.assertEqual(x.shape, torch.Size([1000, 3]))
Example #29
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_ParameterInDistribution(self): shape = 10, 100 a = 1e-2 * torch.ones((shape[0], 1)) dt = 1e-2 dist = Normal(loc=0., scale=Parameter(Exponential(10.))) init = Normal(a, 1.) sde = AffineEulerMaruyama((f_sde, g_sde), (a, 0.15), init, dist, dt=dt, num_steps=10) sde.sample_params(shape) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 1000 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
Example #30
Source File: timeseries.py From pyfilter with MIT License | 5 votes |
def test_StochasticSIR(self): dist = Independent(Binomial(torch.tensor([1000, 1, 0]), torch.tensor([1, 1, 1e-6])), 1) sir = m.StochasticSIR((0.1, 0.05, 0.01), dist, 1e-1) x = sir.sample_path(1000, 10) self.assertEqual(x.shape, torch.Size([1000, 10, 3]))