def recordBoxStats(listOfBoxes, phaseLabel): requires(isinstance(phaseLabel, str)) requires(len(phaseLabel) > 0) requires(isinstance(listOfBoxes, list)) requires(all([isProperBox(x) for x in listOfBoxes])) labelForThisPhaseInQuestionAnswering = "Question_DomainOfVariablesInResponce:" + phaseLabel #V~~VV~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V~V # Below is largely copied from descriptionState.py # TODO: add this sort of code as a funtion in the utils to call upon.... #========================================================================= generalSummaryFunctionsAndLabelsForThem = [\ ( (lambda A : np.prod(np.diff(A, axis=1)) ), "bvolume"), \ ( (lambda A : np.min(np.diff(A, axis=1)) ), "bminSideLength"), \ ( (lambda A : np.max(np.diff(A, axis=1)) ), "bmaxSideLength"), \ ( (lambda A : np.sum(np.diff(A, axis=1)) ), "bsumSideLengths"), \ ] for thisFunctAndLabel in generalSummaryFunctionsAndLabelsForThem: theseValues = [thisFunctAndLabel[0](x) for x in listOfBoxes] resultValue = distributionStatics(theseValues) specificLabel = labelForThisPhaseInQuestionAnswering + ":" + thisFunctAndLabel[ 1] for thisKey in resultValue: commandToExecute = \ "INSERT INTO QAStateValues ( QAStateUUID , fieldName, fieldValue) VALUES ('" + \ ObjDatabaseValueTracker.get_QAStateUUID_mostRecentBeingComputed() + "', '" + (specificLabel + ":" + thisKey) + "', ? );" objDatabaseInterface.interfaceBleed_insertValuesForBlob(\ commandToExecute, [resultValue[thisKey]] ) objDatabaseInterface.commit() #^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^ return
def analysis(universeBox, thisInstanceOfModelBoxProgatorManager, functionToStatisfy, functionToDetermineWhenToGiveUpOnBox, \ limitSplittingToAxisWithIndicesInThisList=None, functionToCheckWhetherNoPointsInTheBoxStatisfyCondition=None): timingInfoForLocation_2e048534_BoxTest = [] requires(isinstance(limitSplittingToAxisWithIndicesInThisList, list)) requires( \ np.all([(x >= 0 and x < getDimensionOfBox(universeBox)) for x in limitSplittingToAxisWithIndicesInThisList])) requires( \ (len(set(limitSplittingToAxisWithIndicesInThisList)) == len(limitSplittingToAxisWithIndicesInThisList)) ) CEGARFileWrittingManagerInstance = CEGARFileWrittingManager(universeBox) CEGARFileWrittingManagerInstance.writeMetadata(\ "fileNameOfLoadedModel", thisInstanceOfModelBoxProgatorManager.fileNameOfLoadedModel) CEGARFileWrittingManagerInstance.writeMetadata(\ "functionToStatisfy", inspect.getsource(functionToStatisfy)) CEGARFileWrittingManagerInstance.writeMetadata(\ "functionToDetermineWhenToGiveUpOnBox", inspect.getsource(functionToDetermineWhenToGiveUpOnBox)) CEGARFileWrittingManagerInstance.writeMetadata(\ "QAStateUUID_mostRecentBeingComputed", ObjDatabaseValueTracker.get_QAStateUUID_mostRecentBeingComputed()) theseInputAbstractions = getInitialAbstraction_boxesBySign(universeBox) assert (isinstance(theseInputAbstractions, list)) assert (len(theseInputAbstractions) > 0) scalingForSplitting = universeBox[:, 1] - universeBox[:, 0] tempBox = scalingForSplitting.copy() # TODO: remove this unnecessary copy in the near future. # As implemented in the splitBox file, when the scaling factor has a nan in a posotion, # the axis corresponding to that index is ignored. tempBox[:] = np.nan tempBox[limitSplittingToAxisWithIndicesInThisList] = scalingForSplitting[ limitSplittingToAxisWithIndicesInThisList] scalingForSplitting = tempBox for thisBox in theseInputAbstractions: anySuccess = analysis_divingIntoBox(thisBox, thisInstanceOfModelBoxProgatorManager, \ functionToStatisfy, functionToDetermineWhenToGiveUpOnBox, CEGARFileWrittingManagerInstance, scalingForSplitting, 0, \ functionToCheckWhetherNoPointsInTheBoxStatisfyCondition=functionToCheckWhetherNoPointsInTheBoxStatisfyCondition) if (not anySuccess): CEGARFileWrittingManagerInstance.writeBox(thisBox, [ 0, labelsForBoxes. HIGHESTLEVELBOXUNIONBOX_FALSESOMEWHEREANDEXHAUSTEDLOOKING ]) CEGARFileWrittingManagerInstance.closeFilesToSaveResultsIn() return CEGARFileWrittingManagerInstance