CondaPkg.jl icon indicating copy to clipboard operation
CondaPkg.jl copied to clipboard

Testing a package that depend on CondaPkg.jl creates a new environment every time

Open cuihantao opened this issue 1 year ago • 4 comments

Greetings,

Thanks for the very nice package for managing packages!

I'd like to fix the Conda environment when running tests for a package that depends on CondaPkg. Creating a new environment every time seems wasteful (a lot of writes to the drive) when the Python packages are sizable. Could you suggest a way to work around it?

This is what I tried: I'm using PreferenceTools.jl and have the proper env set in the main REPL; this is verified to be working. I suspect that the setting does not propagate into the test environment, as everything for testing was compiled from scratch, including a random path to a new conda environment.

Thanks in advance!

cuihantao avatar Apr 13 '24 20:04 cuihantao

My workaround is to edit runtests.jl. At the very beginning, insert

if gethostname() == "MY_DEV_MACHINE_NAME"
    ENV["JULIA_CONDAPKG_ENV"] = "/PATH/TO/MY/DEV/MAMBA/ENV"
    ENV["JULIA_CONDAPKG_OFFLINE"] = true
end

I guess a better solution is to resort to the same temp dir for tests. The temp dir should be created the first time the tests are run on a computer, but we shall stay with the same temp folder to avoid unnecessary disk writes.

I pinned it down to resolve(), but I'm not sure how the temp dir is passed to conda_env when it's in a test environment. Otherwise, I can help fixing it.

cuihantao avatar Apr 14 '24 17:04 cuihantao

For an unknown reason, the environmental variables are not respected in the very first test after updating deps. This is the full output. Not sure if that's accidental. I can re-check after any deps get updated again.

(@v1.10) pkg> activate .
  Activating project at `~/repos/Andes2j`

(Andes2j) pkg> st
Project Andes2j v0.1.0
Status `~/repos/Andes2j/Project.toml`
  [93a26e3f] Andes v1.0.0 `~/repos/Andes.jl`
  [60fd53ec] Andes2jModels v1.0.0-DEV `~/repos/Andes2jModels`
  [459566f4] DiffEqCallbacks v3.6.0
  [0c46a032] DifferentialEquations v7.13.0
  [ffbed154] DocStringExtensions v0.9.3
  [f6369f11] ForwardDiff v0.10.36
  [ef3ab10e] KLU v0.6.0
  [7ed4a6bd] LinearSolve v2.28.0
  [bdcacae8] LoopVectorization v0.12.169
  [33e6dc65] MKL v0.6.3
  [1dea7af3] OrdinaryDiffEq v6.74.1
  [d236fae5] PreallocationTools v0.4.20
  [ba661fbb] PreferenceTools v0.1.2
  [6099a3de] PythonCall v0.9.19
  [0bca4576] SciMLBase v2.32.0
  [47a9eef4] SparseDiffTools v2.17.0
  [09ab397b] StructArrays v0.6.18
  [c3572dad] Sundials v4.24.0
  [0c5d862f] Symbolics v5.28.0
  [37e2e46d] LinearAlgebra
  [de0858da] Printf
  [2f01184e] SparseArrays v1.10.0

(Andes2j) pkg> test
     Testing Andes2j
      Status `/tmp/jl_0VMNiW/Project.toml`
  [93a26e3f] Andes v1.0.0 `~/repos/Andes.jl`
  [eb82b4c1] Andes2j v0.1.0 `~/repos/Andes2j`
  [6e4b80f9] BenchmarkTools v1.5.0
  [2774e3e8] NLsolve v4.5.1
  [56ddb016] Logging
  [8dfed614] Test
      Status `/tmp/jl_0VMNiW/Manifest.toml`
  [47edcb42] ADTypes v0.2.7
  [1520ce14] AbstractTrees v0.4.5
  [7d9f7c33] Accessors v0.1.36
  [79e6a3ab] Adapt v4.0.4
  [93a26e3f] Andes v1.0.0 `~/repos/Andes.jl`
  [eb82b4c1] Andes2j v0.1.0 `~/repos/Andes2j`
  [60fd53ec] Andes2jModels v1.0.0-DEV `~/repos/Andes2jModels`
  [ec485272] ArnoldiMethod v0.4.0
  [4fba245c] ArrayInterface v7.9.0
  [4c555306] ArrayLayouts v1.9.2
  [aae01518] BandedMatrices v1.6.1
  [6e4b80f9] BenchmarkTools v1.5.0
  [e2ed5e7c] Bijections v0.1.6
  [62783981] BitTwiddlingConvenienceFunctions v0.1.5
  [764a87c0] BoundaryValueDiffEq v5.7.1
  [fa961155] CEnum v0.5.0
  [2a0fbf3d] CPUSummary v0.2.4
  [49dc2e85] Calculus v0.5.1
  [d360d2e6] ChainRulesCore v1.23.0
  [fb6a15b2] CloseOpenIntervals v0.1.12
  [861a8166] Combinatorics v1.0.2
  [38540f10] CommonSolve v0.2.4
  [bbf7d656] CommonSubexpressions v0.3.0
  [34da2185] Compat v4.14.0
  [b152e2b5] CompositeTypes v0.1.4
  [a33af91c] CompositionsBase v0.1.2
  [2569d6c7] ConcreteStructs v0.2.3
  [992eb4ea] CondaPkg v0.2.22
  [187b0558] ConstructionBase v1.5.5
  [adafc99b] CpuId v0.3.1
  [9a962f9c] DataAPI v1.16.0
  [864edb3b] DataStructures v0.18.19
  [e2d170a0] DataValueInterfaces v1.0.0
  [bcd4f6db] DelayDiffEq v5.47.1
  [2b5f629d] DiffEqBase v6.149.0
  [459566f4] DiffEqCallbacks v3.6.0
  [77a26b50] DiffEqNoiseProcess v5.21.0
  [163ba53b] DiffResults v1.1.0
  [b552c78f] DiffRules v1.15.1
  [0c46a032] DifferentialEquations v7.13.0
  [b4f34e82] Distances v0.10.11
  [31c24e10] Distributions v0.25.107
  [ffbed154] DocStringExtensions v0.9.3
  [5b8099bc] DomainSets v0.7.12
  [fa6b7ba4] DualNumbers v0.6.8
  [7c1d4256] DynamicPolynomials v0.5.6
  [4e289a0a] EnumX v1.0.4
⌃ [f151be2c] EnzymeCore v0.6.6
  [d4d017d3] ExponentialUtilities v1.26.1
  [e2ba6199] ExprTools v0.1.10
  [9d29842c] FastAlmostBandedMatrices v0.1.1
  [7034ab61] FastBroadcast v0.2.8
  [9aa1b823] FastClosures v0.3.2
  [29a986be] FastLapackInterface v2.0.2
  [1a297f60] FillArrays v1.10.0
  [6a86dc24] FiniteDiff v2.23.0
  [1fa38f19] Format v1.3.7
  [f6369f11] ForwardDiff v0.10.36
  [069b7b12] FunctionWrappers v1.1.3
  [77dc65aa] FunctionWrappersWrappers v0.1.3
  [d9f16b24] Functors v0.4.10
  [46192b85] GPUArraysCore v0.1.6
  [c145ed77] GenericSchur v0.5.4
  [86223c79] Graphs v1.10.0
  [3e5b6fbb] HostCPUFeatures v0.1.16
  [34004b35] HypergeometricFunctions v0.3.23
  [615f187c] IfElse v0.1.1
  [d25df0c9] Inflate v0.1.4
  [8197267c] IntervalSets v0.7.10
  [3587e190] InverseFunctions v0.1.13
  [92d709cd] IrrationalConstants v0.2.2
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.5.0
  [682c06a0] JSON v0.21.4
  [0f8b85d8] JSON3 v1.14.0
  [ccbc3e58] JumpProcesses v9.11.1
  [ef3ab10e] KLU v0.6.0
  [ba0b0d4f] Krylov v0.9.5
  [b964fa9f] LaTeXStrings v1.3.1
  [2ee39098] LabelledArrays v1.15.1
  [984bce1d] LambertW v0.4.6
  [23fbe1c1] Latexify v0.16.2
  [10f19ff3] LayoutPointers v0.1.15
  [5078a376] LazyArrays v1.9.1
  [2d8b4e74] LevyArea v1.0.0
  [d3d80556] LineSearches v7.2.0
  [7ed4a6bd] LinearSolve v2.28.0
  [2ab3a3ac] LogExpFunctions v0.3.27
  [bdcacae8] LoopVectorization v0.12.169
  [33e6dc65] MKL v0.6.3
  [1914dd2f] MacroTools v0.5.13
  [d125e4d3] ManualMemory v0.1.8
  [a3b82374] MatrixFactorizations v2.2.0
  [bb5d69b7] MaybeInplace v0.1.2
  [0b3b1443] MicroMamba v0.1.14
  [e1d29d7a] Missings v1.2.0
  [46d2c3a1] MuladdMacro v0.2.4
  [102ac46a] MultivariatePolynomials v0.5.4
  [d8a4904e] MutableArithmetics v1.4.2
  [d41bc354] NLSolversBase v7.8.3
  [2774e3e8] NLsolve v4.5.1
  [77ba4419] NaNMath v1.0.2
  [8913a72c] NonlinearSolve v3.9.1
  [6fe1bfb0] OffsetArrays v1.13.0
  [429524aa] Optim v1.9.4
  [bac558e1] OrderedCollections v1.6.3
  [1dea7af3] OrdinaryDiffEq v6.74.1
  [90014a1f] PDMats v0.11.31
  [65ce6f38] PackageExtensionCompat v1.0.2
  [d96e819e] Parameters v0.12.3
  [69de0a69] Parsers v2.8.1
  [fa939f87] Pidfile v1.3.0
  [e409e4f3] PoissonRandom v0.4.4
  [f517fe37] Polyester v0.7.12
  [1d0040c9] PolyesterWeave v0.2.1
  [85a6dd25] PositiveFactorizations v0.2.4
  [d236fae5] PreallocationTools v0.4.20
  [aea7be01] PrecompileTools v1.2.1
  [ba661fbb] PreferenceTools v0.1.2
  [21216c6a] Preferences v1.4.3
  [6099a3de] PythonCall v0.9.19
  [1fd47b50] QuadGK v2.9.4
  [74087812] Random123 v1.7.0
  [e6cf234a] RandomNumbers v1.5.3
  [3cdcf5f2] RecipesBase v1.3.4
  [731186ca] RecursiveArrayTools v3.13.0
  [f2c3362d] RecursiveFactorization v0.2.22
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.0
  [ae5879a3] ResettableStacks v1.1.1
  [79098fc4] Rmath v0.7.1
  [7e49a35a] RuntimeGeneratedFunctions v0.5.12
  [94e857df] SIMDTypes v0.1.0
  [476501e8] SLEEFPirates v0.6.42
  [0bca4576] SciMLBase v2.32.0
  [c0aeaf25] SciMLOperators v0.3.8
  [53ae85a6] SciMLStructures v1.1.0
  [6c6a2e73] Scratch v1.2.1
  [efcf1570] Setfield v1.1.1
  [727e6d20] SimpleNonlinearSolve v1.7.0
  [699a6c99] SimpleTraits v0.9.4
  [ce78b400] SimpleUnPack v1.1.0
  [a2af1166] SortingAlgorithms v1.2.1
  [47a9eef4] SparseDiffTools v2.17.0
  [e56a9233] Sparspak v0.3.9
  [276daf66] SpecialFunctions v2.3.1
  [aedffcd0] Static v0.8.10
  [0d7ed370] StaticArrayInterface v1.5.0
  [90137ffa] StaticArrays v1.9.3
  [1e83bf80] StaticArraysCore v1.4.2
  [82ae8749] StatsAPI v1.7.0
  [2913bbd2] StatsBase v0.34.3
  [4c63d2b9] StatsFuns v1.3.1
  [9672c7b4] SteadyStateDiffEq v2.1.0
  [789caeaf] StochasticDiffEq v6.65.1
  [7792a7ef] StrideArraysCore v0.5.3
  [09ab397b] StructArrays v0.6.18
  [856f2bd8] StructTypes v1.10.0
  [c3572dad] Sundials v4.24.0
  [2efcf032] SymbolicIndexingInterface v0.3.16
  [19f23fe9] SymbolicLimits v0.2.0
  [d1185830] SymbolicUtils v1.5.1
  [0c5d862f] Symbolics v5.28.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.11.1
  [8290d209] ThreadingUtilities v0.5.2
  [a759f4b9] TimerOutputs v0.5.23
  [d5829a12] TriangularSolve v0.1.21
  [410a4b4d] Tricks v0.1.8
  [781d530d] TruncatedStacktraces v1.4.0
  [3a884ed6] UnPack v1.0.2
  [a7c27f48] Unityper v0.1.6
  [e17b2a0c] UnsafePointers v1.0.0
  [3d5dd08c] VectorizationBase v0.21.65
  [19fa3120] VertexSafeGraphs v0.2.0
  [1d5cc7b8] IntelOpenMP_jll v2024.0.2+0
  [856f044c] MKL_jll v2024.0.0+0
  [efe28fd5] OpenSpecFun_jll v0.5.5+0
  [f50d1b31] Rmath_jll v0.4.0+0
⌅ [fb77eaff] Sundials_jll v5.2.2+0
  [f8abcde7] micromamba_jll v1.5.8+0
  [0dad84c5] ArgTools v1.1.1
  [56f22d72] Artifacts
  [2a0f44e3] Base64
  [ade2ca70] Dates
  [8ba89e20] Distributed
  [f43a241f] Downloads v1.6.0
  [7b1f6079] FileWatching
  [9fa8497b] Future
  [b77e0a4c] InteractiveUtils
  [4af54fe1] LazyArtifacts
  [b27032c2] LibCURL v0.6.4
  [76f85450] LibGit2
  [8f399da3] Libdl
  [37e2e46d] LinearAlgebra
  [56ddb016] Logging
  [d6f4376e] Markdown
  [a63ad114] Mmap
  [ca575930] NetworkOptions v1.2.0
  [44cfe95a] Pkg v1.10.0
  [de0858da] Printf
  [9abbd945] Profile
  [3fa0cd96] REPL
  [9a3f8284] Random
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization
  [1a1011a3] SharedArrays
  [6462fe0b] Sockets
  [2f01184e] SparseArrays v1.10.0
  [10745b16] Statistics v1.10.0
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.3
  [a4e569a6] Tar v1.10.0
  [8dfed614] Test
  [cf7118a7] UUIDs
  [4ec0a83e] Unicode
  [e66e0078] CompilerSupportLibraries_jll v1.1.0+0
  [deac9b47] LibCURL_jll v8.4.0+0
  [e37daf67] LibGit2_jll v1.6.4+0
  [29816b5a] LibSSH2_jll v1.11.0+1
  [c8ffd9c3] MbedTLS_jll v2.28.2+1
  [14a3606d] MozillaCACerts_jll v2023.1.10
  [4536629a] OpenBLAS_jll v0.3.23+4
  [05823500] OpenLibm_jll v0.8.1+2
  [bea87d4a] SuiteSparse_jll v7.2.1+1
  [83775a58] Zlib_jll v1.2.13+1
  [8e850b90] libblastrampoline_jll v5.8.0+1
  [8e850ede] nghttp2_jll v1.52.0+1
  [3f19e933] p7zip_jll v17.4.0+2
        Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading.
Precompiling project...
  55 dependencies successfully precompiled in 202 seconds. 202 already precompiled.
  1 dependency had output during precompilation:
┌ SciMLBase → SciMLBasePythonCallExt
│      CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
│      CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
│      CondaPkg Resolving changes
│               + andes
│               + kvxopt
│               + libstdcxx-ng
│               + python
│      CondaPkg Creating environment
│               │ /home/hacui/.julia/artifacts/7973f2c7725e2d0eef7a95159454c4145f0945a2/bin/micromamba
│               │ -r /home/hacui/.julia/scratchspaces/0b3b1443-0f03-428d-bdfb-f27f9c1191ea/root
│               │ create
│               │ -y
│               │ -p /tmp/jl_0VMNiW/.CondaPkg/env
│               │ --override-channels
│               │ --no-channel-priority
│               │ andes[version='*']
│               │ kvxopt[version='>1.3.0.0']
│               │ libstdcxx-ng[version='>=3.4,<13.0']
│               │ python[version='>=3.7,<4',channel='conda-forge',build='*cpython*']
│               └ -c conda-forge
│  
│  Transaction
│  
│    Prefix: /tmp/jl_0VMNiW/.CondaPkg/env
│  
│    Updating specs:
│  
│     - andes=*
│     - kvxopt[version='>1.3.0.0']
│     - libstdcxx-ng[version='>=3.4,<13.0']
│     - conda-forge::python[version='>=3.7,<4',build=*cpython*]
│  
│  
│    Package                  Version  Build                  Channel           Size
│  ───────────────────────────────────────────────────────────────────────────────────
│    Install:
│  ───────────────────────────────────────────────────────────────────────────────────
│  
│    + python_abi                3.12  4_cp312                conda-forge     Cached
│    + libstdcxx-ng            12.3.0  h0f45ef3_5             conda-forge     Cached
│    + _libgcc_mutex              0.1  conda_forge            conda-forge     Cached
│    + ld_impl_linux-64          2.40  h41732ed_0             conda-forge     Cached
│    + ca-certificates       2024.2.2  hbcca054_0             conda-forge     Cached
│    + libgomp                 13.2.0  h807b86a_5             conda-forge     Cached
│    + _openmp_mutex              4.5  2_gnu                  conda-forge     Cached
│    + libgcc-ng               13.2.0  h807b86a_5             conda-forge     Cached
│    + xorg-libxdmcp            1.1.3  h7f98852_0             conda-forge     Cached
│    + pthread-stubs              0.4  h36c2ea0_1001          conda-forge     Cached
│    + libiconv                  1.17  hd590300_2             conda-forge     Cached
│    + icu                       73.2  h59595ed_0             conda-forge     Cached
│    + libwebp-base             1.3.2  hd590300_1             conda-forge     Cached
│    + metis                    5.1.0  h59595ed_1007          conda-forge     Cached
│    + gmp                      6.3.0  h59595ed_1             conda-forge     Cached
│    + libbrotlicommon          1.1.0  hd590300_1             conda-forge     Cached
│    + libdeflate                1.20  hd590300_0             conda-forge     Cached
│    + lerc                     4.0.0  h27087fc_0             conda-forge     Cached
│    + libjpeg-turbo            3.0.0  hd590300_1             conda-forge     Cached
│    + libqdldl                 0.1.5  h27087fc_1             conda-forge     Cached
│    + xorg-libxau             1.0.11  hd590300_0             conda-forge     Cached
│    + openssl                  3.2.1  hd590300_1             conda-forge     Cached
│    + libxcrypt               4.4.36  hd590300_1             conda-forge     Cached
│    + libexpat                 2.6.2  h59595ed_0             conda-forge     Cached
│    + libzlib                 1.2.13  hd590300_5             conda-forge     Cached
│    + libffi                   3.4.2  h7f98852_5             conda-forge     Cached
│    + bzip2                    1.0.8  hd590300_5             conda-forge     Cached
│    + yaml                     0.2.5  h7f98852_2             conda-forge     Cached
│    + ncurses           6.4.20240210  h59595ed_0             conda-forge     Cached
│    + libgfortran5            13.2.0  ha4646dd_5             conda-forge     Cached
│    + libuuid                 2.38.1  h0b41bf4_0             conda-forge     Cached
│    + libnsl                   2.0.1  hd590300_0             conda-forge     Cached
│    + xz                       5.2.6  h166bdaf_0             conda-forge     Cached
│    + mpfr                     4.2.1  h9458935_1             conda-forge     Cached
│    + glpk                       5.0  h445213a_0             conda-forge     Cached
│    + libbrotlienc             1.1.0  hd590300_1             conda-forge     Cached
│    + libbrotlidec             1.1.0  hd590300_1             conda-forge     Cached
│    + libosqp                  0.6.3  h59595ed_0             conda-forge     Cached
│    + libxcb                    1.15  h0b41bf4_0             conda-forge     Cached
│    + zstd                     1.5.5  hfc55251_0             conda-forge     Cached
│    + libllvm14               14.0.6  hcd5def8_4             conda-forge     Cached
│    + libpng                  1.6.43  h2797004_0             conda-forge     Cached
│    + tk                      8.6.13  noxft_h4845f30_101     conda-forge     Cached
│    + libsqlite               3.45.2  h2797004_0             conda-forge     Cached
│    + readline                   8.2  h8228510_1             conda-forge     Cached
│    + libgfortran-ng          13.2.0  h69a702a_5             conda-forge     Cached
│    + libxml2                 2.12.6  h232c23b_1             conda-forge     Cached
│    + brotli-bin               1.1.0  hd590300_1             conda-forge     Cached
│    + libtiff                  4.6.0  h1dd3fc0_3             conda-forge     Cached
│    + freetype                2.12.1  h267a509_2             conda-forge     Cached
│    + fftw                    3.3.10  nompi_hc118613_108     conda-forge     Cached
│    + libopenblas             0.3.27  pthreads_h413a1c8_0    conda-forge     Cached
│    + libhwloc                2.10.0  default_h2fb2949_1000  conda-forge     Cached
│    + brotli                   1.1.0  hd590300_1             conda-forge     Cached
│    + openjpeg                 2.5.2  h488ebb8_0             conda-forge     Cached
│    + lcms2                     2.16  hb7c19ff_0             conda-forge     Cached
│    + libblas                  3.9.0  22_linux64_openblas    conda-forge     Cached
│    + tbb                  2021.12.0  h00ab1b0_0             conda-forge     Cached
│    + libcblas                 3.9.0  22_linux64_openblas    conda-forge     Cached
│    + liblapack                3.9.0  22_linux64_openblas    conda-forge     Cached
│    + gsl                        2.7  he838d99_0             conda-forge     Cached
│    + dsdp                       5.8  hd9d9efa_1203          conda-forge     Cached
│    + suitesparse             5.10.1  h5a4f163_3             conda-forge     Cached
│    + tzdata                   2024a  h0c530f3_0             conda-forge     Cached
│    + python                  3.12.2  hab00c5b_0_cpython     conda-forge     Cached
│    + wheel                   0.43.0  pyhd8ed1ab_1           conda-forge     Cached
│    + setuptools              69.5.1  pyhd8ed1ab_0           conda-forge     Cached
│    + pip                       24.0  pyhd8ed1ab_0           conda-forge     Cached
│    + six                     1.16.0  pyh6c4a22f_0           conda-forge     Cached
│    + mpmath                   1.3.0  pyhd8ed1ab_0           conda-forge     Cached
│    + colorama                 0.4.6  pyhd8ed1ab_0           conda-forge     Cached
│    + munkres                  1.1.4  pyh9f0ad1d_0           conda-forge     Cached
│    + pyparsing                3.1.2  pyhd8ed1ab_0           conda-forge     Cached
│    + packaging                 24.0  pyhd8ed1ab_0           conda-forge     Cached
│    + cycler                  0.12.1  pyhd8ed1ab_0           conda-forge     Cached
│    + certifi               2024.2.2  pyhd8ed1ab_0           conda-forge     Cached
│    + et_xmlfile               1.1.0  pyhd8ed1ab_0           conda-forge     Cached
│    + pytz                    2024.1  pyhd8ed1ab_0           conda-forge     Cached
│    + python-tzdata           2024.1  pyhd8ed1ab_0           conda-forge     Cached
│    + humanfriendly             10.0  pyhd8ed1ab_6           conda-forge     Cached
│    + texttable                1.7.0  pyhd8ed1ab_0           conda-forge     Cached
│    + xlsxwriter               3.1.9  pyhd8ed1ab_0           conda-forge     Cached
│    + ppft                   1.7.6.8  pyhd8ed1ab_0           conda-forge     Cached
│    + pox                      0.3.4  pyhd8ed1ab_0           conda-forge     Cached
│    + dill                     0.3.8  pyhd8ed1ab_0           conda-forge     Cached
│    + python-dateutil          2.9.0  pyhd8ed1ab_0           conda-forge     Cached
│    + sympy                     1.12  pyh04b8f61_3           conda-forge     Cached
│    + tqdm                    4.66.2  pyhd8ed1ab_0           conda-forge     Cached
│    + coloredlogs             15.0.1  pyhd8ed1ab_3           conda-forge     Cached
│    + pillow                  10.3.0  py312hdcec9eb_0        conda-forge     Cached
│    + psutil                   5.9.8  py312h98912ed_0        conda-forge     Cached
│    + llvmlite                0.42.0  py312hb06c811_1        conda-forge     Cached
│    + numpy                   1.26.4  py312heda63a1_0        conda-forge     Cached
│    + kiwisolver               1.4.5  py312h8572e83_1        conda-forge     Cached
│    + chardet                  5.2.0  py312h7900ff3_1        conda-forge     Cached
│    + pyyaml                   6.0.1  py312h98912ed_1        conda-forge     Cached
│    + kvxopt                 1.3.2.0  py312h5c6e270_3        conda-forge     Cached
│    + fonttools               4.51.0  py312h98912ed_0        conda-forge     Cached
│    + openpyxl                 3.1.2  py312h98912ed_1        conda-forge     Cached
│    + multiprocess           0.70.16  py312h98912ed_0        conda-forge     Cached
│    + contourpy                1.2.1  py312h8572e83_0        conda-forge     Cached
│    + scipy                   1.13.0  py312heda63a1_0        conda-forge     Cached
│    + pandas                   2.2.2  py312hfb8ada1_0        conda-forge     Cached
│    + numba                   0.59.1  py312hacefee8_0        conda-forge     Cached
│    + matplotlib-base          3.8.4  py312he5832f3_0        conda-forge     Cached
│    + pathos                   0.3.2  pyhd8ed1ab_1           conda-forge     Cached
│    + andes                    1.9.2  pyhd8ed1ab_0           conda-forge     Cached
│  
│    Summary:
│  
│    Install: 107 packages
│  
│    Total download: 0 B
│  
│  ───────────────────────────────────────────────────────────────────────────────────
│  
│  
│  
│  Transaction starting
│  Linking python_abi-3.12-4_cp312
│  Linking libstdcxx-ng-12.3.0-h0f45ef3_5
│  Linking _libgcc_mutex-0.1-conda_forge
│  Linking ld_impl_linux-64-2.40-h41732ed_0
│  Linking ca-certificates-2024.2.2-hbcca054_0
│  Linking libgomp-13.2.0-h807b86a_5
│  Linking _openmp_mutex-4.5-2_gnu
│  Linking libgcc-ng-13.2.0-h807b86a_5
│  Linking xorg-libxdmcp-1.1.3-h7f98852_0
│  Linking pthread-stubs-0.4-h36c2ea0_1001
│  Linking libiconv-1.17-hd590300_2
│  Linking icu-73.2-h59595ed_0
│  Linking libwebp-base-1.3.2-hd590300_1
│  Linking metis-5.1.0-h59595ed_1007
│  Linking gmp-6.3.0-h59595ed_1
│  Linking libbrotlicommon-1.1.0-hd590300_1
│  Linking libdeflate-1.20-hd590300_0
│  Linking lerc-4.0.0-h27087fc_0
│  Linking libjpeg-turbo-3.0.0-hd590300_1
│  Linking libqdldl-0.1.5-h27087fc_1
│  Linking xorg-libxau-1.0.11-hd590300_0
│  Linking openssl-3.2.1-hd590300_1
│  Linking libxcrypt-4.4.36-hd590300_1
│  Linking libexpat-2.6.2-h59595ed_0
│  Linking libzlib-1.2.13-hd590300_5
│  Linking libffi-3.4.2-h7f98852_5
│  Linking bzip2-1.0.8-hd590300_5
│  Linking yaml-0.2.5-h7f98852_2
│  Linking ncurses-6.4.20240210-h59595ed_0
│  Linking libgfortran5-13.2.0-ha4646dd_5
│  Linking libuuid-2.38.1-h0b41bf4_0
│  Linking libnsl-2.0.1-hd590300_0
│  Linking xz-5.2.6-h166bdaf_0
│  Linking mpfr-4.2.1-h9458935_1
│  Linking glpk-5.0-h445213a_0
│  Linking libbrotlienc-1.1.0-hd590300_1
│  Linking libbrotlidec-1.1.0-hd590300_1
│  Linking libosqp-0.6.3-h59595ed_0
│  Linking libxcb-1.15-h0b41bf4_0
│  Linking zstd-1.5.5-hfc55251_0
│  Linking libllvm14-14.0.6-hcd5def8_4
│  Linking libpng-1.6.43-h2797004_0
│  Linking tk-8.6.13-noxft_h4845f30_101
│  Linking libsqlite-3.45.2-h2797004_0
│  Linking readline-8.2-h8228510_1
│  Linking libgfortran-ng-13.2.0-h69a702a_5
│  Linking libxml2-2.12.6-h232c23b_1
│  Linking brotli-bin-1.1.0-hd590300_1
│  Linking libtiff-4.6.0-h1dd3fc0_3
│  Linking freetype-2.12.1-h267a509_2
│  Linking fftw-3.3.10-nompi_hc118613_108
│  Linking libopenblas-0.3.27-pthreads_h413a1c8_0
│  Linking libhwloc-2.10.0-default_h2fb2949_1000
│  Linking brotli-1.1.0-hd590300_1
│  Linking openjpeg-2.5.2-h488ebb8_0
│  Linking lcms2-2.16-hb7c19ff_0
│  Linking libblas-3.9.0-22_linux64_openblas
│  Linking tbb-2021.12.0-h00ab1b0_0
│  Linking libcblas-3.9.0-22_linux64_openblas
│  Linking liblapack-3.9.0-22_linux64_openblas
│  Linking gsl-2.7-he838d99_0
│  Linking dsdp-5.8-hd9d9efa_1203
│  Linking suitesparse-5.10.1-h5a4f163_3
│  Linking tzdata-2024a-h0c530f3_0
│  Linking python-3.12.2-hab00c5b_0_cpython
│  Linking wheel-0.43.0-pyhd8ed1ab_1
│  Linking setuptools-69.5.1-pyhd8ed1ab_0
│  Linking pip-24.0-pyhd8ed1ab_0
│  Linking six-1.16.0-pyh6c4a22f_0
│  Linking mpmath-1.3.0-pyhd8ed1ab_0
│  Linking colorama-0.4.6-pyhd8ed1ab_0
│  Linking munkres-1.1.4-pyh9f0ad1d_0
│  Linking pyparsing-3.1.2-pyhd8ed1ab_0
│  Linking packaging-24.0-pyhd8ed1ab_0
│  Linking cycler-0.12.1-pyhd8ed1ab_0
│  Linking certifi-2024.2.2-pyhd8ed1ab_0
│  Linking et_xmlfile-1.1.0-pyhd8ed1ab_0
│  Linking pytz-2024.1-pyhd8ed1ab_0
│  Linking python-tzdata-2024.1-pyhd8ed1ab_0
│  Linking humanfriendly-10.0-pyhd8ed1ab_6
│  Linking texttable-1.7.0-pyhd8ed1ab_0
│  Linking xlsxwriter-3.1.9-pyhd8ed1ab_0
│  Linking ppft-1.7.6.8-pyhd8ed1ab_0
│  Linking pox-0.3.4-pyhd8ed1ab_0
│  Linking dill-0.3.8-pyhd8ed1ab_0
│  Linking python-dateutil-2.9.0-pyhd8ed1ab_0
│  Linking sympy-1.12-pyh04b8f61_3
│  Linking tqdm-4.66.2-pyhd8ed1ab_0
│  Linking coloredlogs-15.0.1-pyhd8ed1ab_3
│  Linking pillow-10.3.0-py312hdcec9eb_0
│  Linking psutil-5.9.8-py312h98912ed_0
│  Linking llvmlite-0.42.0-py312hb06c811_1
│  Linking numpy-1.26.4-py312heda63a1_0
│  Linking kiwisolver-1.4.5-py312h8572e83_1
│  Linking chardet-5.2.0-py312h7900ff3_1
│  Linking pyyaml-6.0.1-py312h98912ed_1
│  Linking kvxopt-1.3.2.0-py312h5c6e270_3
│  Linking fonttools-4.51.0-py312h98912ed_0
│  Linking openpyxl-3.1.2-py312h98912ed_1
│  Linking multiprocess-0.70.16-py312h98912ed_0
│  Linking contourpy-1.2.1-py312h8572e83_0
│  Linking scipy-1.13.0-py312heda63a1_0
│  Linking pandas-2.2.2-py312hfb8ada1_0
│  Linking numba-0.59.1-py312hacefee8_0
│  Linking matplotlib-base-3.8.4-py312he5832f3_0
│  Linking pathos-0.3.2-pyhd8ed1ab_1
│  Linking andes-1.9.2-pyhd8ed1ab_0
│  
│  Transaction finished
│  
│  To activate this environment, use:
│  
│      micromamba activate /tmp/jl_0VMNiW/.CondaPkg/env
│  
│  Or to execute a single command in this environment, use:
│  
│      micromamba run -p /tmp/jl_0VMNiW/.CondaPkg/env mycommand
└  
     Testing Running tests...
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
Generating code for 1 models on 32 processes.
-> Single process finished in 0.6262 seconds.
Generating code for 1 models on 32 processes.
Test Summary: | Pass  Total  Time
Andes2j.jl    |    2      2  9.6s
     Testing Andes2j tests passed 

(Andes2j) pkg> test
     Testing Andes2j
      Status `/tmp/jl_1VeQlb/Project.toml`
  [93a26e3f] Andes v1.0.0 `~/repos/Andes.jl`
  [eb82b4c1] Andes2j v0.1.0 `~/repos/Andes2j`
  [6e4b80f9] BenchmarkTools v1.5.0
  [2774e3e8] NLsolve v4.5.1
  [56ddb016] Logging
  [8dfed614] Test
      Status `/tmp/jl_1VeQlb/Manifest.toml`
  [47edcb42] ADTypes v0.2.7
  [1520ce14] AbstractTrees v0.4.5
  [7d9f7c33] Accessors v0.1.36
  [79e6a3ab] Adapt v4.0.4
  [93a26e3f] Andes v1.0.0 `~/repos/Andes.jl`
  [eb82b4c1] Andes2j v0.1.0 `~/repos/Andes2j`
  [60fd53ec] Andes2jModels v1.0.0-DEV `~/repos/Andes2jModels`
  [ec485272] ArnoldiMethod v0.4.0
  [4fba245c] ArrayInterface v7.9.0
  [4c555306] ArrayLayouts v1.9.2
  [aae01518] BandedMatrices v1.6.1
  [6e4b80f9] BenchmarkTools v1.5.0
  [e2ed5e7c] Bijections v0.1.6
  [62783981] BitTwiddlingConvenienceFunctions v0.1.5
  [764a87c0] BoundaryValueDiffEq v5.7.1
  [fa961155] CEnum v0.5.0
  [2a0fbf3d] CPUSummary v0.2.4
  [49dc2e85] Calculus v0.5.1
  [d360d2e6] ChainRulesCore v1.23.0
  [fb6a15b2] CloseOpenIntervals v0.1.12
  [861a8166] Combinatorics v1.0.2
  [38540f10] CommonSolve v0.2.4
  [bbf7d656] CommonSubexpressions v0.3.0
  [34da2185] Compat v4.14.0
  [b152e2b5] CompositeTypes v0.1.4
  [a33af91c] CompositionsBase v0.1.2
  [2569d6c7] ConcreteStructs v0.2.3
  [992eb4ea] CondaPkg v0.2.22
  [187b0558] ConstructionBase v1.5.5
  [adafc99b] CpuId v0.3.1
  [9a962f9c] DataAPI v1.16.0
  [864edb3b] DataStructures v0.18.19
  [e2d170a0] DataValueInterfaces v1.0.0
  [bcd4f6db] DelayDiffEq v5.47.1
  [2b5f629d] DiffEqBase v6.149.0
  [459566f4] DiffEqCallbacks v3.6.0
  [77a26b50] DiffEqNoiseProcess v5.21.0
  [163ba53b] DiffResults v1.1.0
  [b552c78f] DiffRules v1.15.1
  [0c46a032] DifferentialEquations v7.13.0
  [b4f34e82] Distances v0.10.11
  [31c24e10] Distributions v0.25.107
  [ffbed154] DocStringExtensions v0.9.3
  [5b8099bc] DomainSets v0.7.12
  [fa6b7ba4] DualNumbers v0.6.8
  [7c1d4256] DynamicPolynomials v0.5.6
  [4e289a0a] EnumX v1.0.4
⌃ [f151be2c] EnzymeCore v0.6.6
  [d4d017d3] ExponentialUtilities v1.26.1
  [e2ba6199] ExprTools v0.1.10
  [9d29842c] FastAlmostBandedMatrices v0.1.1
  [7034ab61] FastBroadcast v0.2.8
  [9aa1b823] FastClosures v0.3.2
  [29a986be] FastLapackInterface v2.0.2
  [1a297f60] FillArrays v1.10.0
  [6a86dc24] FiniteDiff v2.23.0
  [1fa38f19] Format v1.3.7
  [f6369f11] ForwardDiff v0.10.36
  [069b7b12] FunctionWrappers v1.1.3
  [77dc65aa] FunctionWrappersWrappers v0.1.3
  [d9f16b24] Functors v0.4.10
  [46192b85] GPUArraysCore v0.1.6
  [c145ed77] GenericSchur v0.5.4
  [86223c79] Graphs v1.10.0
  [3e5b6fbb] HostCPUFeatures v0.1.16
  [34004b35] HypergeometricFunctions v0.3.23
  [615f187c] IfElse v0.1.1
  [d25df0c9] Inflate v0.1.4
  [8197267c] IntervalSets v0.7.10
  [3587e190] InverseFunctions v0.1.13
  [92d709cd] IrrationalConstants v0.2.2
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.5.0
  [682c06a0] JSON v0.21.4
  [0f8b85d8] JSON3 v1.14.0
  [ccbc3e58] JumpProcesses v9.11.1
  [ef3ab10e] KLU v0.6.0
  [ba0b0d4f] Krylov v0.9.5
  [b964fa9f] LaTeXStrings v1.3.1
  [2ee39098] LabelledArrays v1.15.1
  [984bce1d] LambertW v0.4.6
  [23fbe1c1] Latexify v0.16.2
  [10f19ff3] LayoutPointers v0.1.15
  [5078a376] LazyArrays v1.9.1
  [2d8b4e74] LevyArea v1.0.0
  [d3d80556] LineSearches v7.2.0
  [7ed4a6bd] LinearSolve v2.28.0
  [2ab3a3ac] LogExpFunctions v0.3.27
  [bdcacae8] LoopVectorization v0.12.169
  [33e6dc65] MKL v0.6.3
  [1914dd2f] MacroTools v0.5.13
  [d125e4d3] ManualMemory v0.1.8
  [a3b82374] MatrixFactorizations v2.2.0
  [bb5d69b7] MaybeInplace v0.1.2
  [0b3b1443] MicroMamba v0.1.14
  [e1d29d7a] Missings v1.2.0
  [46d2c3a1] MuladdMacro v0.2.4
  [102ac46a] MultivariatePolynomials v0.5.4
  [d8a4904e] MutableArithmetics v1.4.2
  [d41bc354] NLSolversBase v7.8.3
  [2774e3e8] NLsolve v4.5.1
  [77ba4419] NaNMath v1.0.2
  [8913a72c] NonlinearSolve v3.9.1
  [6fe1bfb0] OffsetArrays v1.13.0
  [429524aa] Optim v1.9.4
  [bac558e1] OrderedCollections v1.6.3
  [1dea7af3] OrdinaryDiffEq v6.74.1
  [90014a1f] PDMats v0.11.31
  [65ce6f38] PackageExtensionCompat v1.0.2
  [d96e819e] Parameters v0.12.3
  [69de0a69] Parsers v2.8.1
  [fa939f87] Pidfile v1.3.0
  [e409e4f3] PoissonRandom v0.4.4
  [f517fe37] Polyester v0.7.12
  [1d0040c9] PolyesterWeave v0.2.1
  [85a6dd25] PositiveFactorizations v0.2.4
  [d236fae5] PreallocationTools v0.4.20
  [aea7be01] PrecompileTools v1.2.1
  [ba661fbb] PreferenceTools v0.1.2
  [21216c6a] Preferences v1.4.3
  [6099a3de] PythonCall v0.9.19
  [1fd47b50] QuadGK v2.9.4
  [74087812] Random123 v1.7.0
  [e6cf234a] RandomNumbers v1.5.3
  [3cdcf5f2] RecipesBase v1.3.4
  [731186ca] RecursiveArrayTools v3.13.0
  [f2c3362d] RecursiveFactorization v0.2.22
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.0
  [ae5879a3] ResettableStacks v1.1.1
  [79098fc4] Rmath v0.7.1
  [7e49a35a] RuntimeGeneratedFunctions v0.5.12
  [94e857df] SIMDTypes v0.1.0
  [476501e8] SLEEFPirates v0.6.42
  [0bca4576] SciMLBase v2.32.0
  [c0aeaf25] SciMLOperators v0.3.8
  [53ae85a6] SciMLStructures v1.1.0
  [6c6a2e73] Scratch v1.2.1
  [efcf1570] Setfield v1.1.1
  [727e6d20] SimpleNonlinearSolve v1.7.0
  [699a6c99] SimpleTraits v0.9.4
  [ce78b400] SimpleUnPack v1.1.0
  [a2af1166] SortingAlgorithms v1.2.1
  [47a9eef4] SparseDiffTools v2.17.0
  [e56a9233] Sparspak v0.3.9
  [276daf66] SpecialFunctions v2.3.1
  [aedffcd0] Static v0.8.10
  [0d7ed370] StaticArrayInterface v1.5.0
  [90137ffa] StaticArrays v1.9.3
  [1e83bf80] StaticArraysCore v1.4.2
  [82ae8749] StatsAPI v1.7.0
  [2913bbd2] StatsBase v0.34.3
  [4c63d2b9] StatsFuns v1.3.1
  [9672c7b4] SteadyStateDiffEq v2.1.0
  [789caeaf] StochasticDiffEq v6.65.1
  [7792a7ef] StrideArraysCore v0.5.3
  [09ab397b] StructArrays v0.6.18
  [856f2bd8] StructTypes v1.10.0
  [c3572dad] Sundials v4.24.0
  [2efcf032] SymbolicIndexingInterface v0.3.16
  [19f23fe9] SymbolicLimits v0.2.0
  [d1185830] SymbolicUtils v1.5.1
  [0c5d862f] Symbolics v5.28.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.11.1
  [8290d209] ThreadingUtilities v0.5.2
  [a759f4b9] TimerOutputs v0.5.23
  [d5829a12] TriangularSolve v0.1.21
  [410a4b4d] Tricks v0.1.8
  [781d530d] TruncatedStacktraces v1.4.0
  [3a884ed6] UnPack v1.0.2
  [a7c27f48] Unityper v0.1.6
  [e17b2a0c] UnsafePointers v1.0.0
  [3d5dd08c] VectorizationBase v0.21.65
  [19fa3120] VertexSafeGraphs v0.2.0
  [1d5cc7b8] IntelOpenMP_jll v2024.0.2+0
  [856f044c] MKL_jll v2024.0.0+0
  [efe28fd5] OpenSpecFun_jll v0.5.5+0
  [f50d1b31] Rmath_jll v0.4.0+0
⌅ [fb77eaff] Sundials_jll v5.2.2+0
  [f8abcde7] micromamba_jll v1.5.8+0
  [0dad84c5] ArgTools v1.1.1
  [56f22d72] Artifacts
  [2a0f44e3] Base64
  [ade2ca70] Dates
  [8ba89e20] Distributed
  [f43a241f] Downloads v1.6.0
  [7b1f6079] FileWatching
  [9fa8497b] Future
  [b77e0a4c] InteractiveUtils
  [4af54fe1] LazyArtifacts
  [b27032c2] LibCURL v0.6.4
  [76f85450] LibGit2
  [8f399da3] Libdl
  [37e2e46d] LinearAlgebra
  [56ddb016] Logging
  [d6f4376e] Markdown
  [a63ad114] Mmap
  [ca575930] NetworkOptions v1.2.0
  [44cfe95a] Pkg v1.10.0
  [de0858da] Printf
  [9abbd945] Profile
  [3fa0cd96] REPL
  [9a3f8284] Random
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization
  [1a1011a3] SharedArrays
  [6462fe0b] Sockets
  [2f01184e] SparseArrays v1.10.0
  [10745b16] Statistics v1.10.0
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.3
  [a4e569a6] Tar v1.10.0
  [8dfed614] Test
  [cf7118a7] UUIDs
  [4ec0a83e] Unicode
  [e66e0078] CompilerSupportLibraries_jll v1.1.0+0
  [deac9b47] LibCURL_jll v8.4.0+0
  [e37daf67] LibGit2_jll v1.6.4+0
  [29816b5a] LibSSH2_jll v1.11.0+1
  [c8ffd9c3] MbedTLS_jll v2.28.2+1
  [14a3606d] MozillaCACerts_jll v2023.1.10
  [4536629a] OpenBLAS_jll v0.3.23+4
  [05823500] OpenLibm_jll v0.8.1+2
  [bea87d4a] SuiteSparse_jll v7.2.1+1
  [83775a58] Zlib_jll v1.2.13+1
  [8e850b90] libblastrampoline_jll v5.8.0+1
  [8e850ede] nghttp2_jll v1.52.0+1
  [3f19e933] p7zip_jll v17.4.0+2
        Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading.
     Testing Running tests...
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
    CondaPkg Offline mode, these changes are not resolved
             + andes
             + kvxopt
             + libstdcxx-ng
             + python
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
    CondaPkg Offline mode, these changes are not resolved
             + andes
             + kvxopt
             + libstdcxx-ng
             + python
    CondaPkg Found dependencies: /home/hacui/repos/Andes.jl/CondaPkg.toml
    CondaPkg Found dependencies: /home/hacui/.julia/packages/PythonCall/bb3ax/CondaPkg.toml
    CondaPkg Offline mode, these changes are not resolved
             + andes
             + kvxopt
             + libstdcxx-ng
             + python
Generating code for 1 models on 32 processes.
-> Single process finished in 0.6116 seconds.
Generating code for 1 models on 32 processes.
Test Summary: | Pass  Total  Time
Andes2j.jl    |    2      2  9.6s
     Testing Andes2j tests passed 

julia> 

cuihantao avatar Apr 14 '24 17:04 cuihantao

I don't know how to do this sorry, and agree it's quite annoying. I'm a bit surprised that env vars you're setting are not making it into the test env?

Personally I run tests using the Julia extension in VS Code, which keeps a persistent test folder around, so you only pay the cost to create the Conda env once per day normally.

cjdoris avatar Apr 18 '24 18:04 cjdoris

No problem! Thanks for your reply!

I ran the same test that contains the following at the top of runtests.jl

if gethostname() == "ampere"
    ENV["JULIA_CONDAPKG_ENV"] = "/home/hacui/mambaforge/envs/a"
    ENV["JULIA_CONDAPKG_OFFLINE"] = true
end

These env are not respected, and it again reinstalled all the packages. The second time I ran the test today, the env gets used, so that I am able to use a local version of the Python package.

cuihantao avatar Apr 28 '24 18:04 cuihantao