Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package lttoolbox for openSUSE:Factory checked in at 2025-08-15 21:52:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lttoolbox (Old) and /work/SRC/openSUSE:Factory/.lttoolbox.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lttoolbox" Fri Aug 15 21:52:27 2025 rev:8 rq:1299482 version:3.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/lttoolbox/lttoolbox.changes 2025-04-11 16:47:35.613278834 +0200 +++ /work/SRC/openSUSE:Factory/.lttoolbox.new.1085/lttoolbox.changes 2025-08-15 21:53:56.136798365 +0200 @@ -1,0 +2,7 @@ +Fri Aug 15 00:08:03 UTC 2025 - Jan Engelhardt <[email protected]> + +- Update to release 3.8.2 + * Reuse sequence vectors in State + * Treat weighted epsilons as non-epsilons + +------------------------------------------------------------------- Old: ---- v3.8.0.tar.gz New: ---- v3.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lttoolbox.spec ++++++ --- /var/tmp/diff_new_pack.6L92uj/_old 2025-08-15 21:53:56.688821319 +0200 +++ /var/tmp/diff_new_pack.6L92uj/_new 2025-08-15 21:53:56.692821486 +0200 @@ -18,7 +18,7 @@ Name: lttoolbox %define lname liblttoolbox3 -Version: 3.8.0 +Version: 3.8.2 Release: 0 Summary: Toolbox for lexical processing and morphological analysis License: GPL-2.0-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.6L92uj/_old 2025-08-15 21:53:56.736823315 +0200 +++ /var/tmp/diff_new_pack.6L92uj/_new 2025-08-15 21:53:56.740823482 +0200 @@ -1,5 +1,5 @@ -mtime: 1744285331 -commit: d07bca0e777d37e3d5f9fedc5515cfe07c09cfbd4186fc15ccded082230a973f +mtime: 1755216500 +commit: e7c4e7f11ff6dc5f215fdfe8a303bf852a5c239f80cdc483b46d6ff5f149144e url: https://src.opensuse.org/jengelh/lttoolbox revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2025-08-15 02:08:39.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ v3.8.0.tar.gz -> v3.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/CMakeLists.txt new/lttoolbox-3.8.2/CMakeLists.txt --- old/lttoolbox-3.8.0/CMakeLists.txt 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/CMakeLists.txt 2025-08-04 20:29:18.000000000 +0200 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) project(lttoolbox - VERSION 3.8.0 + VERSION 3.8.2 LANGUAGES CXX C ) set(VERSION ${PROJECT_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/lttoolbox/lt_comp.cc new/lttoolbox-3.8.2/lttoolbox/lt_comp.cc --- old/lttoolbox-3.8.0/lttoolbox/lt_comp.cc 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/lttoolbox/lt_comp.cc 2025-08-04 20:29:18.000000000 +0200 @@ -119,7 +119,7 @@ std::cerr << "Error: Cannot not open file '" << infile << "'." << std::endl << std::endl; exit(EXIT_FAILURE); } - initGenericErrorDefaultFunc(NULL); + xmlSetGenericErrorFunc(nullptr, nullptr); if(opc == "lr") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/lttoolbox/lt_merge.cc new/lttoolbox-3.8.2/lttoolbox/lt_merge.cc --- old/lttoolbox-3.8.0/lttoolbox/lt_merge.cc 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/lttoolbox/lt_merge.cc 2025-08-04 20:29:18.000000000 +0200 @@ -29,6 +29,7 @@ cli.add_file_arg("output_file"); cli.add_bool_arg('u', "unmerge", "Undo the merge"); cli.add_bool_arg('z', "null-flush", "flush output on the null character"); + cli.add_bool_arg('h', "help", "print this message and exit"); cli.parse_args(argc, argv); auto strs = cli.get_strs(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/lttoolbox/state.cc new/lttoolbox-3.8.2/lttoolbox/state.cc --- old/lttoolbox-3.8.0/lttoolbox/state.cc 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/lttoolbox/state.cc 2025-08-04 20:29:18.000000000 +0200 @@ -60,6 +60,26 @@ } state.clear(); + + for (auto& it : sequence_pool) { + delete it; + } + sequence_pool.clear(); +} + +std::vector<std::pair<int, double>>* +State::new_sequence() { + if (sequence_pool.empty()) { + sequence_pool.push_back(new std::vector<std::pair<int, double>>()); + } + auto ret = sequence_pool.back(); + sequence_pool.pop_back(); + return ret; +} + +void +State::free_sequence(std::vector<std::pair<int, double>>* seq) { + sequence_pool.push_back(seq); } void @@ -70,12 +90,15 @@ { delete state[i].sequence; } + for (auto& it : sequence_pool) { + delete it; + } state = s.state; for(size_t i = 0, limit = state.size(); i != limit; i++) { - std::vector<std::pair<int, double>> *tmp = new std::vector<std::pair<int, double>>(); + auto tmp = new_sequence(); *tmp = *(state[i].sequence); state[i].sequence = tmp; } @@ -91,7 +114,7 @@ State::init(Node *initial) { state.clear(); - state.push_back(TNodeState(initial, new std::vector<std::pair<int, double>>(), false)); + state.push_back(TNodeState(initial, new_sequence(), false)); state[0].sequence->clear(); epsilonClosure(); } @@ -105,7 +128,7 @@ { for(int j = 0; j != it->second.size; j++) { - std::vector<std::pair<int, double>> *new_v = new std::vector<std::pair<int, double>>(); + auto new_v = new_sequence(); *new_v = *(state[index].sequence); if(it->first != 0) { @@ -127,7 +150,7 @@ { for(int j = 0; j != it->second.size; j++) { - std::vector<std::pair<int, double>> *new_v = new std::vector<std::pair<int, double>>(); + auto new_v = new_sequence(); *new_v = *(state[index].sequence); if(it->first != 0) { @@ -160,7 +183,7 @@ for(size_t i = 0, limit = state.size(); i != limit; i++) { apply_into(&new_state, input, i, false); - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -180,7 +203,7 @@ { apply_into_override(&new_state, input, old_sym, new_sym, i, false); apply_into_override(&new_state, old_sym, old_sym, new_sym, i, true); - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -207,7 +230,7 @@ apply_into_override(&new_state, input, old_sym, new_sym, i, false); apply_into_override(&new_state, alt, old_sym, new_sym, i, true); apply_into_override(&new_state, old_sym, old_sym, new_sym, i, true); - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -233,7 +256,7 @@ { apply_into(&new_state, input, i, false); apply_into(&new_state, alt, i, true); - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -255,7 +278,7 @@ { apply_into(&new_state, alt, i, true); } - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -271,7 +294,7 @@ { for(int j = 0 ; j != it2->second.size; j++) { - std::vector<std::pair<int, double>> *tmp = new std::vector<std::pair<int, double>>(); + auto tmp = new_sequence(); *tmp = *(state[i].sequence); if(it2->second.out_tag[j] != 0) { @@ -309,7 +332,7 @@ apply_into(&new_state, input, i, false); apply_into(&new_state, alt1, i, true); apply_into(&new_state, alt2, i, true); - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -342,7 +365,7 @@ apply_into(&new_state, *sit, i, true); } - delete state[i].sequence; + free_sequence(state[i].sequence); } state = new_state; @@ -793,7 +816,7 @@ { if(noOfCompoundElements[i] > minNoOfCompoundElements) { - delete (*it).sequence; + free_sequence((*it).sequence); it = state.erase(it); } else @@ -821,7 +844,7 @@ if((seq->at(i)).first == forbiddenSymbol) { i=-1; - delete (*it).sequence; + free_sequence((*it).sequence); it = state.erase(it); found = true; } @@ -895,7 +918,8 @@ for(unsigned int j=0; j<restart_state->state.size(); j++) { TNodeState initst = restart_state->state.at(j); - std::vector<std::pair<int, double>> *tnvec = new std::vector<std::pair<int, double>>; + auto tnvec = new_sequence(); + tnvec->clear(); for(unsigned int k=0; k < state_i.sequence->size(); k++) { @@ -943,7 +967,7 @@ State::merge(const State& other) { for (auto& it : other.state) { - std::vector<std::pair<int, double>>* tmp = new std::vector<std::pair<int, double>>(); + auto tmp = new_sequence(); *tmp = *(it.sequence); TNodeState ns(it.where, tmp, it.dirty); this->state.push_back(std::move(ns)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/lttoolbox/state.h new/lttoolbox-3.8.2/lttoolbox/state.h --- old/lttoolbox-3.8.0/lttoolbox/state.h 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/lttoolbox/state.h 2025-08-04 20:29:18.000000000 +0200 @@ -68,6 +68,12 @@ std::vector<TNodeState> state; + std::vector<std::vector<std::pair<int, double>>*> sequence_pool; + // get or create a sequence vector (may be non-empty) + std::vector<std::pair<int, double>>* new_sequence(); + // return a sequence vector to the pool + void free_sequence(std::vector<std::pair<int, double>>*); + /** * Destroy function */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/lttoolbox/transducer.cc new/lttoolbox-3.8.2/lttoolbox/transducer.cc --- old/lttoolbox-3.8.0/lttoolbox/transducer.cc 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/lttoolbox/transducer.cc 2025-08-04 20:29:18.000000000 +0200 @@ -256,6 +256,7 @@ c.insert(i); auto range = transitions.at(i).equal_range(epsilon_tag); for (; range.first != range.second; range.first++) { + if (range.first->second.second != default_weight) continue; c.insert(range.first->second.first); reversed[range.first->second.first].push_back(i); } @@ -356,7 +357,7 @@ { for(auto& it3 : transitions[it2]) { - if(it3.first != epsilon_tag) + if(it3.first != epsilon_tag || it3.second.second != default_weight) { auto& it4 = all_closures[it3.second.first]; mymap[std::make_pair(it3.first, it3.second.second)].insert(it4.begin(), it4.end()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/tests/basictest.py new/lttoolbox-3.8.2/tests/basictest.py --- old/lttoolbox-3.8.0/tests/basictest.py 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/tests/basictest.py 2025-08-04 20:29:18.000000000 +0200 @@ -34,13 +34,13 @@ output = [] char = None try: - char = self.withTimeout(2, process.stdout.read, 1) + char = self.withTimeout(10, process.stdout.read, 1) except Alarm: print("Timeout before reading a single character!", file=stderr) while char and char != b'\0': output.append(char) try: - char = self.withTimeout(2, process.stdout.read, 1) + char = self.withTimeout(10, process.stdout.read, 1) except Alarm: print("Timeout before reading %s chars" % len(output), file=stderr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/tests/data/more-entry-weights.dix new/lttoolbox-3.8.2/tests/data/more-entry-weights.dix --- old/lttoolbox-3.8.0/tests/data/more-entry-weights.dix 1970-01-01 01:00:00.000000000 +0100 +++ new/lttoolbox-3.8.2/tests/data/more-entry-weights.dix 2025-08-04 20:29:18.000000000 +0200 @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dictionary> + <alphabet>ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÄÅÆÇÈÉÊËÍÑÒÓÔÕÖØÙÚÜČĐŊŠŦŽabcdefghijklmnopqrstuvwxyzàáâäåæçèéêëíñòóôõöøùúüčđŋšŧž-</alphabet> + <sdefs> + <sdef n="n"/> + <sdef n="vblex"/> + <sdef n="m"/> + <sdef n="pr"/> + <sdef n="def"/> + <sdef n="inf"/> + <sdef n="imp"/> + <sdef n="pp"/> + <sdef n="pprs"/> + <sdef n="ger"/> + <sdef n="subs"/> + <sdef n="pres"/> + <sdef n="past"/> + <sdef n="p3"/> + <sdef n="sg"/> + <sdef n="pl"/> + <sdef n="gen"/> + </sdefs> + <pardefs> + <pardef n="liv/e__vblex"> + <e w="1"><p><l>e</l><r>e<s n="vblex"/><s n="inf"/></r></p></e> + <e w="2"><p><l>e</l><r>e<s n="vblex"/><s n="imp"/></r></p></e> + <e><p><l>ed</l><r>e<s n="vblex"/><s n="pp"/></r></p></e> + <e w="1"><p><l>ing</l><r>e<s n="vblex"/><s n="pprs"/></r></p></e> + <e w="3"><p><l>ing</l><r>e<s n="vblex"/><s n="ger"/></r></p></e> + <e w="2"><p><l>ing</l><r>e<s n="vblex"/><s n="subs"/></r></p></e> + <e><p><l>e</l><r>e<s n="vblex"/><s n="pres"/></r></p></e> + <e><p><l>es</l><r>e<s n="vblex"/><s n="pres"/><s n="p3"/><s n="sg"/></r></p></e> + <e><p><l>ed</l><r>e<s n="vblex"/><s n="past"/></r></p></e> + </pardef> + <pardef n="house__n"> + <e><p><l></l><r><s n="n"/><s n="sg"/></r></p></e> + <e r="RL"><p><l>'s</l><r><s n="n"/><s n="sg"/><j/>'s<s n="gen"/></r></p></e> + <e><p><l>s</l><r><s n="n"/><s n="pl"/></r></p></e> + <e r="RL"><p><l>s'</l><r><s n="n"/><s n="pl"/><j/>'s<s n="gen"/></r></p></e> + </pardef> + </pardefs> + <section id="main" type="standard"> + <e lm="house" w="1"><i>house</i><par n="house__n"/></e> + <e lm="house" w="2"><i>hous</i><par n="liv/e__vblex"/></e> + </section> +</dictionary> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lttoolbox-3.8.0/tests/lt_comp/__init__.py new/lttoolbox-3.8.2/tests/lt_comp/__init__.py --- old/lttoolbox-3.8.0/tests/lt_comp/__init__.py 2025-03-10 12:25:02.000000000 +0100 +++ new/lttoolbox-3.8.2/tests/lt_comp/__init__.py 2025-08-04 20:29:18.000000000 +0200 @@ -113,3 +113,9 @@ restrictflags = ['-v', 'oci'] inputs = ['abc', 'ab'] expectedOutputs = ['^abc/*abc$', '^ab/abbb<n><ind>$'] + +class ConflictingEntryWeights(ProcTest): + procflags = ['-W'] + procdix = 'data/more-entry-weights.dix' + inputs = ['house'] + expectedOutputs = ['^house/house<n><sg><W:1.000000>/house<vblex><pres><W:2.000000>/house<vblex><inf><W:3.000000>/house<vblex><imp><W:4.000000>$']
