Пример #1
0
def test_BPlanner_makePlanAtBatch_someDisqualifiedForPrevFailures(K=10):
    SS = SuffStatBag(K=K)
    SS.setField('N', np.arange(K), dims='K')
    SSbatch = SS.copy()

    # Do the same test, while eliminating some uids
    MoveRecordsByUID = defaultdict(lambda: defaultdict(int))
    for uid in [0, 6, 9]:
        MoveRecordsByUID[uid]['b_nFail'] = 1
        MoveRecordsByUID[uid]['b_nFailRecent'] = 1
        MoveRecordsByUID[uid]['b_batchIDsWhoseProposalFailed'] = set([0])

    for b_minNumAtomsForTargetComp in [2, 5, K]:
        BArgs['b_minNumAtomsForTargetComp'] = b_minNumAtomsForTargetComp
        MovePlans = selectCompsForBirthAtCurrentBatch(
            SS=SS,
            SSbatch=SSbatch,
            MovePlans=dict(),
            MoveRecordsByUID=MoveRecordsByUID,
            **BArgs)
        nChosen = len(MovePlans['b_targetUIDs'])
        nFailPerUID = list()
        for uid in SS.uids:
            bIDs = MoveRecordsByUID[uid]['b_batchIDsWhoseProposalFailed']
            if isinstance(bIDs, set):
                nFailPerUID.append(len(bIDs))
            else:
                nFailPerUID.append(0)
        nFailPerUID = np.asarray(nFailPerUID)
        nExpected = np.sum(
            np.logical_and(SS.N >= b_minNumAtomsForTargetComp,
                           nFailPerUID < 1))
        assert nChosen == nExpected
Пример #2
0
def test_BPlanner_makePlanAtBatch_noPrevFailures(K=10):
	SS = SuffStatBag(K=K)
	SS.setField('N',  np.arange(K), dims='K')
	SSbatch = SS.copy()

	for b_minNumAtomsForTargetComp in [2, 5, K]:
		BArgs['b_minNumAtomsForTargetComp'] = b_minNumAtomsForTargetComp
		MovePlans = selectCompsForBirthAtCurrentBatch(
			SS=SS, SSbatch=SSbatch, MovePlans=dict(), **BArgs)
		nChosen = len(MovePlans['b_targetUIDs'])
		assert nChosen == np.sum(SS.N >= b_minNumAtomsForTargetComp)
Пример #3
0
def test_BPlanner_makePlanAtBatch_someDQForPrevFailuresWithOtherBatches(K=20):
    print('')
    SS = SuffStatBag(K=K)
    SS.setField('N', np.arange(K), dims='K')
    SSbatch = SS.copy()

    # Select some subset of uids to be disqualified
    PRNG = np.random.RandomState(11)
    dqUIDs = PRNG.choice(K, size=3, replace=False)
    otherfailUIDs = PRNG.choice(K, size=3, replace=False)

    # Do the same test, while eliminating some uids
    MoveRecordsByUID = defaultdict(lambda: defaultdict(int))
    for uid in dqUIDs:
        MoveRecordsByUID[uid]['b_nFail'] = 1
        MoveRecordsByUID[uid]['b_nFailRecent'] = 1
        MoveRecordsByUID[uid]['b_batchIDsWhoseProposalFailed'] = set([0])
        print('PREV FAIL AT THIS BATCH: uid ', uid)
    for uid in otherfailUIDs:
        if uid in dqUIDs:
            continue
        MoveRecordsByUID[uid]['b_nFail'] = 1
        MoveRecordsByUID[uid]['b_nFailRecent'] = 1
        MoveRecordsByUID[uid]['b_batchIDsWhoseProposalFailed'] = set([1])
        print('PREV FAIL AT ANOTHER BATCH: uid ', uid)

    for b_minNumAtomsForTargetComp in [2, 5, 10, K]:
        BArgs['b_minNumAtomsForTargetComp'] = b_minNumAtomsForTargetComp
        MovePlans = selectCompsForBirthAtCurrentBatch(
            SS=SS,
            SSbatch=SSbatch,
            MovePlans=dict(),
            MoveRecordsByUID=MoveRecordsByUID,
            **BArgs)
        nChosen = len(MovePlans['b_targetUIDs'])
        nFailPerUID = list()
        for uid in SS.uids:
            bIDs = MoveRecordsByUID[uid]['b_batchIDsWhoseProposalFailed']
            if isinstance(bIDs, set) and 0 in bIDs:
                nFailPerUID.append(len(bIDs))
            else:
                nFailPerUID.append(0)
        nFailPerUID = np.asarray(nFailPerUID)
        nExpected = np.sum(
            np.logical_and(SS.N >= b_minNumAtomsForTargetComp,
                           nFailPerUID < 1))
        assert nChosen == nExpected