@@ -169,7 +169,7 @@ void Commands::upgrade() {
169169void Commands::evaluate (const std::string& path) {
170170 initLog (true );
171171 Program program = OeisProgram::getProgramAndSeqId (path).first ;
172- Evaluator evaluator (settings);
172+ Evaluator evaluator (settings, EVAL_ALL, false );
173173 Sequence seq;
174174 evaluator.eval (program, seq);
175175 if (!settings.print_as_b_file ) {
@@ -188,7 +188,7 @@ void Commands::check(const std::string& path) {
188188 uid = UID (Comments::getSequenceIdFromProgram (program));
189189 }
190190 auto seq = ManagedSequence (uid);
191- Evaluator evaluator (settings);
191+ Evaluator evaluator (settings, EVAL_ALL, true );
192192 auto terms = seq.getTerms (SequenceUtil::FULL_SEQ_LENGTH);
193193 auto num_required = OeisProgram::getNumRequiredTerms (program);
194194 auto result = evaluator.check (program, terms, num_required, uid);
@@ -273,7 +273,7 @@ void Commands::profile(const std::string& path) {
273273 initLog (true );
274274 Program program = OeisProgram::getProgramAndSeqId (path).first ;
275275 Sequence res;
276- Evaluator evaluator (settings);
276+ Evaluator evaluator (settings, EVAL_ALL, false );
277277 auto start_time = std::chrono::steady_clock::now ();
278278 evaluator.eval (program, res);
279279 auto cur_time = std::chrono::steady_clock::now ();
@@ -355,7 +355,7 @@ void Commands::autoFold() {
355355 AdaptiveScheduler log_scheduler (30 );
356356 bool folded;
357357 Program main, sub;
358- Evaluator evaluator (settings);
358+ Evaluator evaluator (settings, EVAL_ALL, false );
359359 std::map<int64_t , int64_t > cell_map;
360360 size_t main_loops, sub_loops;
361361 UID sub_id;
@@ -574,7 +574,7 @@ void Commands::testPari(const std::string& test_id) {
574574 initLog (false );
575575 Parser parser;
576576 Interpreter interpreter (settings);
577- Evaluator evaluator (settings);
577+ Evaluator evaluator (settings, EVAL_ALL, false );
578578 IncrementalEvaluator inceval (interpreter);
579579 OeisManager manager (settings);
580580 Memory tmp_memory;
@@ -736,7 +736,8 @@ bool checkRange(const ManagedSequence& seq, const Program& program,
736736void Commands::testRange (const std::string& id) {
737737 initLog (false );
738738 Parser parser;
739- int64_t numChecked = 0 ;
739+ size_t numChecked = 0 , numInvalid = 0 ;
740+ std::vector<UID> failedIds;
740741 OeisManager manager (settings);
741742 manager.load ();
742743 auto & stats = manager.getStats ();
@@ -748,6 +749,7 @@ void Commands::testRange(const std::string& id) {
748749 } else {
749750 seqs.push_back (manager.getSequences ().get (UID (id)));
750751 }
752+ Evaluator evaluator (settings, EVAL_ALL, false );
751753 for (const auto & seq : seqs) {
752754 if (seq.id .number () == 0 || !stats.all_program_ids .exists (seq.id )) {
753755 continue ;
@@ -757,18 +759,41 @@ void Commands::testRange(const std::string& id) {
757759 program = parser.parse (ProgramUtil::getProgramPath (seq.id ));
758760 } catch (const std::exception& e) {
759761 Log::get ().warn (std::string (e.what ()));
762+ numInvalid++;
760763 continue ;
761764 }
762- if (manager.getStats ().getTransitiveLength (seq.id ) < 0 ) {
765+ const auto initialTerms = seq.getTerms (8 );
766+ auto status = evaluator.check (program, initialTerms, -1 , seq.id );
767+ if (status.first == status_t ::ERROR) {
763768 Log::get ().warn (" Skipping invalid program for " + seq.id .string ());
769+ numInvalid++;
764770 continue ;
765771 }
766- if (checkRange (seq, program, false ) && checkRange (seq, program, true )) {
767- numChecked++;
772+ try {
773+ if (checkRange (seq, program, false ) && checkRange (seq, program, true )) {
774+ numChecked++;
775+ }
776+ } catch (const std::exception& e) {
777+ Log::get ().error (" Error during range check for " + seq.id .string () +
778+ " : " + std::string (e.what ()),
779+ false );
780+ failedIds.push_back (seq.id );
768781 }
769782 }
770- Log::get ().info (" Successfully finished range check for " +
771- std::to_string (numChecked) + " programs" );
783+ if (!failedIds.empty ()) {
784+ std::stringstream ss;
785+ for (const auto & id : failedIds) {
786+ ss << id.string () << " " ;
787+ }
788+ Log::get ().error (" Range check failed for " +
789+ std::to_string (failedIds.size ()) +
790+ " programs: " + ss.str (),
791+ true );
792+ } else {
793+ Log::get ().info (" Successfully finished range check for " +
794+ std::to_string (numChecked) + " programs, ingnored " +
795+ std::to_string (numInvalid) + " invalid programs" );
796+ }
772797}
773798
774799void Commands::generate () {
0 commit comments