srush / Tensor-Puzzles

Solve puzzles. Improve your pytorch.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Puzzle 15 & 16 `run_test` issues

javadr opened this issue · comments

Thanks a lot for this great mind-baffling puzzle.
I am kinda got stuck with problems 15 and 16 as it throws:

RuntimeError: expand(torch.LongTensor{[1, 5]}, size=[5]): the number of sizes provided (1) must be greater or equal to the number of dimensions in the tensor (2)

I have used the following for puzzles 15 and 16, respectively:

def bincount(a: TT["i"], j: int) -> TT["j"]:
    return ones(a.shape[0])[None,:] @ ((a[:,None]==arange(j))*1)

and

def scatter_add(values: TT["i"], link: TT["i"], j: int) -> TT["j"]:
    return values[None,:] @ ((link[:,None]==arange(j))*1)

While both work like a charm in the first part, the run_test part throws a runtime error!
I can't figure out what the problem is.
Could you please help me with this issue?

Can you send the full error with stack trace? Looks like it is something wrong with our code.

expand(torch.LongTensor{[1, 5]}, size=[5]) is wrong, but I don't know where that occurs.

Both of them are the same. See below.

---------------------------------------------------------------------------

RuntimeError                              Traceback (most recent call last)

[<ipython-input-35-64cc5fb8a425>](https://localhost:8080/#) in <module>
----> 1 run_test(test_bincount)

3 frames

[/content/lib.py](https://localhost:8080/#) in run_test(fn)
    208 
    209 def run_test(fn):
--> 210     fn()
    211     # Generate a random puppy video if you are correct.
    212     print("Correct!")

[/content/lib.py](https://localhost:8080/#) in test_problem()
    188 
    189     @given(spec(problem))
--> 190     def test_problem(d):
    191         d, sizes = d
    192         d = constraint(d)

[/usr/local/lib/python3.7/dist-packages/hypothesis/core.py](https://localhost:8080/#) in wrapped_test(*arguments, **kwargs)
   1254                         else get_trimmed_traceback()
   1255                     )
-> 1256                     raise the_error_hypothesis_found
   1257 
   1258             if not (ran_explicit_examples or state.ever_executed):

[/content/lib.py](https://localhost:8080/#) in test_problem(d)
    199         out2 = problem(*map(tensor, d.values()))
    200         out = tensor(out)
--> 201         out2 = torch.broadcast_to(out2, out.shape)
    202         assert torch.allclose(
    203             out, out2

RuntimeError: expand(torch.LongTensor{[1, 5]}, size=[5]): the number of sizes provided (1) must be greater or equal to the number of dimensions in the tensor (2)

This issue is because your answer has a larger dimension than the output from the <puzzle>_spec functions.
For example, your output tensor has a shape [1, 5], and the make_test tries to "broadcast" it into [5].
You can check if your answer fits the type hint from the puzzle (TT["j"] in this cast), and everything will work like a charm again.