module CellularPotts

using OffsetArrays, #Allow some arrays to be zero indexed to include medium
      GLMakie, #For plotting and making the GUI (also exports AbstractPlotting)
      Colors, #More color options for the cells (e.g. :Purples)
      StatsBase, Random, #Currently just used for countmap, inverse_rle; shuffle
      SparseArrays, #For creating large adjacency matrices
      LinearAlgebra, #Additional functionality for arrays
      LightGraphs, #Needed for creating graphs that look like graphDimension
      Metis, #lightning fast method for partitioning graphs (only thing in this package that is not Julia)
      TimerOutputs, #looking for allocations
      Catalyst, #Testing reactions DLS
      DiffEqJump, #Discrete Differential Equations
      Plots #Well...for faster plotting


include("BaseFunctions.jl")
include("CellActions.jl")
include("InitializeCells.jl")
include("MarkovStep.jl")
include("Gui.jl")

export 

#BaseFunctions.jl
      Hamiltonian,
      AdhesionPenalty,
      VolumePenalty,
      ModelParameters,
      NamedGraph,
      CellAttributes,
      CellPotts,
      UpdateConnections!,

#MarkovStep.jl
      MHStepInfo,
      MHStep!,
      MHStep_naive!,

#CellActions.jl
      CellDivision!,
      CellDeath!,

#Gui.jl
      CellGUI

end
