# Where did \`conv\` move to?

**URL:** https://discourse.julialang.org/t/where-did-conv-move-to/18399
**Category:** New to Julia
**Created:** [December 6, 2018, 9:45pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399 "2018-12-06T21:45:31Z")
**Posts on this page:** 19
**Page:** 1

<div class="post-metadata">

### Author: ![Qqwy](https://avatars.discourse-cdn.com/v4/letter/q/e480ec/32.png) [@Qqwy](https://discourse.julialang.org/u/Qqwy)
#### Post date: [December 6, 2018, 9:45pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/1 "2018-12-06T21:45:31Z")

</div>

Hello there!

I finally have a reason to try out Julia. In this case: Testing some things related to digital signal processing.

A lot of documentation still refers to Julia 0.7 and similar versions. I was able to find out that `fft`, `ifft`, `fftshift` and the likes have been moved to the `FFTW` package.

What I have not been able to find, is where `conv` has been moved to. Where can the basic convolution operation be found?

---

<div class="post-metadata">

### Author: ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)
#### Post date: [December 6, 2018, 9:53pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/2 "2018-12-06T21:53:21Z")

</div>

Run this in version 0.7:

```julia
a = rand(5);
b = rand(5);
conv(a,b)
ERROR: conv has been moved to the package DSP.jl.
Run `Pkg.add("DSP")` to install it, restart Julia,
and then run `using DSP` to load it.
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] #conv#1(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Array{Float64,1}, ::Vararg{Array{Float64,1},N} where N) at .\deprecated.jl:150
 [3] conv(::Array{Float64,1}, ::Vararg{Array{Float64,1},N} where N) at .\deprecated.jl:150
 [4] top-level scope at none:0

```

---

<div class="post-metadata">

### Author: ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)
#### Post date: [December 6, 2018, 9:57pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/3 "2018-12-06T21:57:20Z")

</div>

Then, you should do this:

```julia
(v1.0) pkg> add DSP

julia> using DSP

julia> a = rand(5);

julia> b = rand(5);

julia> conv(a,b)
9-element Array{Float64,1}:
 0.07552600153597361
 0.4454504761457533
 0.6820694306648747
 0.7491095589719305
 0.9602973792793014
 0.8087609222730767
 0.5679246434318976
 0.35446312174823513
 0.1102057752110403

```

---

<div class="post-metadata">

### Author: ![Qqwy](https://avatars.discourse-cdn.com/v4/letter/q/e480ec/32.png) [@Qqwy](https://discourse.julialang.org/u/Qqwy)
#### Post date: [December 6, 2018, 10:54pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/4 "2018-12-06T22:54:55Z")

</div>

Thank you for your reply, @Seif_Shebl!

As a beginner moving from MatLab to Julia, it seems very odd that I have to, alongside the stable version, install the old version `0.7`, just to be able to find out how to find common functionality.

What would be the best place to ask for an improvement to Julia’s docs and ‘could not find function’ REPL response?

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [December 6, 2018, 11:07pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/5 "2018-12-06T23:07:53Z")

</div>

The awkwardness of needing to keep 0.7 around is temporary: it’s a result of the large body of outdated documentation, forum posts, etc. that predate update to julia 1.0. That situation will naturally improve over time, as the probability of your favorite search engine finding the right julia 1.0 syntax increases.

Note that, even now, the answer to your original question is on the first page of Google results for “julia conv” (at least for me), so things are already improving.

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [December 6, 2018, 11:09pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/6 "2018-12-06T23:09:19Z")

</div>

> [@Qqwy](#):
>
> What would be the best place to ask for an improvement to Julia’s docs and ‘could not find function’ REPL response?

Make a pull request! Seriously, contributions to documentation are always welcome and there are many people here who would be happy to help.

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 6, 2018, 11:10pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/7 "2018-12-06T23:10:32Z")

</div>

> [@Qqwy](#):
>
> As a beginner moving from MatLab to Julia, it seems very odd that I have to, alongside the stable version, install the old version `0.7` , just to be able to find out how to find common functionality.

That’s the whole point of 0.7, to provide an upgrade path from earlier versions.

I would very much argue that things like `fft` and `conv` are not common functionality in programming languages,

---

<div class="post-metadata">

### Author: ![ssfrr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ssfrr/32/3736_2.png) [@ssfrr](https://discourse.julialang.org/u/ssfrr)
#### Post date: [December 7, 2018, 1:56am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/8 "2018-12-07T01:56:10Z")

</div>

I do think it’s possible to make things more discoverable though. If some hero wanted to put together some kind of Julia search engine that periodically (nightly?) downloaded all the registered packages, indexed all their exported names and their docstrings (also from Base and stdlib), and made it searchable - that would be awesome. 🙂

---

<div class="post-metadata">

### Author: ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)
#### Post date: [December 7, 2018, 5:37am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/9 "2018-12-07T05:37:09Z")

</div>

Although this probably wouldn’t have fully solved the issue of discovering `conv`, a more verbose name `DigitalSignalProcessing.jl` might have helped finding the package at least.

DSP.jl seems to break with the convention. ([Why named DSP.jl rather than DigitalSignalProcessing.jl? · Issue #249 · JuliaDSP/DSP.jl · GitHub](https://github.com/JuliaDSP/DSP.jl/issues/249))

---

<div class="post-metadata">

### Author: ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)
#### Post date: [December 7, 2018, 5:38am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/10 "2018-12-07T05:38:31Z")

</div>

> [@kristoffer.carlsson](#):
>
> That’s the whole point of 0.7, to provide an upgrade path from earlier versions.

He’s not upgrading though.

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [December 7, 2018, 7:33am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/11 "2018-12-07T07:33:46Z")

</div>

Working with a code example that was written for an earlier version implicitly requires updating that code example to 1.0.

---

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [December 7, 2018, 7:43am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/12 "2018-12-07T07:43:53Z")

</div>

I briefly experimented with a SQLite-based doc search tool like that once ([Search Julia documentation](http://steampiano.net/juliasearch/?s=convolution)), and it looked reasonably practical.

---

<div class="post-metadata">

### Author: ![Qqwy](https://avatars.discourse-cdn.com/v4/letter/q/e480ec/32.png) [@Qqwy](https://discourse.julialang.org/u/Qqwy)
#### Post date: [December 7, 2018, 10:55am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/13 "2018-12-07T10:55:26Z")

</div>

> [@Tamas\_Papp](#):
>
> Working with a code example that was written for an earlier version implicitly requires updating that code example to 1.0.

If only code examples and tutorials were annotated with the version of the language they were using. Unfortunately, this is frequently not the case. Take the RosettaCode page on the Fast Fourier Transformation([http://rosettacode.org/wiki/Fast\_Fourier\_transform#Julia](http://rosettacode.org/wiki/Fast_Fourier_transform#Julia)), for example.

> [@ssfrr](#):
>
> I do think it’s possible to make things more discoverable though. If some hero wanted to put together some kind of Julia search engine that periodically (nightly?) downloaded all the registered packages, indexed all their exported names and their docstrings (also from Base and stdlib), and made it searchable - that would be awesome. 🙂

This would be great! Tools like this exist in other languages; most notably, Haskell’s Hoogle comes to mind.

But I already would be very happy if the ‘deprecation changes’ that are part in 0.7 were mentioned somewhere in the documentation. Results like [Search · The Julia Language](https://docs.julialang.org/en/v1/search/?q=fft) are not useful.

I am against the notion of having to rely on a general-purpose search engine to find something specific: Searching in a confined space is for obvious reasons preferable to searching the whole of the internet, and even better is not having to search at all.  
I have seen this argument used in the past for instance to keep T\_PAMAAYIM\_NEUKODATYIM in PHP. Because ‘if a newcomer would not understand it, they should just searching for it’.

Currently, there do not seem to be any ways to search for Julia library functions, let alone packages. pkg.julialang. org is a long list, which cannot even be filtered by package name.Yes, you can currently use find-in-page in your browser, but that will cease working once there are twice as many packages and the list will have to be paginated.

* * *

> [@kristoffer.carlsson](#):
>
> I would very much argue that things like `fft` and `conv` are not common functionality in programming languages,

Maybe Julia has had a shift in target audience, but I came here first and foremost looking for a replacement to MatLab/Octave. I would argue that things like `fft` and `conv` are common functionality in _math/scientific-oriented_ programming languages.

* * *

Anyhow, I don’t want to derail this thread’s original topic.  
Thank you for your responses! I will try to create at least an issue, and potentially a PR to add a ‘this is where things have moved’ page to the documentation (although I’ll need help, because it seems like an enormous undertaking to parse through all of 0.7’s deprecation warnings).

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [December 7, 2018, 11:46am UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/14 "2018-12-07T11:46:08Z")

</div>

> [@Qqwy](#):
>
> If only code examples and tutorials were annotated with the version of the language they were using.

Yes, that would be great, but for small snippets it is unlikely to happen. But this problem is not specific to Julia: languages and libraries move on, and looking at the date of a comment or blog post can be helpful in deciding whether one should look for changes.

> [@Qqwy](#):
>
> potentially a PR to add a ‘this is where things have moved’ page to the documentation (although I’ll need help, because it seems like an enormous undertaking to parse through all of 0.7’s deprecation warnings).

I am not sure compiling another list is needed — we have a [NEWS.md](https://github.com/JuliaLang/julia/blob/v0.7.0/NEWS.md) for 0.7, and in any case as others have suggested the best way to get the warnings is just run 0.7.

---

<div class="post-metadata">

### Author: ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)
#### Post date: [December 7, 2018, 1:05pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/15 "2018-12-07T13:05:06Z")

</div>

In Engineering fields, e.g., acronyms is a widely accepted convention, a junior electrical engineering student knows what DSP stands for before studying it. Imagine a `ComputeUnifiedDeviceArchitectureNative.jl` package vs. `CUDAnative.jl`, do you think the former is still better? If I wrote `ODEs.jl`, will scientists be unable to recognize what this is? [These rules](https://julialang.github.io/Pkg.jl/dev/creating-packages/#Package-naming-guidelines-1) should be wisely followed, or we will end up with a new Java. I just hate it when programmers think of users as blind robots who can make every mistake in the book, brevity still matters. The exception of course would be the weird names that scientists and engineers wouldn’t recognize. I mean, yes Julia is a general purpose language, but if one doesn’t know what DSP means, then DSP.jl is not for them and they shouldn’t care.

---

<div class="post-metadata">

### Author: ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)
#### Post date: [December 7, 2018, 1:25pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/16 "2018-12-07T13:25:38Z")

</div>

I see your point, thanks for presenting it.

> [@Seif\_Shebl](#):
>
> I mean, yes Julia is a general purpose language, but if one doesn’t know what DSP means, then DSP.jl is not for them and they shouldn’t care.

DSP.jl contains `conv` which I assume isn’t just for engineers. I’m a theoretical physicist and looked for `fftfreq` at some point to conveniently get the frequencies of a FFT.

Regarding ODEs, there is (verbose) DifferentialEquations.jl as a metapackage, which everyone would find.

Anyways, as there don’t seem to be many complaints, I assume you are right and most people that use the package know what DSP stands for.

---

<div class="post-metadata">

### Author: ![ssfrr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ssfrr/32/3736_2.png) [@ssfrr](https://discourse.julialang.org/u/ssfrr)
#### Post date: [December 7, 2018, 1:39pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/17 "2018-12-07T13:39:55Z")

</div>

> [@cormullion](#):
>
> I briefly experimented with a SQLite-based doc search tool like that once…

That’s an awesome start! I also like the minimalist aesthetic. Is there a Julia package that does the indexing?

---

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [December 7, 2018, 1:48pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/18 "2018-12-07T13:48:51Z")

</div>

This uses the JavaScript `search_index.js` files that a number of Documenter sets have. I was just curious as to whether loading an SQLite database on a server on the other side of the world would be as quick as JavaScript in the browser… 😀

It would make a good GSoC project, perhaps, but needs server access and knowledge.

---

<div class="post-metadata">

### Author: ![Marc.Cox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/marc.cox/32/7514_2.png) [@Marc.Cox](https://discourse.julialang.org/u/Marc.Cox)
#### Post date: [January 19, 2020, 11:06pm UTC](https://discourse.julialang.org/t/where-did-conv-move-to/18399/19 "2020-01-19T23:06:25Z")

</div>

Hi there !

Below is all very helpful advice and Julia is a great community to get help.

So I don’t know if the helpful search engine now at [https://pkg.julialang.org/](https://pkg.julialang.org/) was available when you were asking, but searching for keyword _ **conv** _ there returns this helpful info now \>\> [https://pkg.julialang.org/docs/search?q=conv](https://pkg.julialang.org/docs/search?q=conv)

HTH future Julia users.
