def _interactionSeries(self): """ Final Method.!! C_[X](n1,n2, l1,l2, (n1,n2, l1,l2)' L, L', ..., p) carry valid values, call delta and common constants """ bmb_bra = BM_Bracket(self._n, self._l, self._N, self._L, self.bra.n1, self.bra.l1, self.bra.n2, self.bra.l2, self.L_bra) if self.isNullValue(bmb_bra): return 0.0 bmb_ket = BM_Bracket(self._n_q, self._l_q, self._N, self._L, self.ket.n1, self.ket.l1, self.ket.n2, self.ket.l2, self.L_ket) if self.isNullValue(bmb_ket): return 0.0 _b_coeff = self._B_coefficient() _com_coeff = self._interactionConstantsForCOM_Iteration() # TODO: comment when not debugging # if self.DEBUG_MODE: # self._debbugingTable(bmb_bra, bmb_ket, _com_coeff, _b_coeff) return _com_coeff * bmb_bra * bmb_ket * _b_coeff
def _interactionSeries(self): sum_ = 0.0 if self.DEBUG_MODE: XLog.write('intSer') for qqnn_bra in self._validCOM_Bra_qqnn(): self._n, self._l, self._N, self._L = qqnn_bra bmb_bra = BM_Bracket(self._n, self._l, self._N, self._L, self.bra.n1, self.bra.l1, self.bra.n2, self.bra.l2, self.L_bra) if self.isNullValue(bmb_bra): continue for l_q in self._validKet_relativeAngularMomentums(): self._l_q = l_q self._n_q = self._n self._n_q += (self.rho_ket - self.rho_bra + self._l - self._l_q) // 2 if self._n_q < 0 or not self._deltaConditionsForCOM_Iteration( ): continue bmb_ket = BM_Bracket(self._n_q, self._l_q, self._N, self._L, self.ket.n1, self.ket.l1, self.ket.n2, self.ket.l2, self.L_ket) if self.isNullValue(bmb_ket): continue _b_coeff = self._B_coefficient( self.PARAMS_SHO.get(SHO_Parameters.b_length)) _com_coeff = self._interactionConstantsForCOM_Iteration() aux = _com_coeff * bmb_bra * bmb_ket * _b_coeff sum_ += aux # TODO: comment when not debugging if self.DEBUG_MODE: XLog.write('intSer', bmbs=bmb_bra * bmb_ket, B=_b_coeff, comCoeff=_com_coeff, aux=aux) # self._debbugingTable(bmb_bra, bmb_ket, _com_coeff, _b_coeff) if self.DEBUG_MODE: XLog.write('intSer', value=sum_) return sum_
def _check_InverseCompletnessConditionForBMB(self, rho): """ Inverse For all n, l, N, L compatible with a certain rho, evaluate same/different COM quantum numbers for two states and verify orthogonality """ max_lambda = 6 fails = [] _fail_msg_template = "[!= {}] (lambda={}) nlNL{} nlNL_prima{}, got: [{}]" for lambda_ in range(max_lambda): for n1l1n2l2 in self._allPossibleQNforARho(rho, lambda_): for n1l1n2l2_prima in self._allPossibleQNforARho(rho, lambda_): orthogonality = [] for nlNL in self._allPossibleQNforARho(rho, lambda_): aux = BM_Bracket(*nlNL, *n1l1n2l2, lambda_) \ * BM_Bracket(*nlNL, *n1l1n2l2_prima, lambda_) self._numberBMBs += 2 orthogonality.append(aux) _angular_cond_1 = angular_condition(n1l1n2l2[1], n1l1n2l2[3], lambda_) _angular_cond_2 = angular_condition(n1l1n2l2_prima[1], n1l1n2l2_prima[3], lambda_) _same_qns = n1l1n2l2 == n1l1n2l2_prima _result = sum(orthogonality) if _angular_cond_1 and _angular_cond_2: if _same_qns: if abs(_result - 1) > self.TOLERANCE: fails.append(_fail_msg_template.format( 1, lambda_, n1l1n2l2, n1l1n2l2_prima, _result)) else: if abs(_result) > self.TOLERANCE: fails.append(_fail_msg_template.format( 0, lambda_, n1l1n2l2, n1l1n2l2_prima, _result)) else: if abs(_result) != 0: fails.append(_fail_msg_template.format( 0, lambda_, n1l1n2l2, n1l1n2l2_prima, _result)) self.assertTrue(len(fails) == 0, "\n"+"\n".join(fails))
def _checkSpecificBMBs(self, list_bmbs): """ :list_bmbs = <list>( <tuple>:(qq.nn args, correct_value)) """ fails = [] _fail_msg_template = "n1l1n2l2{} (lambda={}) nlNL{} got [{}] != [{}]" for qq_nn, correct_value in list_bmbs: result_ = BM_Bracket(*qq_nn) if abs(correct_value - result_) > self.TOLERANCE_BMB_BOOK: fails.append(_fail_msg_template.format(qq_nn[4:8], qq_nn[-1], qq_nn[:4], result_, correct_value)) self.assertTrue(len(fails) == 0, "\n"+"\n".join(fails)) self._numberBMBs = len(list_bmbs)
def test_timeBMB_rho12(self): for _ in range(100): BM_Bracket(1,2,3,2, 3,0,3,0, 0) self._numberBMBs += 1
def test_timeBMB_rho11(self): for _ in range(100): BM_Bracket(2,4,0,3, 1,3,1,4, 7) self._numberBMBs += 1
def test_timeBMB_rho7(self): for _ in range(1000): BM_Bracket(1,1,2,0, 0,1,2,2, 1) self._numberBMBs += 1
def test_timeBMB_rho6(self): for _ in range(100): BM_Bracket(1,1,0,3, 0,1,1,3, 2) self._numberBMBs += 1