# How to create the oracle matrix in Grover's algorithm?

I'm trying to implement Grover's algorithm in pyQuil, but I'm having trouble creating the oracle matrix given the function $$f$$, where $$f(x)=1$$ if $$x=w$$ and $$f(x)=0$$ otherwise. In most of the implementations I've seen, either a mysterious oracle function is called or the matrix representation is created using the knowledge of the index, which requires classical computation of all the $$f(x)$$ values, defeating the purpose of Grover search.

Can someone show me exactly how to create in the matrix (in say pyQuil) when writing the algorithm from scratch without classically computing all of the $$f(x)$$ values?

For most functions $$f(x)$$, there is nothing better than calculating all the values. After all, for most functions, there is no better way of defining the function than giving its truth table.
Probably, you want to talk about the relatively small fraction of cases in which the function $$f(x)$$ has some reasonably compact description. In that case, you should be able to design a classical circuit for its implementation. If you can do that, you can make the implementation reversible. And, once you've done that, it's no problem programming that reversible implementation into a quantum computer to act in the place of your oracle. And the whole point of Grover's search is to minimise the number of calls to the oracle, and hence minimise the number of times the function is evaluated.