static void tst5() { params_ref ps; nlsat::solver s(ps); unsynch_mpq_manager & qm = s.qm(); anum_manager & am = s.am(); nlsat::pmanager & pm = s.pm(); nlsat::assignment as(am); small_object_allocator allocator; nlsat::interval_set_manager ism(am, allocator); nlsat::evaluator ev(as, pm, allocator); nlsat::var x0, x1; x0 = pm.mk_var(); x1 = pm.mk_var(); polynomial_ref p(pm); polynomial_ref _x0(pm), _x1(pm); _x0 = pm.mk_polynomial(x0); _x1 = pm.mk_polynomial(x1); p = (_x0^2) + (_x1^2) - 2; nlsat::poly * _p[1] = { p.get() }; bool is_even[1] = { false }; nlsat::bool_var b = s.mk_ineq_atom(nlsat::atom::GT, 1, _p, is_even); nlsat::atom * a = s.bool_var2atom(b); SASSERT(a != 0); nlsat::interval_set_ref i(ism); scoped_anum zero(am); am.set(zero, 0); as.set(0, zero); i = ev.infeasible_intervals(a, true); std::cout << "1) " << i << "\n"; as.set(1, zero); i = ev.infeasible_intervals(a, true); std::cout << "2) " << i << "\n"; }
static void tst4() { enable_trace("nlsat_interval"); unsynch_mpq_manager qm; anum_manager am(qm); small_object_allocator allocator; nlsat::interval_set_manager ism(am, allocator); nlsat::interval_set_ref s1(ism), s2(ism), r(ism); nlsat::literal l1(1, false); nlsat::literal l2(2, false); for (unsigned i = 0; i < 100; i++) { s1 = mk_random(ism, am, 20, 3, 10, true, true, l1); s2 = mk_random(ism, am, 20, 3, 10, true, true, l2); r = tst_interval(s1, s2, 0, false); check_subset_result(s1, s2, r, l1, l2); } for (unsigned i = 0; i < 100; i++) { s1 = mk_random(ism, am, 200, 100, 20, true, true, l1); s2 = mk_random(ism, am, 200, 100, 20, true, true, l2); r = tst_interval(s1, s2, 0, false); check_subset_result(s1, s2, r, l1, l2); } }
void ClassRule:: readCRules(ECString path) { ECString flnm = path; flnm += L"rules.txt"; ifstream is(flnm.c_str()); int wh = 2; //wcerr << "RCR" << endl; int modm = Term::stopTerm->toInt(); assert(is); ECString tmp; for( ; ; ) { int d, m, r, t; is >> tmp; if(tmp == L"Thirds:") { wh = 3; continue; } //wcerr << "T1 " << tmp << endl; if(!is) break; d = Term::get(tmp)->toInt(); is >> tmp; m = Term::get(tmp)->toInt(); is >> r; r--; is >> tmp; t = Term::get(tmp)->toInt(); assert(is); ClassRule cr(d,m,r,t); //wcerr << "RR " << cr << endl; if(wh == 3) rBundles3_[d][m-modm].push_back(cr); else rBundles2_[d][m-modm].push_back(cr); } flnm = path; flnm += L"rules.m"; ifstream ism(flnm.c_str()); if(!ism) return; ism >> tmp; // all thirds; for( ; ; ) { ECString tmp; int d, m, t; ism >> tmp; //wcerr << "T1 " << tmp << endl; if(!ism) break; d = Term::get(tmp)->toInt(); ism >> tmp; m = Term::get(tmp)->toInt(); ism >> tmp; t = Term::get(tmp)->toInt(); assert(ism); ClassRule cr(d,m,0,t); rBundlesm_[d][m].push_back(cr); } }
boost::shared_ptr<TaskSlotAPI> Skill:: lookupSlot(std::string const & name) { shared_ptr<TaskSlotAPI> slot; slot_map_t::iterator ism(slot_map_.find(name)); if (ism != slot_map_.end()) { slot = ism->second; } return slot; }
static void check_subset_result(nlsat::interval_set_ref const & s1, nlsat::interval_set_ref const & s2, nlsat::interval_set_ref const & r, nlsat::literal l1, nlsat::literal l2) { nlsat::interval_set_manager ism(s1.m()); nlsat::interval_set_ref tmp(ism); unsigned num = ism.num_intervals(r); nlsat::literal_vector lits; ism.get_justifications(r, lits); SASSERT(lits.size() <= 2); for (unsigned i = 0; i < num; i++) { tmp = ism.get_interval(r, i); ism.get_justifications(tmp, lits); SASSERT(lits.size() == 1); if (lits[0] == l1) { SASSERT(ism.subset(tmp, s1)); } else { SASSERT(lits[0] == l2); SASSERT(ism.subset(tmp, s2)); } } }
void WComboBox::findItemsites(int pItemID) { if (pItemID != -1) { QString iss("SELECT warehous_id, warehous_code, warehous_code " "FROM site(), itemsite " "WHERE ((itemsite_warehous_id=warehous_id)" " AND (itemsite_item_id=<? value(\"itemid\") ?>) " "<? if exists(\"active\") ?> AND (warehous_active) <? endif ?>" "<? if exists(\"shipping\") ?>AND (warehous_shipping)<? endif ?>" "<? if exists(\"transit\") ?>" " AND (warehous_transit) " "<? elseif exists(\"nottransit\") ?>" " AND (NOT warehous_transit)" "<? endif ?>" "<? if exists(\"active\") ?> AND (itemsite_active) <? endif ?>" "<? if exists(\"soldIS\") ?> AND (itemsite_sold) <? endif ?>" "<? if exists(\"supplyIS\") ?> AND (itemsite_supply) <? endif ?>" "<? if exists(\"inventory\") ?> AND (itemsite_controlmethod<>'N') <? endif ?>" ") " "ORDER BY warehous_code;" ); ParameterList isp; isp.append("itemid", pItemID); switch (_type) { case AllActive: isp.append("active"); break; case AllActiveInventory: isp.append("active"); isp.append("inventory"); break; case NonTransit: isp.append("nottransit"); isp.append("active"); break; case Sold: isp.append("active"); isp.append("nottransit"); isp.append("soldIS"); break; /* TODO: ? previous version of this function didn't have Shipping case case Shipping: isp.append("shipping"); isp.append("active"); break; */ case Supply: isp.append("active"); isp.append("supplyIS"); break; case Transit: isp.append("transit"); isp.append("active"); break; case All: default: break; } MetaSQLQuery ism(iss); XSqlQuery isq = ism.toQuery(isp); populate(isq, ((_x_preferences) ? _x_preferences->value("PreferredWarehouse").toInt() : -1)); if (currentItem() == -1) setCurrentItem(0); } else clear(); }
static void tst3() { enable_trace("nlsat_interval"); unsynch_mpq_manager qm; anum_manager am(qm); small_object_allocator allocator; nlsat::interval_set_manager ism(am, allocator); scoped_anum sqrt2(am), m_sqrt2(am), two(am), m_two(am), three(am), one(am), zero(am); am.set(two, 2); am.set(m_two, -2); am.set(one, 1); am.root(two, 2, sqrt2); am.set(m_sqrt2, sqrt2); am.neg(m_sqrt2); am.set(three, 3); nlsat::literal p1(1, false); nlsat::literal p2(2, false); nlsat::literal p3(3, false); nlsat::literal p4(4, false); nlsat::literal np2(2, true); nlsat::interval_set_ref s1(ism), s2(ism), s3(ism), s4(ism); s1 = ism.mk_empty(); std::cout << "s1: " << s1 << "\n"; s2 = ism.mk(true, true, zero, false, false, sqrt2, np2); std::cout << "s2: " << s2 << "\n"; s3 = ism.mk(false, false, zero, false, false, two, p1); std::cout << "s3: " << s3 << "\n"; s4 = ism.mk_union(s2, s3); std::cout << "s4: " << s4 << "\n"; // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, zero, false, false, two, p1); s2 = ism.mk(false, false, zero, false, false, two, p2); tst_interval(s1, s2, 1); // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, zero, false, false, two, p1); s2 = ism.mk(false, false, m_sqrt2, false, false, one, p2); s3 = ism.mk_union(s1, s2); tst_interval(s1, s2, 2); // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, m_sqrt2, false, false, one, p1); s2 = ism.mk(false, false, zero, false, false, two, p2); tst_interval(s1, s2, 2); // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, m_sqrt2, false, false, one, p1); s2 = ism.mk(false, false, two, false, false, three, p2); tst_interval(s1, s2, 2); // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, m_sqrt2, false, false, three, p1); s2 = ism.mk(false, false, zero, false, false, two, p2); tst_interval(s1, s2, 1); // Case // s1: [ ... ] // s2: [ ... ] [ ... ] s1 = ism.mk(false, false, m_two, false, false, two, p1); s2 = ism.mk(false, false, m_sqrt2, false, false, zero, p2); s3 = ism.mk(false, false, one, false, false, three, p2); s2 = ism.mk_union(s2, s3); tst_interval(s1, s2, 2); // Case // s1: [ ... ] // s2: [ ... ] s1 = ism.mk(false, false, m_two, false, false, two, p1); s2 = ism.mk(false, false, two, false, false, three, p2); tst_interval(s1, s2, 2); s2 = ism.mk(true, false, two, false, false, three, p2); tst_interval(s1, s2, 2); s2 = ism.mk(true, false, two, false, false, three, p1); tst_interval(s1, s2, 1); s1 = ism.mk(false, false, m_two, true, false, two, p1); tst_interval(s1, s2, 2); s1 = ism.mk(false, false, two, false, false, two, p1); s2 = ism.mk(false, false, two, false, false, three, p2); tst_interval(s1, s2, 1); // Case // s1: [ ... ] [ ... ] // s2: [ .. ] [ ... ] [ ... ] s1 = ism.mk(false, false, m_two, false, false, zero, p1); s3 = ism.mk(false, false, one, false, false, three, p1); s1 = ism.mk_union(s1, s3); s2 = ism.mk(true, true, zero, false, false, m_sqrt2, p2); tst_interval(s1, s2, 3); s3 = ism.mk(false, false, one, false, false, sqrt2, p2); s2 = ism.mk_union(s2, s3); s3 = ism.mk(false, false, two, true, true, zero, p2); s2 = ism.mk_union(s2, s3); tst_interval(s1, s2, 4); // Case s1 = ism.mk(true, true, zero, false, false, one, p1); s2 = ism.mk(true, false, one, true, true, zero, p2); tst_interval(s1, s2, 2); s2 = ism.mk(true, false, one, false, false, two, p2); s3 = ism.mk(false, false, two, true, true, zero, p1); s2 = ism.mk_union(s2, s3); tst_interval(s1, s2, 3); }
// void test() { // // aligned_buffer<short> a(16); // aligned_buffer<short> b(16); // aligned_buffer<short> c(16); // // std::fill( a.begin(), a.end(), 1 ); // std::fill( b.begin(), b.end(), 2 ); // a.m_ptr[0] = 2; // // typedef vector_unit<short,16> vu; // // vu::vec_t av = vu::load(a.m_ptr); // vu::vec_t bv = vu::load(b.m_ptr); // // vu::store( vu::cmp_lt(av,bv), c.m_ptr ); // // for( int i = 0; i < c.size(); i++ ) { // // std::cout << i << ": " << c.m_ptr[i] << "\n"; // } // // } int main( int argc, char *argv[] ) { // test(); // return 0; seqs sq; seqs sd; // typedef mapped_file file_input; typedef std::ifstream file_input; if( argc != 6 ) { throw std::runtime_error( "missing parameters. expect: <open> <ext> <query.fa> <db.fa> <matrix>" ); } const int gap_open = atoi( argv[1] ); const int gap_extend = atoi( argv[2] ); //std::cout << "gap: " << std::ifstream ism( argv[5] ); scoring_matrix sm( ism ); file_input qfi( argv[3] ); inc_fasta<file_input, scoring_matrix> qfasta( qfi, sm ); file_input dfi( argv[4] ); inc_fasta<file_input, scoring_matrix> dfasta( dfi, sm ); // for( int i = 0 ; i < sd.names.size(); i++ ) { // int sc = align<int>( sd.data[i], sq.data[0], sm ); // std::cout << sc << "\t" << sd.names[i] << "\n"; // } #if 0 const int W = 8; typedef short score_t; typedef short sscore_t; #else const int W = 16; typedef unsigned char score_t; typedef char sscore_t; #endif persistent_state<score_t> ps; // size_t db_size = (sd.names.size() / W ) * W; #ifndef LOCAL_ALIGN #define PAD_FRONT #endif typedef uint8_t seq_char_t; std::string dname[W]; std::vector<seq_char_t> ddata[W]; // size_t dpad[W]; aligned_buffer<seq_char_t> ddata_int; // std::vector<score_t> dmask[W]; std::string qname; std::vector<seq_char_t> qdata; bool have_input = true; size_t n_qseq = 0; size_t n_qchar = 0; size_t n_dseq = 0; size_t n_dchar = 0; bool first_block = true; while( have_input ) { size_t maxlen = 0; int lj = -1; // determine db sequences for the current block for( int j = 0; j < W; j++ ) { dname[j].resize(0); ddata[j].resize(0); have_input = dfasta.next_seq( dname[j], ddata[j] ); // if there aren't enough db sequences left to fill the block, pad with last db sequence if( !have_input ) { // break immediately if there are no db sequences left (means #db-seqs % W == 0, or otherwise have_input would have been == false from last iteration) if( j == 0 ) { break; } else { dname[j] = dname[lj]; ddata[j] = ddata[lj]; } } else { n_dseq++; n_dchar += ddata[j].size(); lj = j; // store largest valid 'j' // for( int i = 0; i < ddata[j].length(); i++ ) { // // ddata[j][i] = sm.state_backmap(ddata[j][i]); // } } // dmask[j].clear(); // dmask[j].resize(ddata[j].length(), 0xffff ); maxlen = std::max( maxlen, ddata[j].size() ); } // jf == -1 at this point means that the block is empty (#db-seqs % W == 0) if( lj == -1 ) { break; } // WARNING: front-padding is currently defunct #ifdef PAD_FRONT for( int j = 0; j < W; j++ ) { dpad[j] = maxlen - ddata[j].size(); } #endif // lj == -1 means that there are no remaining sequences // std::cout << "sdis: " << sdi.size() << "\n"; aligned_buffer<sscore_t> qprofile( maxlen * W * sm.num_states()); aligned_buffer<sscore_t>::iterator qpi = qprofile.begin(); #if 0 for( int j = 0; j < sm.num_states(); j++ ) { const int jstate = sm.get_state(j); // const scoring_matrix::score_t *slice = sm.get_slice(jstate); const scoring_matrix::score_t *cslice = sm.get_cslice(j); for( int k = 0; k < maxlen; k++ ) { for( int l = 0; l < W; l++ ) { std::vector<seq_char_t> &sdi = ddata[l]; #ifdef PAD_FRONT const size_t frontpad = dpad[l];//maxlen - sdi.size(); //if( k < sdi.size() ) { if( k >= frontpad ) { //*qpi = sm.get_score( sdi[k], jstate); *qpi = cslice[sdi[k - frontpad]]; #else if( k < sdi.size() ) { // *qpi = slice[sdi[k]]; *qpi = cslice[sdi[k]]; #endif } else { *qpi = 0; } // std::cout << "prof: " << (qpi - qprofile.begin() ) << " " << *qpi << " " << int(j) << " " << char(sm.get_state(j)) << " " << sdi[k] << "\n"; qpi++; } } } #else // setup the qprofile (= lookup table for match penalties along the db-sequences in the current block) // this is the faster (at least on core i5) two-step version, using interleaved db-sequences // setup buffer for interleaved db sequences if( ddata_int.size() < maxlen * W ) { ddata_int.resize(maxlen * W); } // copy individual db sequences into interleaved buffer (padding the shorter sequnences aligned_buffer<seq_char_t>::iterator dint_iter = ddata_int.begin(); const int zero_state = sm.get_zero_state(); for( size_t i = 0; i < maxlen; i++ ) { for( int j = 0; j < W; j++ ) { std::vector<seq_char_t> &sdi = ddata[j]; if( i < sdi.size() ) { *dint_iter = sdi[i]; } else { *dint_iter = zero_state; } ++dint_iter; } } for( size_t j = 0; j < sm.num_states(); j++ ) { dint_iter = ddata_int.begin(); const char *cslice = sm.get_cslice(j); for( size_t k = 0; k < maxlen; k++ ) { for( int l = 0; l < W; l++ ) { // if( *dint_iter == zero_state ) { // std::cout << int(cslice[*dint_iter]) << "\n"; // // } *qpi = cslice[*dint_iter]; ++dint_iter; ++qpi; } } } #endif // std::cout << "sdis2: " << sdi.size() << std::endl; // aligned_buffer<short> dv(sdi.size() * W); // short *dv_iter = dv.begin(); // // for( int j = 0; j < sdi.size(); j++ ) { // // for( int k = 0; k < W; k++ ) { // *dv_iter = sdi[j]; // dv_iter++; // } // // } // aligned_buffer<score_t> len(W); // for( int j = 0; j < W; j++ ) { // len.m_ptr[j] = sd.data[i + j].size(); // } std::vector<int> out(W); qfasta.reset(); while( qfasta.next_seq( qname, qdata )) { if( first_block ) { n_qseq++; n_qchar+=qdata.size(); } align_vec<score_t,sscore_t,W>( ps, maxlen, qdata, sm, qprofile, gap_open, gap_extend, out ); for( int j = 0; j <= lj; j++ ) { // std::cout << out[j] << "\t" << dname[j] << " " << qname << " " << ddata[j].size() << "\n"; std::cout << out[j] << "\t" << dname[j] << "\n"; } qname.resize(0); qdata.resize(0); } first_block = false; } std::cerr << n_qseq << "[" << n_qchar << "] x " << n_dseq << "[" << n_dchar << "]\n"; }