Skip to content

Commit

Permalink
Use explicit imports (#249)
Browse files Browse the repository at this point in the history
* make all using statements explicit imports

* add explicit imports testing to test suite

* add more explanation in comment

* bump version number

* new version of KrylovKit, extend VectorInterface compatibility

* add version constraint

* fix tests

---------

Co-authored-by: Joachim Brand <joachim.brand@gmail.com>
  • Loading branch information
joachimbrand and joachimbrand authored Mar 23, 2024
1 parent 3f1dd72 commit b4b8e44
Show file tree
Hide file tree
Showing 15 changed files with 116 additions and 60 deletions.
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Rimu"
uuid = "c53c40cc-bd84-11e9-2cf4-a9fde2b9386e"
authors = ["Joachim Brand <j.brand@massey.ac.nz>"]
version = "0.11.1"
version = "0.11.2"

[deps]
Arrow = "69666777-d1a9-59fb-9406-91d4454c9d45"
Expand Down Expand Up @@ -56,7 +56,7 @@ Distributions = "0.25"
FFTW = "1"
Folds = "0.2"
HypergeometricFunctions = "0.3"
KrylovKit = "0.6"
KrylovKit = "0.6, 0.7"
MPI = "0.20"
MacroTools = "0.5"
Measurements = "2"
Expand Down
7 changes: 4 additions & 3 deletions ext/KrylovKitExt.jl
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
module KrylovKitExt

using Rimu
using KrylovKit
using LinearAlgebra
using KrylovKit: KrylovKit, EigSorter, eigsolve
using LinearAlgebra: LinearAlgebra, mul!, ishermitian, issymmetric
using Rimu: Rimu, AbstractDVec, AbstractHamiltonian, IsDeterministic, PDVec,
PDWorkingMemory, scale!!, working_memory, zerovector

const U = Union{Symbol,EigSorter}

Expand Down
10 changes: 5 additions & 5 deletions src/BitStringAddresses/BitStringAddresses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ Module with types and methods pertaining to bitstring addresses.
```
module BitStringAddresses

using LinearAlgebra
using StaticArrays
using SparseArrays
using Setfield
using Parameters
using LinearAlgebra: LinearAlgebra, I, dot
using Parameters: Parameters, @unpack
using Setfield: Setfield, @set, @set!, setindex
using SparseArrays: SparseArrays, SparseVector, nonzeros, rowvals, spzeros
using StaticArrays: StaticArrays, @MVector, FieldVector, MVector, SA, SVector

using Base.Cartesian

Expand Down
20 changes: 12 additions & 8 deletions src/DictVectors/DictVectors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,23 @@ See [`Interfaces`](@ref).
"""
module DictVectors

using Folds
using LinearAlgebra
using Random
using VectorInterface
using Folds: Folds
using LinearAlgebra: LinearAlgebra, I, dot, , mul!, normalize!, rank
using Random: Random
using VectorInterface: VectorInterface, add, add!, inner, norm, scalartype,
scale, scale!, zerovector, zerovector!, zerovector!!

import MPI

using ..Interfaces
using ..Hamiltonians
using ..StochasticStyles
using ..Interfaces: Interfaces, AbstractDVec, AdjointUnknown,
CompressionStrategy, IsDiagonal, LOStructure,
apply_column!, apply_operator!, compress!,
diagonal_element, offdiagonals, step_stats
using ..Hamiltonians: Hamiltonians, AbstractHamiltonian
using ..StochasticStyles: StochasticStyles, IsDeterministic

import ..Interfaces: deposit!, storage, StochasticStyle, default_style, freeze, localpart,
working_memory, sort_into_targets!
working_memory

export deposit!, storage, walkernumber, dot_from_right
export DVec, InitiatorDVec, PDVec, PDWorkingMemory
Expand Down
9 changes: 9 additions & 0 deletions src/DictVectors/abstractdvec.jl
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,15 @@ function VectorInterface.scale!!(v::AbstractDVec, α::T) where {T<:Number}
return scale(v, α)
end
end
function VectorInterface.scale!!(y::AbstractDVec, v::AbstractDVec, α::T) where {T<:Number}
Y = scalartype(y)
U = scalartype(v)
if promote_type(Y, U, T) == Y && keytype(y) == keytype(v)
return scale!(y, v, α)
else
return scale(v, α)
end
end

LinearAlgebra.mul!(w::AbstractDVec, v::AbstractDVec, α) = scale!(w, v, α)
LinearAlgebra.lmul!(α, v::AbstractDVec) = scale!(v, α)
Expand Down
18 changes: 13 additions & 5 deletions src/Hamiltonians/Hamiltonians.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,21 @@ Other
"""
module Hamiltonians

using Parameters, StaticArrays, LinearAlgebra, SparseArrays
using FFTW
using Setfield
using SpecialFunctions, HypergeometricFunctions, Combinatorics, TupleTools, DataFrames
using Combinatorics: Combinatorics, multiset_permutations,
with_replacement_combinations
using DataFrames: DataFrames, DataFrame, transform
using FFTW: FFTW, fft
using HypergeometricFunctions: HypergeometricFunctions, _₃F₂
using LinearAlgebra: LinearAlgebra, I, diag, dot, ishermitian, issymmetric,
mul!, norm
using Parameters: Parameters, @unpack
using Setfield: Setfield
using SparseArrays: SparseArrays, nnz, nzrange, sparse
using SpecialFunctions: SpecialFunctions, gamma
using StaticArrays: StaticArrays, SA, SMatrix, SVector
using TupleTools: TupleTools

using ..BitStringAddresses

using ..Interfaces
import ..Interfaces: diagonal_element, num_offdiagonals, get_offdiagonal, starting_address,
offdiagonals, random_offdiagonal, LOStructure, allowed_address_type
Expand Down
6 changes: 2 additions & 4 deletions src/Interfaces/Interfaces.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,8 @@ Follow the links for the definitions of the interfaces!
"""
module Interfaces

using Reexport

@reexport using LinearAlgebra
@reexport using VectorInterface
using LinearAlgebra: LinearAlgebra, diag
using VectorInterface: VectorInterface, add, zerovector!

import OrderedCollections: freeze

Expand Down
14 changes: 9 additions & 5 deletions src/RMPI/RMPI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ using Rimu.RMPI
module RMPI

import MPI
using Rimu
using LinearAlgebra
using Random
using StaticArrays
using VectorInterface

using LinearAlgebra: LinearAlgebra, I, dot,
using Random: Random
using StaticArrays: StaticArrays, SVector
using VectorInterface: VectorInterface, add, zerovector

using Rimu: Rimu, AbstractDVec, AbstractFockAddress, DictVectors, IsDiagonal,
LOStructure, StochasticStyle, deposit!, diagonal_element, freeze,
localpart, offdiagonals, storage, val, walkernumber

import Rimu: sort_into_targets!
import ..DictVectors: mpi_rank, mpi_comm, mpi_size
Expand Down
25 changes: 14 additions & 11 deletions src/Rimu.jl
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
module Rimu

using Arrow
using DataFrames
using DataStructures
using LinearAlgebra
using OrderedCollections # for LittleDict
using Parameters
using Reexport
using Setfield
using StaticArrays
using StatsBase
using ProgressLogging
using Arrow: Arrow
using DataFrames: DataFrames, DataFrame, metadata
using DataStructures: DataStructures
using LinearAlgebra: LinearAlgebra, dot, isdiag
using OrderedCollections: OrderedCollections, LittleDict, freeze
using Parameters: Parameters, @pack!, @unpack, @with_kw
using ProgressLogging: ProgressLogging, @logprogress, @withprogress
using Reexport: Reexport, @reexport
using Setfield: Setfield
using StaticArrays: StaticArrays, SVector
using StatsBase: StatsBase
using TerminalLoggers: TerminalLogger
using Logging: ConsoleLogger
import ConsoleProgressMonitor
import TOML

@reexport using LinearAlgebra
@reexport using VectorInterface

"""
Rimu.PACKAGE_VERSION
Constant that contains the current `VersionNumber` of `Rimu`.
Expand Down
19 changes: 11 additions & 8 deletions src/RimuIO/RimuIO.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@ Provides convenience functions:
"""
module RimuIO

using ..DictVectors
using ..Interfaces
using ..BitStringAddresses

using Arrow
using DataFrames
using BSON
using StaticArrays
using Arrow: Arrow, ArrowTypes
using BSON: BSON, bson
using DataFrames: DataFrames, DataFrame, metadata!
using StaticArrays: StaticArrays, SVector

using Rimu.BitStringAddresses: BitStringAddresses, BitString, BoseFS,
CompositeFS, FermiFS, SortedParticleList,
num_modes, num_particles
using Rimu.DictVectors: DictVectors
using Rimu.Interfaces: Interfaces, localpart, storage


export save_df, load_df, save_dvec, load_dvec

Expand Down
18 changes: 14 additions & 4 deletions src/StatsTools/StatsTools.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,27 @@ Tools for the statistical analysis of Monte Carlo data.
"""
module StatsTools

using Statistics, MonteCarloMeasurements, Distributions, DataFrames
using StrLiterals, StrFormat # for Base.show() methods
using Random, SpecialFunctions, LinearAlgebra
using DataFrames: DataFrames, DataFrame
using Distributions: Distributions, Chisq, Distribution, MvNormal, Normal,
cquantile, var
using LinearAlgebra: LinearAlgebra, diag, norm
using MonteCarloMeasurements: MonteCarloMeasurements, AbstractParticles, pcov,
pextrema, piterate, pmaximum, pmean, pmedian,
pmiddle, pminimum, pquantile
using Random: Random
using SpecialFunctions: SpecialFunctions, erf
using Statistics: Statistics
using StrFormat: StrFormat, @f_str
using StrLiterals: StrLiterals

import ProgressLogging, Folds
import MacroTools
import Measurements

import Statistics: cov
import Measurements: measurement
import MonteCarloMeasurements: Particles
import Base: show, NamedTuple
import Base: NamedTuple

export growth_witness, smoothen
export blocking_analysis, blocking_analysis_data, mean_and_se
Expand Down
9 changes: 5 additions & 4 deletions src/StochasticStyles/StochasticStyles.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@ setting a [`CompressionStrategy`](@ref).
"""
module StochasticStyles

using StaticArrays
using StatsBase
using ..Rimu: MultiScalar, localpart
using StaticArrays: StaticArrays
using StatsBase: StatsBase, sample

using ..Rimu: MultiScalar

using ..Interfaces
import ..Interfaces:
deposit!, diagonal_element, offdiagonals, random_offdiagonal, default_style,
apply_column!, step_stats, compress!
apply_column!, step_stats, compress!, localpart
export
StochasticStyle, IsStochasticInteger, IsDeterministic, IsStochasticWithThreshold,
IsDynamicSemistochastic, StyleUnknown, Exact, WithReplacement, DynamicSemistochastic,
Expand Down
4 changes: 4 additions & 0 deletions test/DictVectors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,13 @@ function test_dvec_interface(type; kwargs...)
@testset "scale(!)" begin
u = type(1 => 1.0 + im, 2 => -2.0im; kwargs...)
v = type(1 => 3.5 + 3.5im, 2 => -7.0im; kwargs...)
w = type(1 => 3.5 + 3.5im, 2 => -7.0im, 3 => 0; kwargs...)
y = type(1 => 0; kwargs...) # different value type

@test scale(u, 3.5) == 3.5u == v
@test scale!!(copy(u), 3.5) == scale!(copy(u), 3.5) == v
@test scale!!(y, copy(u), 3.5) == v y
@test scale!!(copy(w), copy(u), 3.5) == scale!(copy(w), copy(u), 3.5) == v
@test scale!(zerovector(u), u, 3.5) == v
@test lmul!(3.5, copy(u)) == v
@test rmul!(copy(u), 3.5) == v
Expand Down
1 change: 1 addition & 0 deletions test/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Arrow = "69666777-d1a9-59fb-9406-91d4454c9d45"
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7"
KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
Expand Down
12 changes: 11 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ using Logging, TerminalLoggers
using TOML
using Test
using Rimu.StatsTools

using ExplicitImports: check_no_implicit_imports

# assuming VERSION ≥ v"1.6"
# the following is needed because random numbers of collections are computed
Expand Down Expand Up @@ -157,4 +157,14 @@ end
include("doctests.jl")
end

VERSION v"1.7" && @safetestset "ExplicitImports" begin
using Rimu
using ExplicitImports
# Check that no implicit imports are used in the Rimu module.
# See https://ericphanson.github.io/ExplicitImports.jl/stable/
@test check_no_implicit_imports(Rimu; skip=(Rimu, Base, Core, VectorInterface)) === nothing
# If this test fails, make your import statements explicit.
# For example, replace `using Foo` with `using Foo: bar, baz`.
end

# Note: Running Rimu with several MPI ranks is tested seperately on GitHub CI and not here.

0 comments on commit b4b8e44

Please sign in to comment.