# Dependency problem with FIllArrays

**URL:** <https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238>\
**Category:** General Usage\
**Tags:** pkg\
**Created:** [April 17, 2019, 12:34pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238 "2019-04-17T12:34:38Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 17, 2019, 12:34pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/1 "2019-04-17T12:34:38Z")

</div>

I am in the process of switching my packages to using Project.toml.  
When trying to add to the project.toml of [`ControlSystemIdentification.jl`](https://github.com/baggepinnen/ControlSystemIdentification.jl), I get the following problem

```julia
(ControlSystemIdentification) pkg> add LinearAlgebra
 Resolving package versions...
ERROR: Unsatisfiable requirements detected for package FillArrays [1a297f60]:
 FillArrays [1a297f60] log:
 ├─possible versions are: [0.0.1, 0.1.0, 0.2.0-0.2.1, 0.3.0, 0.4.0, 0.5.0, 0.6.0] or uninstalled
 ├─restricted to versions 0.6.0 by an explicit requirement, leaving only versions 0.6.0
 └─restricted by compatibility requirements with TotalLeastSquares [028f657a] to versions: [0.0.1, 0.1.0, 0.2.0-0.2.1, 0.3.0, 0.4.0, 0.5.0] — no versions left
   └─TotalLeastSquares [028f657a] log:
     ├─possible versions are: 0.1.0-0.1.1 or uninstalled
     └─restricted to versions * by an explicit requirement, leaving only versions 0.1.0-0.1.1

```

This line in the General registry,  
[FillArrays = “0.0-0.5”](https://github.com/JuliaRegistries/General/blob/efc6a94e46e866145859853e01455f47430b2fe3/T/TotalLeastSquares/Compat.toml#L2)  
indicates that [TotalLeastSquares](https://github.com/baggepinnen/TotalLeastSquares.jl), which is my package, is not compatible with the latest version of FillArrays, which is 0.6.0. I have not put that upper cap myself, and I believe it is compatible.

If I manually go in and edit the registry on my local machine to `FillArrays = "0.0-0.6"`, it works okay. My question is, why was the cap on `v0.5` put there for `TotalLeastSquares`? And how should I go about resolving my issue?

---

<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:** [April 17, 2019, 12:42pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/2 "2019-04-17T12:42:56Z")

</div>

> [@baggepinnen](#):
>
> My question is, why was the cap on `v0.5` put there for `TotalLeastSquares` ? And how should I go about resolving my issue?

When the converter script from METADATA to General ran, it set upper bounds on all dependencies as the semver compatible version of the last tagged version (I am not sure exactly why). To resolve it, I would just release a new TotalLeastSquares declaring compatibility with FillArrays 0.6 (which is a breaking version compared to 0.5).

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 17, 2019, 12:47pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/3 "2019-04-17T12:47:01Z")

</div>

Thanks, I have initiated the registration of a [new release](https://github.com/JuliaRegistries/General/pull/85) for TotalLeastSquares. Do I have to explicitly declare in Project.toml for TLS that I support v0.6 of FillArrays, or is it enough to tag this new release now that v0.6 of FA is tagged?

Edit: I realize that I do ahve to explicitly declare this, since no change to the cap is visible in  
[https://github.com/JuliaRegistries/General/pull/85/files](https://github.com/JuliaRegistries/General/pull/85/files)

---

<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:** [April 17, 2019, 1:00pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/4 "2019-04-17T13:00:06Z")

</div>

You can add `FillArrays = "0.6"` if you want to support [0.6 - 0.7) of FillArrays, cf [6. Compatibility · Pkg.jl](https://julialang.github.io/Pkg.jl/v1/compatibility/).

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 17, 2019, 1:08pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/5 "2019-04-17T13:08:20Z")

</div>

Okay I’m lost, I have tried to declare  
`FillArrays = "0.5, 0.6"`  
in Project.toml for TotalLeastSquares, but that causes travis to fail with an “invalid version range”  
How do I declare that I support both 0.5 and 0.6 of FillArrays? The special rules for `0.x` confuse me a bit 😕

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 17, 2019, 1:10pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/6 "2019-04-17T13:10:47Z")

</div>

Thats Registrators fault, should be fixed soon, see [https://github.com/JuliaComputing/Registrator.jl/pull/90](https://github.com/JuliaComputing/Registrator.jl/pull/90). Your Project.toml file is correct.

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [April 17, 2019, 2:53pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/7 "2019-04-17T14:53:32Z")

</div>

Great, thanks for clarifying, I sure was confused there for a while. Stefan fixed my General PR manually so all is good now!

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 6:08pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/8 "2019-04-17T18:08:46Z")

</div>

> [@kristoffer.carlsson](#):
>
> When the converter script from METADATA to General ran, it set upper bounds on all dependencies as the semver compatible version of the last tagged version (I am not sure exactly why)

Can this be undone, please? It’s causing a huge headache, essentially everything needs to be retagged now…

---

<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:** [April 17, 2019, 6:49pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/9 "2019-04-17T18:49:03Z")

</div>

> [@dlfivefifty](#):
>
> essentially everything needs to be retagged now

You only need to re-tag something if you want to be compatible with a dependency that has released a breaking version.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 6:59pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/10 "2019-04-17T18:59:56Z")

</div>

Or if we want users to use other packages that require the new version, since only one package version can be used at one time. This is going to make many packages unusable at the same time for no reason.

---

<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:** [April 17, 2019, 7:27pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/11 "2019-04-17T19:27:41Z")

</div>

It sounds like you want to completely turn off the resolver and just use the latest version of everything? I mean, if a package releases a breaking version then the packages that depend on it are going to have to updated to be compatible with that one (since it is breaking). That’s the whole point by choosing to set a version that is considered breaking according to semver.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 9:27pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/12 "2019-04-17T21:27:59Z")

</div>

But when it’s 0.x a package is experimental, and so practically _every_ version is “breaking” and often it’s breaking in a very small way where very few dependencies have to be changed.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 9:31pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/13 "2019-04-17T21:31:49Z")

</div>

And it should be up to the package developers whether they want to have these upper bounds. Forcing them on all our packages is wrong.

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 17, 2019, 9:35pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/14 "2019-04-17T21:35:49Z")

</div>

> [@dlfivefifty](#):
>
> But when it’s 0.x a package is experimental, and so practically _every_ version is “breaking” and often it’s breaking in a very small way where very few dependencies have to be changed.

From the docs ([6. Compatibility · Pkg.jl](https://julialang.github.io/Pkg.jl/v1/compatibility/)):

> While the semver specification says that all versions with a major version of 0 are incompatible with each other, we have made that choice that a version given as `0.a.b` is considered compatible with `0.a.c` if `a != 0` and `c >= b` .

> [@dlfivefifty](#):
>
> And it should be up to the package developers whether they want to have these upper bounds. Forcing them on all our packages is wrong.

But it is? You can have

```julia
[compat]
Package = ">0.1"

```

to support anything higher than 0.1 (but note that that is not true, you _can not guarantee_ that you are compatible with versions that is not even released yet). Even worse, you can leave out the `compat` completely and be “compatible” with everything.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 9:53pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/15 "2019-04-17T21:53:07Z")

</div>

I know, I’m referring to the upper bounds added “against our will” to my packages (and the OPs packages) on 11 April during the transition. I’m arguing these should be undone.

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [April 17, 2019, 10:08pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/16 "2019-04-17T22:08:17Z")

</div>

Those were added for good reasons (there was a long thread about it) and have been in place for ages. You have also been able to remove them for just as long in various ways. Nothing has changed now. It’s unclear to me why this is suddenly a big problem.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 17, 2019, 10:14pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/17 "2019-04-17T22:14:07Z")

</div>

I wouldn’t call 6 days “ages”: tracking the history they were added on 11 April. It’s a big deal because it’s unintentionally breaking downstream packages like the OPs, and also forcing me to immediately tag new versions of about 10 packages for anything to work (the package manager just gives up if no compatible version is found) …

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [April 18, 2019, 1:07am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/18 "2019-04-18T01:07:37Z")

</div>

I understand the default is the “tilde specifier” for `[compat]` of `Project.toml`. But isn’t the translation of `REQUIRE` the problem? [The Julia 0.6 documentation](https://docs.julialang.org/en/v0.6/manual/packages/#Requirements-Specification-1) says

> For example, the line:
> 
> ```julia
> Distributions 0.1
> 
> ```
> 
> is satisfied by any version of `Distributions` greater than or equal to `0.1.0`.

This translates to `Distributions = ">= 0.1"` in `Project.toml`, right? If so, why a new upper bound is introduced in the conversion of `METADATA` to `General`?:

> [@kristoffer.carlsson](#):
>
> When the converter script from METADATA to General ran, it set upper bounds on all dependencies as the semver compatible version of the last tagged version

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 18, 2019, 5:54am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/19 "2019-04-18T05:54:40Z")

</div>

It didn’t matter since they were adjusted on each new sync, so the bounds were effectively `>= 0.1`.

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [April 18, 2019, 6:09am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/20 "2019-04-18T06:09:11Z")

</div>

Thanks, that explains why it has been working nicely. But I suppose it’s started to matter now that there no more `METADAT`-to-`General` conversion? That is to say, shouldn’t the information in `General` originated from `REQUIRE` files keep respecting the specification in the Julia 0.6 documentation?

[Next page](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238.md?page=2)
