From 8be0416ca0f7224d67d76d6c71ecd60116a0ba6d Mon Sep 17 00:00:00 2001 From: lrennels Date: Wed, 29 Jul 2020 18:40:55 -0700 Subject: [PATCH 1/2] Remove plot_comp_graph functionality --- Project.toml | 2 - docs/src/figs/plot_comp_graph_example.png | Bin 76775 -> 0 bytes docs/src/howto/howto_2.md | 12 +----- docs/src/ref/ref_API.md | 1 - docs/src/tutorials/tutorial_2.md | 11 +----- src/Mimi.jl | 2 - src/utils/plotting.jl | 36 ------------------ test/runtests.jl | 3 -- test/test_plotting.jl | 43 ---------------------- 9 files changed, 3 insertions(+), 107 deletions(-) delete mode 100644 docs/src/figs/plot_comp_graph_example.png delete mode 100644 src/utils/plotting.jl delete mode 100644 test/test_plotting.jl diff --git a/Project.toml b/Project.toml index ac7b15424..d6a161380 100644 --- a/Project.toml +++ b/Project.toml @@ -5,7 +5,6 @@ version = "1.0.1-DEV" [deps] CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca" Classes = "1a9c1350-211b-5766-99cd-4544d885a0d1" -Compose = "a81c6b42-2e10-5240-aca2-a61377ecd94b" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" @@ -38,7 +37,6 @@ VegaLite = "112f6efa-9a02-5b7d-90c0-432ed331239a" [compat] CSVFiles = "0.16, 1.0" Classes = "1.2" -Compose = "0.7, 0.8, 0.9" DataFrames = "0.19.1, 0.20, 0.21" DataStructures = "0.17" Distributions = "0.21, 0.22, 0.23" diff --git a/docs/src/figs/plot_comp_graph_example.png b/docs/src/figs/plot_comp_graph_example.png deleted file mode 100644 index 42838fdbafa1f5dc505aede1c5c63d61c59c2f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76775 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:Var1, :Component2=>:Var2) # request variables from ## Plotting and the Explorer UI -Mimi provides support for plotting using [VegaLite](https://github.com/vega/vega-lite) and [VegaLite.jl](https://github.com/fredo-dedup/VegaLite.jl) within the Mimi Explorer UI and `Mimi.plot` function, and the [LightGraphs](https://github.com/JuliaGraphs/LightGraphs.jl) and [MetaGraphs](https://github.com/JuliaGraphs/MetaGraphs.jl) for the `plot_comp_graph` function described below. +Mimi provides support for plotting using [VegaLite](https://github.com/vega/vega-lite) and [VegaLite.jl](https://github.com/fredo-dedup/VegaLite.jl). -In order to view a DAG representing the component ordering and relationships, use the `plot_comp_graph` function to view a plot and optionally save it to a file. - -```julia -run(m) -plot_comp_graph(m; filename = "MyFilePath.png") -``` -![Plot Component Graph Example](../figs/plot_comp_graph_example.png) - -Other plotting support is provided by the **Explorer UI**, rooted in `VegaLite`. The `explore` function allows the user to view and explore the variables and parameters of a model run. The explorer can be used in two primary ways. +Plotting support is provided by the **Explorer UI**, rooted in `VegaLite`. The `explore` function allows the user to view and explore the variables and parameters of a model run. The explorer can be used in two primary ways. In order to invoke the explorer UI and explore all of the variables and parameters in a model, simply call the function `explore` with the model run as the required argument, and a window title as an optional keyword argument, as shown below. This will produce a new browser window containing a selectable list of parameters and variables, organized by component, each of which produces a graphic. The exception here being that if the parameter or variable is a single scalar value, the value will appear alongside the name in the left-hand list. diff --git a/docs/src/ref/ref_API.md b/docs/src/ref/ref_API.md index 0098a7246..aa06eb240 100644 --- a/docs/src/ref/ref_API.md +++ b/docs/src/ref/ref_API.md @@ -22,7 +22,6 @@ is_last modeldef parameter_names parameter_dimensions -plot_comp_graph replace! set_dimension! set_leftover_params! diff --git a/docs/src/tutorials/tutorial_2.md b/docs/src/tutorials/tutorial_2.md index 1d9de52d8..05dbca3eb 100644 --- a/docs/src/tutorials/tutorial_2.md +++ b/docs/src/tutorials/tutorial_2.md @@ -120,7 +120,7 @@ getdataframe(m, :socioeconomic=>:income)[1:16,:] # results for all regions in fi After running the FUND model, you may also explore the results using plots and graphs. -Mimi provides support for plotting using [VegaLite](https://github.com/vega/vega-lite) and [VegaLite.jl](https://github.com/fredo-dedup/VegaLite.jl) within the Mimi Explorer UI, and the [LightGraphs](https://github.com/JuliaGraphs/LightGraphs.jl) and [MetaGraphs](https://github.com/JuliaGraphs/MetaGraphs.jl) for the [`plot_comp_graph`](@ref) function. +Mimi provides support for plotting using [VegaLite](https://github.com/vega/vega-lite) and [VegaLite.jl](https://github.com/fredo-dedup/VegaLite.jl) within the Mimi Explorer UI. #### Explore @@ -147,15 +147,6 @@ More specifically for our tutorial use of FUND, try: p = Mimi.plot(m, :socioeconomic, :income) save("MyFilePath.svg", p) ``` - -#### Component Graph - -In order to view a DAG representing the component ordering and relationships, use the [`plot_comp_graph`](@ref) function to view a plot and optionally save it to a file. This function returns a plot object displayed in the viewer and showing a graph with components as nodes and component connections as edges. - -```julia -plot_comp_graph(m, "MyFilePath.png") -``` - ---- You're done! Now feel free to move on to the next tutorial, which will go into depth on how to **modify** an existing model such as FUND. diff --git a/src/Mimi.jl b/src/Mimi.jl index eab87c535..397fc9dca 100644 --- a/src/Mimi.jl +++ b/src/Mimi.jl @@ -38,7 +38,6 @@ export # parameters, parameter_dimensions, parameter_names, - plot_comp_graph, replace_comp!, set_dimension!, set_leftover_params!, @@ -77,7 +76,6 @@ include("utils/getdataframe.jl") include("utils/graph.jl") include("utils/lint_helper.jl") include("utils/misc.jl") -include("utils/plotting.jl") # Load built-in components include("components/adder.jl") diff --git a/src/utils/plotting.jl b/src/utils/plotting.jl deleted file mode 100644 index 29f764a71..000000000 --- a/src/utils/plotting.jl +++ /dev/null @@ -1,36 +0,0 @@ -using Mimi -using GraphPlot -using Compose - -function _open_file(filename) - if Sys.isapple() - run(`open $(filename)`) - elseif Sys.islinux() - run(`xdg-open $(filename)`) - elseif Sys.iswindows() - run(`$(ENV["COMSPEC"]) /c start $(filename)`) - else - @warn "Showing plots is not supported on $(Sys.KERNEL)" - end -end - -""" - plot_comp_graph(m::Model, filename::Union{Nothing, Symbol} = nothing) - -Plot the DAG of component connections within model `m` and save to `filename`. If -no `filename` is given, plot will simply display. -""" -function plot_comp_graph(m::Model, filename::Union{Nothing, String} = nothing) - - graph = comp_graph(m.md) - paths = map(i -> get_prop(graph, i, :path), vertices(graph)) - names = map(path -> path.names[end], paths) - - plot = gplot(graph, nodelabel=names, nodesize=6, nodelabelsize=6) - if filename !== nothing - draw(PDF(filename, 16cm, 16cm), plot) - return _open_file(filename) - else - return plot - end -end diff --git a/test/runtests.jl b/test/runtests.jl index 3cbf79a21..5c8220abc 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -113,9 +113,6 @@ Electron.prep_test_env() @info("test_explorer_compositecomp.jl") @time include("test_explorer_compositecomp.jl") - @info("test_plotting.jl") - @time include("test_plotting.jl") - @info("mcs/runtests.jl") @time include("mcs/runtests.jl") diff --git a/test/test_plotting.jl b/test/test_plotting.jl deleted file mode 100644 index dcaf6f7a7..000000000 --- a/test/test_plotting.jl +++ /dev/null @@ -1,43 +0,0 @@ -module TestPlotting - -using Mimi -using Test - -using Mimi: plot_comp_graph - -@defcomp LongComponent begin - x = Parameter(index=[time]) - y = Parameter() - z = Variable(index=[time]) - - function run_timestep(p, v, d, ts) - v.z[ts] = p.x[ts] + p.y - end -end - -@defcomp ShortComponent begin - a = Parameter() - b = Variable(index=[time]) - - function run_timestep(p, v, d, ts) - v.b[ts] = p.a * ts.t - end -end - -m = Model() -set_dimension!(m, :time, 2000:3000) -nsteps = Mimi.dim_count(m.md, :time) - -add_comp!(m, ShortComponent) #; first=2100) -add_comp!(m, LongComponent) #; first=2000) - -set_param!(m, :ShortComponent, :a, 2.) -set_param!(m, :LongComponent, :y, 1.) -connect_param!(m, :LongComponent, :x, :ShortComponent, :b, zeros(nsteps)) - -run(m) - -graph = plot_comp_graph(m) -@test typeof(graph) == Mimi.Compose.Context - -end #module \ No newline at end of file From 42cdfdb7bf0d1710afab82cdb4ffd091d6ea0647 Mon Sep 17 00:00:00 2001 From: lrennels Date: Wed, 29 Jul 2020 20:12:15 -0700 Subject: [PATCH 2/2] Remove unused order functions --- src/Mimi.jl | 1 - src/core/connections.jl | 3 -- src/core/order.jl | 64 ----------------------------------------- 3 files changed, 68 deletions(-) delete mode 100644 src/core/order.jl diff --git a/src/Mimi.jl b/src/Mimi.jl index 397fc9dca..a041b8338 100644 --- a/src/Mimi.jl +++ b/src/Mimi.jl @@ -66,7 +66,6 @@ include("core/references.jl") include("core/time.jl") include("core/time_arrays.jl") include("core/model.jl") -include("core/order.jl") include("core/paths.jl") include("core/show.jl") diff --git a/src/core/connections.jl b/src/core/connections.jl index 35b1e725e..22a71605d 100644 --- a/src/core/connections.jl +++ b/src/core/connections.jl @@ -632,8 +632,5 @@ function add_connector_comps!(obj::AbstractCompositeComponentDef) end end - # Save the sorted component order for processing - # obj.sorted_comps = _topological_sort(obj) - return nothing end diff --git a/src/core/order.jl b/src/core/order.jl deleted file mode 100644 index caca55533..000000000 --- a/src/core/order.jl +++ /dev/null @@ -1,64 +0,0 @@ -# -# Support for automatic ordering of components -# - -""" - dependencies(md::ModelDef, comp_path::ComponentPath) - -Return the set of component names that `comp_path` in `md` depends one, i.e., -sources for which `comp_name` is the destination of an internal connection. -""" -function dependencies(md::ModelDef, comp_path::ComponentPath) - conns = internal_param_conns(md) - # For the purposes of the DAG, we don't treat dependencies on [t-1] as an ordering constraint - deps = Set(c.src_comp_path for c in conns if (c.dst_comp_path == comp_path && c.offset == 0)) - return deps -end - -""" - comp_graph(md::ModelDef) - -Return a MetaGraph containing a directed (LightGraph) graph of the components of -ModelDef `md`. Each vertex has a :name property with its component name. -""" -function comp_graph(md::ModelDef) - comp_paths = [c.comp_path for c in compdefs(md)] - graph = MetaDiGraph() - - for comp_path in comp_paths - add_vertex!(graph, :path, comp_path) - end - - set_indexing_prop!(graph, :path) - - for comp_path in comp_paths - for dep_path in dependencies(md, comp_path) - src = graph[dep_path, :path] - dst = graph[comp_path, :path] - add_edge!(graph, src, dst) - end - end - - #TODO: for now we can allow cycles since we aren't using the offset - # if is_cyclic(graph) - # error("Component graph contains a cycle") - # end - - return graph -end - -""" - _topological_sort(md::ModelDef) - -Build a directed acyclic graph referencing the positions of the components in -the OrderedDict of model `md`, tracing dependencies to create the DAG. -Perform a topological sort on the graph for the given model and return a vector -of component paths in the order that will ensure dependencies are processed -prior to dependent components. -""" -function _topological_sort(md::ModelDef) - graph = comp_graph(md) - ordered = topological_sort_by_dfs(graph) - paths = map(i -> graph[i, :path], ordered) - return paths -end