Skip to content

Commit

Permalink
Fix SCPyPlotExt (#398)
Browse files Browse the repository at this point in the history
The `SCPyPlotExt` had two problems:

- the default argument to `pdata` is `Profile.fetch()`, but `Profile`
was not imported
- the extension was not adding methods to `SnoopCompile.pgdsgui`

As a result, the tutorial on `pgdsgui` was broken.

This commit fixes both of these issues.

It also fixes syntax highlighting in pgdsgui tutorial

---------

Co-authored-by: Charles Kawczynski <[email protected]>
  • Loading branch information
Sbozzolo and charleskawczynski authored Oct 21, 2024
1 parent 2ecfc9a commit dfed0cb
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
4 changes: 2 additions & 2 deletions docs/src/tutorials/pgdsgui.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Again, this seems appropriate for a language where specialization typically happ

We'll add these packages to your [default environment](https://pkgdocs.julialang.org/v1/environments/) so you can use them while in the package environment:

```
```julia
using Pkg
Pkg.add(["SnoopCompileCore", "SnoopCompile", "PyPlot"]);
```
Expand Down Expand Up @@ -84,7 +84,7 @@ julia> tinf = @snoop_inference mappushes(spelltype, Ts);

Then, *in the same session*, profile the runtime:

```
```julia
julia> using Profile

julia> @profile mappushes(spelltype, Ts);
Expand Down
12 changes: 7 additions & 5 deletions ext/SCPyPlotExt.jl
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
module SCPyPlotExt

import Profile

using SnoopCompile
using SnoopCompile: MethodLoc, InferenceTimingNode, PGDSData, lookups
using PyPlot: PyPlot, plt, PyCall

get_bystr(@nospecialize(by)) = by === inclusive ? "Inclusive" :
by === exclusive ? "Exclusive" : error("unknown ", by)

function pgdsgui(ax::PyCall.PyObject, ridata::AbstractVector{Pair{Union{Method,MethodLoc},PGDSData}}; bystr, consts, markersz=25, linewidth=0.5, t0 = 0.001, interactive::Bool=true, kwargs...)
function SnoopCompile.pgdsgui(ax::PyCall.PyObject, ridata::AbstractVector{Pair{Union{Method,MethodLoc},PGDSData}}; bystr, consts, markersz=25, linewidth=0.5, t0 = 0.001, interactive::Bool=true, kwargs...)
methodref = Ref{Union{Method,MethodLoc}}() # returned to the user for inspection of clicked methods
function onclick(event)
xc, yc = event.xdata, event.ydata
Expand Down Expand Up @@ -48,18 +50,18 @@ function pgdsgui(ax::PyCall.PyObject, ridata::AbstractVector{Pair{Union{Method,M
return methodref
end

function pgdsgui(ax::PyCall.PyObject, args...; consts::Bool=true, by=inclusive, kwargs...)
function SnoopCompile.pgdsgui(ax::PyCall.PyObject, args...; consts::Bool=true, by=inclusive, kwargs...)
pgdsgui(ax, prep_ri(args...; consts, by, kwargs...); bystr=get_bystr(by), consts, kwargs...)
end

function pgdsgui(args...; kwargs...)
function SnoopCompile.pgdsgui(args...; kwargs...)
fig, ax = plt.subplots()
pgdsgui(ax, args...; kwargs...), ax
end

function prep_ri(tinf::InferenceTimingNode, pdata=Profile.fetch(); lidict=lookups, consts, by, kwargs...)
lookup_firstip!(lookups, pdata)
return runtime_inferencetime(tinf, pdata; lidict, consts, by)
SnoopCompile.lookup_firstip!(lookups, pdata)
return SnoopCompile.runtime_inferencetime(tinf, pdata; lidict, consts, by)
end

end
2 changes: 1 addition & 1 deletion src/SnoopCompile.jl
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ that method.
`ax` is the pyplot axis of the scatterplot.
!!! compat
`pgdsgui` depends on PyPlot via the Requires.jl package. You must load both SnoopCompile and PyPlot for this function to be defined.
`pgdsgui` depends on PyPlot via Julia extensions. You must load both SnoopCompile and PyPlot for this function to be defined.
"""
function pgdsgui end
export pgdsgui
Expand Down

0 comments on commit dfed0cb

Please sign in to comment.