mirror of
https://github.com/JHUAPL/kaiju.git
synced 2026-01-09 15:17:56 -05:00
Merged in dashboard (pull request #41)
Dashboard Approved-by: ksorathia Approved-by: Eric Winter
This commit is contained in:
@@ -38,6 +38,7 @@ module clocks
|
||||
!Depth/parent, ie array entry of parent of this clock
|
||||
integer :: level=-1,parent=-1
|
||||
integer :: iTic=0,iToc=0 !Integer ticks
|
||||
integer :: nCalls=0 !Number of tocs, or finished timer loops since cleaning
|
||||
real(rp) :: tElap=0.0 !Elapsed time
|
||||
end type Clock_T
|
||||
|
||||
@@ -50,6 +51,11 @@ module clocks
|
||||
interface readClock
|
||||
module procedure readClock_str, readClock_int
|
||||
end interface
|
||||
|
||||
!interface for reading number of calls to a clock
|
||||
interface readNCalls
|
||||
module procedure readNCalls_str, readNCalls_int
|
||||
end interface
|
||||
|
||||
contains
|
||||
|
||||
@@ -171,6 +177,8 @@ module clocks
|
||||
wclk = real(kClocks(iblk)%iToc-kClocks(iblk)%iTic)/real(clockRate)
|
||||
|
||||
kClocks(iblk)%tElap = kClocks(iblk)%tElap + wclk
|
||||
kClocks(iblk)%nCalls = kClocks(iblk)%nCalls + 1
|
||||
|
||||
end subroutine Toc
|
||||
|
||||
!Reset clocks
|
||||
@@ -179,6 +187,7 @@ module clocks
|
||||
|
||||
do n=1,nclk
|
||||
kClocks(n)%tElap = 0
|
||||
kClocks(n)%nCalls = 0
|
||||
! if the clock is active, reset the tic to right now
|
||||
if(kClocks(n)%isOn) call Tic(kClocks(n)%cID, .true.)
|
||||
enddo
|
||||
@@ -223,6 +232,39 @@ module clocks
|
||||
endif
|
||||
end function readClock_int
|
||||
|
||||
function readNCalls_str(cID) result(nc)
|
||||
character(len=*), intent(in) :: cID
|
||||
|
||||
integer :: n,iblk
|
||||
integer :: nc
|
||||
|
||||
iblk = 0
|
||||
!Find timer
|
||||
do n=1,nclk
|
||||
if (toUpper(kClocks(n)%cID) == toUpper(cID)) then
|
||||
!Found it, save ID
|
||||
iblk = n
|
||||
endif
|
||||
enddo
|
||||
|
||||
nc = readNCalls_int(iblk)
|
||||
|
||||
end function readNCalls_str
|
||||
|
||||
function readNCalls_int(iblk) result(nc)
|
||||
integer, intent(in) :: iblk
|
||||
|
||||
integer :: tmpToc
|
||||
integer :: nc
|
||||
|
||||
if (iblk == 0) then
|
||||
nc = 0
|
||||
else
|
||||
nc = kClocks(iblk)%nCalls
|
||||
endif
|
||||
|
||||
end function readNCalls_int
|
||||
|
||||
!Output clock data
|
||||
subroutine printClocks()
|
||||
integer :: n,l
|
||||
|
||||
@@ -30,6 +30,7 @@ program voltron_mpix
|
||||
type(XML_Input_T) :: xmlInp
|
||||
real(rp) :: nextDT
|
||||
integer :: divideSize,i
|
||||
logical :: doResetClocks = .false.
|
||||
|
||||
! initialize MPI
|
||||
!Set up MPI with or without thread support
|
||||
@@ -206,12 +207,12 @@ program voltron_mpix
|
||||
if (vApp%IO%doTimerOut) then
|
||||
call printClocks()
|
||||
endif
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
elseif (vApp%IO%doTimer(vApp%time)) then
|
||||
if (vApp%IO%doTimerOut) then
|
||||
call printClocks()
|
||||
endif
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
endif
|
||||
|
||||
!Data output
|
||||
@@ -223,6 +224,12 @@ program voltron_mpix
|
||||
if (vApp%IO%doRestart(vApp%time)) then
|
||||
call resOutputV(vApp,vApp%gApp)
|
||||
endif
|
||||
|
||||
!Reset clocks last so data is available for all output
|
||||
if (doResetClocks) then
|
||||
call cleanClocks()
|
||||
doResetClocks = .false.
|
||||
endif
|
||||
|
||||
call Toc("IO", .true.)
|
||||
call Toc("Omega", .true.)
|
||||
@@ -257,11 +264,11 @@ program voltron_mpix
|
||||
|
||||
!Timing info
|
||||
if (gApp%Model%IO%doTimerOut) call printClocks()
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
|
||||
elseif (gApp%Model%IO%doTimer(gApp%Model%t)) then
|
||||
if (gApp%Model%IO%doTimerOut) call printClocks()
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
endif
|
||||
|
||||
if (gApp%Model%IO%doOutput(gApp%Model%t)) then
|
||||
@@ -274,6 +281,11 @@ program voltron_mpix
|
||||
call gApp%WriteRestart(gApp%Model%IO%nRes)
|
||||
endif
|
||||
|
||||
if (doResetClocks) then
|
||||
call cleanClocks()
|
||||
doResetClocks = .false.
|
||||
endif
|
||||
|
||||
call Toc("IO")
|
||||
call Toc("Omega", .true.)
|
||||
end do
|
||||
|
||||
@@ -11,6 +11,7 @@ program voltronx
|
||||
|
||||
type(voltApp_T) :: vApp
|
||||
real(rp) :: nextDT
|
||||
logical :: doResetClocks = .false.
|
||||
|
||||
call initClocks()
|
||||
|
||||
@@ -37,10 +38,10 @@ program voltronx
|
||||
call consoleOutputV(vApp,vApp%gApp)
|
||||
!Timing info
|
||||
if (vApp%IO%doTimerOut) call printClocks()
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
elseif (vApp%IO%doTimer(vApp%time)) then
|
||||
if (vApp%IO%doTimerOut) call printClocks()
|
||||
call cleanClocks()
|
||||
doResetClocks = .true.
|
||||
endif
|
||||
|
||||
!Data output
|
||||
@@ -51,6 +52,11 @@ program voltronx
|
||||
if (vApp%IO%doRestart(vApp%time)) then
|
||||
call resOutputV(vApp,vApp%gApp)
|
||||
endif
|
||||
!Reset clocks last
|
||||
if (doResetClocks) then
|
||||
call cleanClocks()
|
||||
doResetClocks = .false.
|
||||
endif
|
||||
|
||||
call Toc("IO", .true.)
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ module gamapp
|
||||
subroutine stepGamera(gameraApp)
|
||||
class(gamApp_T), intent(inout) :: gameraApp
|
||||
|
||||
call Tic("Advance", .true.)
|
||||
!update the state variables to the next timestep
|
||||
call UpdateStateData(gameraApp)
|
||||
|
||||
@@ -82,11 +83,13 @@ module gamapp
|
||||
call Toc("DT")
|
||||
|
||||
!Enforce BCs
|
||||
call Tic("BCs")
|
||||
call Tic("BCs", .true.)
|
||||
call EnforceBCs(gameraApp%Model,gameraApp%Grid,gameraApp%State)
|
||||
!Update Bxyz's
|
||||
call bFlux2Fld (gameraApp%Model,gameraApp%Grid,gameraApp%State%magFlux,gameraApp%State%Bxyz)
|
||||
call Toc("BCs")
|
||||
call Toc("BCs", .true.)
|
||||
|
||||
call Toc("Advance", .true.)
|
||||
|
||||
end subroutine stepGamera
|
||||
|
||||
|
||||
@@ -258,7 +258,7 @@ module gioH5
|
||||
type(State_T), intent(in) :: State
|
||||
character(len=*), intent(in) :: gStr
|
||||
|
||||
integer :: i,j,k,s
|
||||
integer :: i,j,k,s,nClkSteps
|
||||
character(len=strLen) :: dID,VxID,VyID,VzID,PID
|
||||
integer iMin,iMax,jMin,jMax,kMin,kMax
|
||||
|
||||
@@ -539,6 +539,18 @@ module gioH5
|
||||
call AddOutVar(IOVars,"kzcsTOT",Model%kzcsTOT,uStr="kZCs",dStr="Total kZCs" )
|
||||
|
||||
!---------------------
|
||||
!Performance metrics
|
||||
|
||||
nClkSteps = readNCalls('Advance')
|
||||
call AddOutVar(IOVars,"_perf_stepTime",readClock(1)/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_mathTime", readClock('Gamera')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_bcTime", readClock('BCs')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_haloTime", readClock('Halos')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_voltTime", readClock('VoltSync')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_ioTime", readClock('IO')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_advanceTime", readClock('Advance')/nClkSteps)
|
||||
|
||||
!----------------------
|
||||
|
||||
!Call user routine if defined
|
||||
if (associated(Model%HackIO)) then
|
||||
|
||||
@@ -584,9 +584,9 @@ module gamapp_mpi
|
||||
character(len=strLen) :: BCID
|
||||
|
||||
!Enforce BCs
|
||||
call Tic("BCs")
|
||||
call Tic("BCs", .true.)
|
||||
call EnforceBCs(gamAppMpi%Model,gamAppMpi%Grid,State)
|
||||
call Toc("BCs")
|
||||
call Toc("BCs", .true.)
|
||||
|
||||
!Track timing for all gamera ranks to finish physical BCs
|
||||
! Only synchronize when timing
|
||||
@@ -597,10 +597,10 @@ module gamapp_mpi
|
||||
endif
|
||||
|
||||
!Update ghost cells
|
||||
call Tic("Halos")
|
||||
call Tic("Halos", .true.)
|
||||
call HaloUpdate(gamAppMpi, State)
|
||||
call bFlux2Fld(gamAppMpi%Model, gamappMpi%Grid, State%magFlux, State%Bxyz) !Update Bxyz's
|
||||
call Toc("Halos")
|
||||
call Toc("Halos", .true.)
|
||||
|
||||
!Track timing for all gamera ranks to finish halo comms
|
||||
! Only synchronize when timing
|
||||
@@ -611,6 +611,7 @@ module gamapp_mpi
|
||||
endif
|
||||
|
||||
! Re-apply periodic BCs last
|
||||
call Tic("BCs", .true.)
|
||||
do i=1,gamAppMpi%Grid%NumBC
|
||||
if(allocated(gamAppMpi%Grid%externalBCs(i)%p)) then
|
||||
SELECT type(bc=>gamAppMpi%Grid%externalBCs(i)%p)
|
||||
@@ -649,6 +650,7 @@ module gamapp_mpi
|
||||
endselect
|
||||
endif
|
||||
enddo
|
||||
call Toc("BCs", .true.)
|
||||
|
||||
!Track timing for all gamera ranks to finish periodic BCs
|
||||
! Only synchronize when timing
|
||||
@@ -666,6 +668,7 @@ module gamapp_mpi
|
||||
integer :: ierr,i
|
||||
real(rp) :: tmp
|
||||
|
||||
call Tic("Advance", .true.)
|
||||
!update the state variables to the next timestep
|
||||
call UpdateStateData(gamAppMpi)
|
||||
|
||||
@@ -684,6 +687,7 @@ module gamapp_mpi
|
||||
|
||||
!Update BCs MPI style
|
||||
call updateMpiBCs(gamAppMpi, gamAppmpi%State)
|
||||
call Toc("Advance", .true.)
|
||||
|
||||
end subroutine stepGamera_mpi
|
||||
|
||||
|
||||
@@ -34,21 +34,21 @@ module raijuAdvancer
|
||||
|
||||
State%dt = dtCpl
|
||||
|
||||
call Tic("Pre-Advance")
|
||||
call Tic("Pre-Advance",.true.)
|
||||
call raijuPreAdvance(Model, Grid, State)
|
||||
call Toc("Pre-Advance")
|
||||
call Toc("Pre-Advance",.true.)
|
||||
State%isFirstCpl = .false.
|
||||
|
||||
! Step
|
||||
call Tic("AdvanceState")
|
||||
call Tic("AdvanceState",.true.)
|
||||
call AdvanceState(Model, Grid, State)
|
||||
call Toc("AdvanceState")
|
||||
call Toc("AdvanceState",.true.)
|
||||
|
||||
! etas back to moments
|
||||
call Tic("Moments Eval")
|
||||
call Tic("Moments Eval",.true.)
|
||||
call EvalMoments(Grid, State)
|
||||
call EvalMoments(Grid, State, doAvgO=.true.)
|
||||
call Toc("Moments Eval")
|
||||
call Toc("Moments Eval",.true.)
|
||||
|
||||
end subroutine raijuAdvance
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ module raijuIO
|
||||
logical, optional, intent(in) :: doGhostsO
|
||||
|
||||
type(IOVAR_T), dimension(MAXIOVAR) :: IOVars
|
||||
integer :: i,j,k,s
|
||||
integer :: i,j,k,s, nClkSteps
|
||||
integer :: is, ie, js, je, ks, ke
|
||||
integer, dimension(4) :: outBnds2D
|
||||
logical :: doGhosts
|
||||
@@ -424,8 +424,14 @@ module raijuIO
|
||||
deallocate(outTmp2D)
|
||||
endif
|
||||
|
||||
call WriteVars(IOVars,.true.,Model%raijuH5, gStr)
|
||||
!Performance Metrics
|
||||
nClkSteps = readNCalls('DeepUpdate')
|
||||
call AddOutVar(IOVars, "_perf_stepTime", readClock(1)/nClkSteps)
|
||||
call AddOutVar(IOVars, "_perf_preAdvance", readClock("Pre-Advance")/nClkSteps)
|
||||
call AddOutVar(IOVars, "_perf_advanceState", readClock("AdvanceState")/nClkSteps)
|
||||
call AddOutVar(IOVars, "_perf_moments", readClock("Moments Eval")/nClkSteps)
|
||||
|
||||
call WriteVars(IOVars,.true.,Model%raijuH5, gStr)
|
||||
|
||||
! Any extra groups to add
|
||||
if (Model%doLosses .and. Model%doOutput_3DLoss) then
|
||||
|
||||
@@ -356,9 +356,10 @@ module voltapp_mpi
|
||||
|
||||
if(.not. vApp%doSerialMHD) call vApp%gApp%StartUpdateMhdData(vApp)
|
||||
|
||||
call Tic("DeepUpdate")
|
||||
call Tic("DeepUpdate",.true.)
|
||||
call DeepUpdate_mpi(vApp)
|
||||
call Toc("DeepUpdate")
|
||||
call Toc("DeepUpdate",.true.)
|
||||
vApp%ts = vApp%ts + 1
|
||||
|
||||
if(vApp%doSerialMHD) call vApp%gApp%StartUpdateMhdData(vApp)
|
||||
|
||||
@@ -404,8 +405,6 @@ module voltapp_mpi
|
||||
|
||||
! only do imag after spinup
|
||||
if(vApp%doDeep .and. vApp%time >= 0) then
|
||||
call Tic("DeepUpdate", .true.)
|
||||
|
||||
if(vApp%useHelpers) call vhReqStep(vApp)
|
||||
|
||||
! instead of PreDeep, use Tube Helpers and replicate other calls
|
||||
@@ -442,7 +441,6 @@ module voltapp_mpi
|
||||
call DoImag(vApp)
|
||||
|
||||
vApp%deepProcessingInProgress = .true.
|
||||
call Toc("DeepUpdate", .true.)
|
||||
elseif(vApp%doDeep) then
|
||||
vApp%gApp%Grid%Gas0 = 0
|
||||
!Load TM03 into Gas0 for ingestion during spinup
|
||||
@@ -459,7 +457,6 @@ module voltapp_mpi
|
||||
|
||||
! only do imag after spinup with deep enabled
|
||||
if(vApp%doDeep .and. vApp%time >= 0) then
|
||||
call Tic("DeepUpdate", .true.)
|
||||
|
||||
do while(SquishBlocksRemain(vApp))
|
||||
call Tic("Squish",.true.)
|
||||
@@ -477,7 +474,6 @@ module voltapp_mpi
|
||||
|
||||
call SquishEnd(vApp)
|
||||
call PostDeep(vApp, vApp%gApp)
|
||||
call Toc("DeepUpdate", .true.)
|
||||
endif
|
||||
|
||||
end subroutine endDeep
|
||||
@@ -496,11 +492,9 @@ module voltapp_mpi
|
||||
if(.not. vApp%deepProcessingInProgress) return
|
||||
|
||||
if(SquishBlocksRemain(vApp)) then
|
||||
call Tic("DeepUpdate")
|
||||
call Tic("Squish",.true.)
|
||||
call DoSquishBlock(vApp)
|
||||
call Toc("Squish",.true.)
|
||||
call Toc("DeepUpdate")
|
||||
endif
|
||||
|
||||
if(.not. SquishBlocksRemain(vApp)) then
|
||||
|
||||
@@ -334,9 +334,10 @@ module voltapp
|
||||
! update the next predicted coupling interval
|
||||
vApp%DeepT = vApp%DeepT + vApp%DeepDT
|
||||
|
||||
call Tic("DeepUpdate")
|
||||
call Tic("DeepUpdate",.true.)
|
||||
call DeepUpdate(vApp, vApp%gApp)
|
||||
call Toc("DeepUpdate")
|
||||
call Toc("DeepUpdate",.true.)
|
||||
vApp%ts = vApp%ts + 1
|
||||
|
||||
call vApp%gApp%StartUpdateMhdData(vApp)
|
||||
|
||||
|
||||
@@ -389,7 +389,7 @@ module voltio
|
||||
type(IOVAR_T), dimension(MAXVOLTIOVAR) :: IOVars
|
||||
real(rp) :: symh
|
||||
|
||||
integer :: is,ie,js,je
|
||||
integer :: is,ie,js,je,nClkSteps
|
||||
real(rp) :: Csijk,Con(NVAR)
|
||||
real(rp) :: BSDst0,AvgBSDst,DPSDst,BSSMRs(4)
|
||||
integer, dimension(4) :: outSGVBnds_corner
|
||||
@@ -444,6 +444,16 @@ module voltio
|
||||
call AddOutVar(IOVars,"MJD" ,vApp%MJD)
|
||||
call AddOutVar(IOVars,"timestep",vApp%ts)
|
||||
|
||||
!Performance metrics
|
||||
nClkSteps = readNCalls('DeepUpdate')
|
||||
call AddOutVar(IOVars,"_perf_stepTime",readClock(1)/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_deepUpdateTime",readClock(1)/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_gamTime", readClock('GameraSync')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_squishTime", (readClock('Squish')+readClock('VoltHelpers'))/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_imagTime", readClock('InnerMag')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_mixTime", readClock('ReMIX')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_tubesTime", readClock('VoltTubes')/nClkSteps)
|
||||
call AddOutVar(IOVars,"_perf_ioTime", readClock('IO')/nClkSteps)
|
||||
|
||||
! voltState stuff
|
||||
call AddOutSGV(IOVars, "Potential_total", vApp%State%potential_total, &
|
||||
|
||||
@@ -20,11 +20,11 @@ def create_command_line_parser():
|
||||
parser = argparse.ArgumentParser(description="Script to help setup automated tests within a kaiju repo")
|
||||
|
||||
parser.add_argument(
|
||||
"-A", required=True,
|
||||
"-A", default="",
|
||||
help="Charge code to use when running tests."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-ce", required=True,
|
||||
"-ce", default="",
|
||||
help="Conda environment name to load with conda module"
|
||||
)
|
||||
parser.add_argument(
|
||||
@@ -80,23 +80,58 @@ def main():
|
||||
|
||||
# Parse the command-line arguments.
|
||||
args = parser.parse_args()
|
||||
|
||||
# Adjust test options
|
||||
if args.all:
|
||||
args.unitTests = True
|
||||
args.weeklyDash = True
|
||||
args.compTests = True
|
||||
args.compTestsFull = True
|
||||
args.buildTests = True
|
||||
args.icTests = True
|
||||
args.intelChecks = True
|
||||
args.reproTests = True
|
||||
|
||||
if args.compTestsFull:
|
||||
args.compTests = False
|
||||
|
||||
if not (args.unitTests or args.weeklyDash or args.compTests or args.compTestsFull or
|
||||
args.buildTests or args.icTests or args.intelChecks or args.reproTests):
|
||||
parser.print_help()
|
||||
exit()
|
||||
|
||||
# find repo home directory
|
||||
called_from = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(called_from)
|
||||
os.chdir('..')
|
||||
homeDir = os.getcwd()
|
||||
|
||||
|
||||
# Check for necessary environment variables
|
||||
if 'KAIJUHOME' not in os.environ:
|
||||
print("The setupEnvironment.sh script must be sourced for the repo this script resides in before calling it.")
|
||||
if len(args.ce) == 0 and 'CONDA_DEFAULT_ENV' not in os.environ:
|
||||
print("A conda environment name was not supplied, and a currently loaded conda environment could not be determined.")
|
||||
print("Please either supply the name of a conda environment with the '-ce <name>' option,")
|
||||
print(" or load an entironment before running this script, and it should be automatically found.")
|
||||
exit()
|
||||
elif len(args.ce) == 0:
|
||||
args.ce = os.environ['CONDA_DEFAULT_ENV']
|
||||
print(f"Automatically setting conda environment to {args.ce}")
|
||||
if len(args.A) == 0 and (args.unitTests or args.weeklyDash or
|
||||
args.compTests or args.compTestsFull or args.intelChecks or args.reproTests):
|
||||
print("A charge code with not supplied, but the requested tests require one.")
|
||||
print("Please supply a charge code with the -A # option.")
|
||||
exit()
|
||||
if 'KAIJUHOME' not in os.environ:
|
||||
os.environ['KAIJUHOME'] = homeDir
|
||||
print(f"Running tests out of local git repository: {homeDir}")
|
||||
if pathlib.Path(homeDir).resolve() != pathlib.Path(os.environ['KAIJUHOME']).resolve():
|
||||
print("The setupEnvironment.sh script must be sourced for the repo this script resides in before calling it.")
|
||||
exit()
|
||||
if 'KAIPYHOME' not in os.environ:
|
||||
print("The setupEnvironment.sh script for ANY kaipy repo must be sourced before calling this.")
|
||||
if 'KAIPYHOME' not in os.environ and (args.weeklyDash or args.compTests or args.compTestsFull):
|
||||
print("The 'KAIPYHOME' environment variable was not set, but the requested tests require it.")
|
||||
print("The setupEnvironment.sh script for ANY kaipy repo must be sourced before running these tests.")
|
||||
exit()
|
||||
elif 'KAIPYHOME' not in os.environ:
|
||||
os.environ['KAIPYHOME'] = ""
|
||||
|
||||
# Set environment variables
|
||||
os.environ['MAGE_TEST_ROOT'] = homeDir
|
||||
@@ -124,22 +159,10 @@ def main():
|
||||
|
||||
|
||||
print(f"Running tests on branch {gitBranch}")
|
||||
print(f"Using charge code {args.A} with priority {args.p}")
|
||||
print(f"Running in folder {test_set_dir}")
|
||||
|
||||
# Adjust test options
|
||||
if args.all:
|
||||
args.unitTests = True
|
||||
args.weeklyDash = True
|
||||
args.compTests = True
|
||||
args.compTestsFull = True
|
||||
args.buildTests = True
|
||||
args.icTests = True
|
||||
args.intelChecks = True
|
||||
args.reproTests = True
|
||||
|
||||
if args.compTestsFull:
|
||||
args.compTests = False
|
||||
if len(args.A) > 0:
|
||||
print(f"Using charge code {args.A} with priority {args.p}")
|
||||
print(f"Running in folder test_runs/{test_set_dir}")
|
||||
print("")
|
||||
|
||||
# Run Tests
|
||||
if args.unitTests:
|
||||
|
||||
Reference in New Issue
Block a user