# Invalidation checker for packages \[code snippet\]

**URL:** <https://discourse.julialang.org/t/invalidation-checker-for-packages-code-snippet/54976>\
**Category:** General Usage\
**Tags:** method-invalidation, snoopr, snoopcompile, snippet\
**Created:** [February 10, 2021, 10:02am UTC](https://discourse.julialang.org/t/invalidation-checker-for-packages-code-snippet/54976 "2021-02-10T10:02:29Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Marcell\_Havlik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/marcell_havlik/32/37424_2.png) [@Marcell\_Havlik](https://discourse.julialang.org/u/Marcell_Havlik)\
**Post date:** [February 10, 2021, 10:02am UTC](https://discourse.julialang.org/t/invalidation-checker-for-packages-code-snippet/54976/1 "2021-02-10T10:02:29Z")

</div>

Hey,

I just wanted to share this code snippet which can be helpful to find where the imported invalidation comes from.

```julia
using SnoopCompileCore
using SnoopCompile
using SnoopCompile: countchildren
using Pkg
using Printf

toprints=[]

for (package, version) in Pkg.installed() # Pkg.depenencies()
@show package
invs = @snoopr @eval using $(Symbol(package))
trees = invalidation_trees(invs)
push!(toprints, (pkgname=package, invfunc=length(trees), sumchildren=sum([countchildren(tree) for tree in trees]), invalidations=length(invs)) )
end

sort!(toprints, by=x -> x[:sumchildren], rev=true)
for toprint in toprints
@printf "%-20s: invalidations: %3d which invalidated: %5d children (%5d invalidations)\n" toprint[:pkgname] toprint[:invfunc] toprint[:sumchildren] toprint[:invalidations]
end

```

For me I checked some of the package whether I really need them and just reduced a little latency by removing them.

```julia
StatsPlots : invalidations: 24 which invalidated: 2933 children ( 6726 invalidations)
PyCall : invalidations: 7 which invalidated: 1958 children ( 4285 invalidations)
JSON3 : invalidations: 4 which invalidated: 1438 children ( 2896 invalidations)
EllipsisNotation : invalidations: 7 which invalidated: 1066 children ( 2523 invalidations)
HTTP : invalidations: 4 which invalidated: 532 children ( 1110 invalidations)
JLD2 : invalidations: 3 which invalidated: 387 children ( 851 invalidations)
DataFrames : invalidations: 8 which invalidated: 363 children ( 1362 invalidations)
ORCA : invalidations: 5 which invalidated: 276 children ( 590 invalidations)
Flux : invalidations: 22 which invalidated: 193 children ( 2611 invalidations)
JuliaFormatter : invalidations: 2 which invalidated: 151 children ( 346 invalidations)
JLD : invalidations: 8 which invalidated: 127 children ( 335 invalidations)
BenchmarkTools : invalidations: 2 which invalidated: 103 children ( 216 invalidations)
GeometryTypes : invalidations: 9 which invalidated: 68 children ( 260 invalidations)
Makie : invalidations: 6 which invalidated: 34 children ( 591 invalidations)
KernelDensity : invalidations: 2 which invalidated: 26 children ( 84 invalidations)
GraphPlot : invalidations: 1 which invalidated: 14 children ( 54 invalidations)
Zygote : invalidations: 7 which invalidated: 12 children ( 129 invalidations)
LoopVectorization : invalidations: 1 which invalidated: 4 children ( 466 invalidations)
MethodAnalysis : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Memoize : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
OrderedCollections : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
JuliaInterpreter : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
FastClosures : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
DataStructures : invalidations: 0 which invalidated: 0 children ( 20 invalidations)
Glob : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Distributions : invalidations: 0 which invalidated: 0 children ( 88 invalidations)
JSON2 : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Formatting : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
AbstractPlotting : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
FileIO : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
SnoopCompile : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
PackageCompiler : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
GLMakie : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
CSV : invalidations: 0 which invalidated: 0 children ( 16 invalidations)
Revise : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
SnoopCompileCore : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
ClusterManagers : invalidations: 0 which invalidated: 0 children ( 4 invalidations)
LRUCache : invalidations: 0 which invalidated: 0 children ( 60 invalidations)
Parameters : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Redis : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
LightGraphs : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
NetworkLayout : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
DiffRules : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Colors : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
WebSockets : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
Crayons : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
MacroTools : invalidations: 0 which invalidated: 0 children ( 0 invalidations)
ChainRulesCore : invalidations: 0 which invalidated: 0 children ( 0 invalidations)

```

I know it is not perfect. Any idea is appreciated.  
Do you guys think it is useful?
