diff --git a/tests/Lingua.AccuracyReport.Tests/ILanguageDetector.cs b/tests/Lingua.AccuracyReport.Tests/ILanguageDetector.cs index 8d383e9..0f5c28b 100644 --- a/tests/Lingua.AccuracyReport.Tests/ILanguageDetector.cs +++ b/tests/Lingua.AccuracyReport.Tests/ILanguageDetector.cs @@ -2,5 +2,5 @@ namespace Lingua.AccuracyReport.Tests; public interface ILanguageDetector { - public Language DetectLanguageOf(string text); + public Language DetectLanguageOf(string text, Language expectedLanguage); } diff --git a/tests/Lingua.AccuracyReport.Tests/Implementation.cs b/tests/Lingua.AccuracyReport.Tests/Implementation.cs index 455c9c3..81d4779 100644 --- a/tests/Lingua.AccuracyReport.Tests/Implementation.cs +++ b/tests/Lingua.AccuracyReport.Tests/Implementation.cs @@ -3,5 +3,6 @@ namespace Lingua.AccuracyReport.Tests; public enum Implementation { Lingua, - LanguageDetection + LanguageDetection, + NTextCat } diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AfrikaansDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AfrikaansDetectionAccuracyReport.cs index da6a04e..219f759 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AfrikaansDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AfrikaansDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class AfrikaansDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Afrikaans, statistics), + : LanguageDetectionDetectionAccuracyReport(Afrikaans, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AlbanianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AlbanianDetectionAccuracyReport.cs index 363460c..6b7b972 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AlbanianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AlbanianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class AlbanianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Albanian, statistics), + : LanguageDetectionDetectionAccuracyReport(Albanian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AmharicDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AmharicDetectionAccuracyReport.cs index e3d250e..883c240 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AmharicDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AmharicDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class AmharicDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Amharic, statistics), + : LanguageDetectionDetectionAccuracyReport(Amharic, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArabicDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArabicDetectionAccuracyReport.cs index ac98eef..771810a 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArabicDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArabicDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ArabicDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Arabic, statistics), + : LanguageDetectionDetectionAccuracyReport(Arabic, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArmenianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArmenianDetectionAccuracyReport.cs index 584ac45..cb860d4 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArmenianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ArmenianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ArmenianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Armenian, statistics), + : LanguageDetectionDetectionAccuracyReport(Armenian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AzerbaijaniDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AzerbaijaniDetectionAccuracyReport.cs index 2eb8a95..db7853c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AzerbaijaniDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/AzerbaijaniDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class AzerbaijaniDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Azerbaijani, statistics), + : LanguageDetectionDetectionAccuracyReport(Azerbaijani, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BasqueDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BasqueDetectionAccuracyReport.cs index a6d766c..7834051 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BasqueDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BasqueDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BasqueDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Basque, statistics), + : LanguageDetectionDetectionAccuracyReport(Basque, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BelarusianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BelarusianDetectionAccuracyReport.cs index ca49608..99e1a90 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BelarusianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BelarusianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BelarusianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Belarusian, statistics), + : LanguageDetectionDetectionAccuracyReport(Belarusian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BengaliDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BengaliDetectionAccuracyReport.cs index be7cda2..6f2ec9d 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BengaliDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BengaliDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BengaliDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Bengali, statistics), + : LanguageDetectionDetectionAccuracyReport(Bengali, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BokmalDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BokmalDetectionAccuracyReport.cs index fce13d5..96f36d2 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BokmalDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BokmalDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BokmalDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Bokmal, statistics), + : LanguageDetectionDetectionAccuracyReport(Bokmal, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BosnianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BosnianDetectionAccuracyReport.cs index a26247e..18dc169 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BosnianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BosnianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BosnianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Bosnian, statistics), + : LanguageDetectionDetectionAccuracyReport(Bosnian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BulgarianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BulgarianDetectionAccuracyReport.cs index de80b7a..3b62959 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BulgarianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/BulgarianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class BulgarianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Bulgarian, statistics), + : LanguageDetectionDetectionAccuracyReport(Bulgarian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CatalanDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CatalanDetectionAccuracyReport.cs index fa51226..aeae73a 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CatalanDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CatalanDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class CatalanDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Catalan, statistics), + : LanguageDetectionDetectionAccuracyReport(Catalan, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ChineseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ChineseDetectionAccuracyReport.cs index 7eb47fb..ccccbc5 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ChineseDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ChineseDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ChineseDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Chinese, statistics), + : LanguageDetectionDetectionAccuracyReport(Chinese, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CroatianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CroatianDetectionAccuracyReport.cs index 6e8fcc6..cae75a4 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CroatianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CroatianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class CroatianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Croatian, statistics), + : LanguageDetectionDetectionAccuracyReport(Croatian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CzechDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CzechDetectionAccuracyReport.cs index bada542..04a06d2 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CzechDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/CzechDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class CzechDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Czech, statistics), + : LanguageDetectionDetectionAccuracyReport(Czech, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DanishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DanishDetectionAccuracyReport.cs index b5e33f1..9bf950a 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DanishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DanishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class DanishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Danish, statistics), + : LanguageDetectionDetectionAccuracyReport(Danish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DutchDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DutchDetectionAccuracyReport.cs index f5f8b4e..427e887 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DutchDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/DutchDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class DutchDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Dutch, statistics), + : LanguageDetectionDetectionAccuracyReport(Dutch, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EnglishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EnglishDetectionAccuracyReport.cs index deacee0..49861ec 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EnglishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EnglishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class EnglishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(English, statistics), + : LanguageDetectionDetectionAccuracyReport(English, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EsperantoDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EsperantoDetectionAccuracyReport.cs index c70bc01..1f95572 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EsperantoDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EsperantoDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class EsperantoDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Esperanto, statistics), + : LanguageDetectionDetectionAccuracyReport(Esperanto, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EstonianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EstonianDetectionAccuracyReport.cs index 1527623..46b1505 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EstonianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/EstonianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class EstonianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Estonian, statistics), + : LanguageDetectionDetectionAccuracyReport(Estonian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FinnishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FinnishDetectionAccuracyReport.cs index 0c348ec..7fe1f60 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FinnishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FinnishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class FinnishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Finnish, statistics), + : LanguageDetectionDetectionAccuracyReport(Finnish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FrenchDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FrenchDetectionAccuracyReport.cs index 2cf6170..2cbab16 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FrenchDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/FrenchDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class FrenchDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(French, statistics), + : LanguageDetectionDetectionAccuracyReport(French, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GandaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GandaDetectionAccuracyReport.cs index 438b149..3ee0336 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GandaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GandaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class GandaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Ganda, statistics), + : LanguageDetectionDetectionAccuracyReport(Ganda, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GeorgianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GeorgianDetectionAccuracyReport.cs index d2cfcc4..37f85d2 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GeorgianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GeorgianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class GeorgianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Georgian, statistics), + : LanguageDetectionDetectionAccuracyReport(Georgian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GermanDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GermanDetectionAccuracyReport.cs index b5a7384..595188c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GermanDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GermanDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class GermanDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(German, statistics), + : LanguageDetectionDetectionAccuracyReport(German, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GreekDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GreekDetectionAccuracyReport.cs index 44ce3a2..921a936 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GreekDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GreekDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class GreekDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Greek, statistics), + : LanguageDetectionDetectionAccuracyReport(Greek, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GujaratiDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GujaratiDetectionAccuracyReport.cs index dc5867e..2e2abb1 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GujaratiDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/GujaratiDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class GujaratiDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Gujarati, statistics), + : LanguageDetectionDetectionAccuracyReport(Gujarati, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HebrewDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HebrewDetectionAccuracyReport.cs index a6c04a4..af9dcc1 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HebrewDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HebrewDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class HebrewDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Hebrew, statistics), + : LanguageDetectionDetectionAccuracyReport(Hebrew, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HindiDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HindiDetectionAccuracyReport.cs index 08fc7fd..b86faac 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HindiDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HindiDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class HindiDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Hindi, statistics), + : LanguageDetectionDetectionAccuracyReport(Hindi, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HungarianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HungarianDetectionAccuracyReport.cs index 2946977..79c2c50 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HungarianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/HungarianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class HungarianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Hungarian, statistics), + : LanguageDetectionDetectionAccuracyReport(Hungarian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IcelandicDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IcelandicDetectionAccuracyReport.cs index 8aa5db4..c42bf3c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IcelandicDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IcelandicDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class IcelandicDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Icelandic, statistics), + : LanguageDetectionDetectionAccuracyReport(Icelandic, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IndonesianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IndonesianDetectionAccuracyReport.cs index 0ba70e3..0d9542c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IndonesianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IndonesianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class IndonesianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Indonesian, statistics), + : LanguageDetectionDetectionAccuracyReport(Indonesian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IrishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IrishDetectionAccuracyReport.cs index e185627..5bfac38 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IrishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/IrishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class IrishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Irish, statistics), + : LanguageDetectionDetectionAccuracyReport(Irish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ItalianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ItalianDetectionAccuracyReport.cs index e96ce11..f8c919a 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ItalianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ItalianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ItalianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Italian, statistics), + : LanguageDetectionDetectionAccuracyReport(Italian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/JapaneseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/JapaneseDetectionAccuracyReport.cs index 0d533e2..6ad67f1 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/JapaneseDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/JapaneseDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class JapaneseDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Japanese, statistics), + : LanguageDetectionDetectionAccuracyReport(Japanese, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KazakhDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KazakhDetectionAccuracyReport.cs index 93442ea..8607484 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KazakhDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KazakhDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class KazakhDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Kazakh, statistics), + : LanguageDetectionDetectionAccuracyReport(Kazakh, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KoreanDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KoreanDetectionAccuracyReport.cs index 6f81fb1..4c1e3e7 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KoreanDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/KoreanDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class KoreanDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Korean, statistics), + : LanguageDetectionDetectionAccuracyReport(Korean, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionLanguageDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionDetectionAccuracyReport.cs similarity index 78% rename from tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionLanguageDetectionAccuracyReport.cs rename to tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionDetectionAccuracyReport.cs index c3284eb..a770d34 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionLanguageDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LanguageDetectionDetectionAccuracyReport.cs @@ -1,6 +1,6 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; -public abstract class LanguageDetectionLanguageDetectionAccuracyReport( +public abstract class LanguageDetectionDetectionAccuracyReport( Language language, LanguageDetectionStatistics statistics) : AbstractLanguageDetectionAccuracyReport(language, statistics); diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatinDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatinDetectionAccuracyReport.cs index d0f0235..7a38d80 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatinDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatinDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class LatinDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Latin, statistics), + : LanguageDetectionDetectionAccuracyReport(Latin, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatvianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatvianDetectionAccuracyReport.cs index 8ae0a96..d34b962 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatvianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LatvianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class LatvianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Latvian, statistics), + : LanguageDetectionDetectionAccuracyReport(Latvian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LithuanianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LithuanianDetectionAccuracyReport.cs index 738d08f..5ef8b3d 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LithuanianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/LithuanianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class LithuanianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Lithuanian, statistics), + : LanguageDetectionDetectionAccuracyReport(Lithuanian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MacedonianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MacedonianDetectionAccuracyReport.cs index 88391fa..dd67067 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MacedonianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MacedonianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class MacedonianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Macedonian, statistics), + : LanguageDetectionDetectionAccuracyReport(Macedonian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MalayDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MalayDetectionAccuracyReport.cs index 370bfad..8113965 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MalayDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MalayDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class MalayDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Malay, statistics), + : LanguageDetectionDetectionAccuracyReport(Malay, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MaoriDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MaoriDetectionAccuracyReport.cs index 94d35a3..be4d7cb 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MaoriDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MaoriDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class MaoriDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Maori, statistics), + : LanguageDetectionDetectionAccuracyReport(Maori, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MarathiDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MarathiDetectionAccuracyReport.cs index 7ac904e..56add12 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MarathiDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MarathiDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class MarathiDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Marathi, statistics), + : LanguageDetectionDetectionAccuracyReport(Marathi, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MongolianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MongolianDetectionAccuracyReport.cs index 8f3441e..fb40cf2 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MongolianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/MongolianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class MongolianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Mongolian, statistics), + : LanguageDetectionDetectionAccuracyReport(Mongolian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/NynorskDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/NynorskDetectionAccuracyReport.cs index bb81fc8..44f8252 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/NynorskDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/NynorskDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class NynorskDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Nynorsk, statistics), + : LanguageDetectionDetectionAccuracyReport(Nynorsk, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/OromoDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/OromoDetectionAccuracyReport.cs index 3ee7aa2..d6455ce 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/OromoDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/OromoDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class OromoDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Oromo, statistics), + : LanguageDetectionDetectionAccuracyReport(Oromo, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PersianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PersianDetectionAccuracyReport.cs index c2b76ed..c62da66 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PersianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PersianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class PersianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Persian, statistics), + : LanguageDetectionDetectionAccuracyReport(Persian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PolishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PolishDetectionAccuracyReport.cs index d38f124..81d0f40 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PolishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PolishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class PolishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Polish, statistics), + : LanguageDetectionDetectionAccuracyReport(Polish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PortugueseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PortugueseDetectionAccuracyReport.cs index 667dc2b..23ebf20 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PortugueseDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PortugueseDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class PortugueseDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Portuguese, statistics), + : LanguageDetectionDetectionAccuracyReport(Portuguese, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PunjabiDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PunjabiDetectionAccuracyReport.cs index 5dee202..4ed1b28 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PunjabiDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/PunjabiDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class PunjabiDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Punjabi, statistics), + : LanguageDetectionDetectionAccuracyReport(Punjabi, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RomanianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RomanianDetectionAccuracyReport.cs index ad4c449..53d424f 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RomanianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RomanianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class RomanianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Romanian, statistics), + : LanguageDetectionDetectionAccuracyReport(Romanian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RussianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RussianDetectionAccuracyReport.cs index 82da801..e03aac6 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RussianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/RussianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class RussianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Russian, statistics), + : LanguageDetectionDetectionAccuracyReport(Russian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SerbianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SerbianDetectionAccuracyReport.cs index 9df3128..4d2d685 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SerbianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SerbianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SerbianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Serbian, statistics), + : LanguageDetectionDetectionAccuracyReport(Serbian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ShonaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ShonaDetectionAccuracyReport.cs index 303b86c..43ec736 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ShonaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ShonaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ShonaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Shona, statistics), + : LanguageDetectionDetectionAccuracyReport(Shona, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SinhalaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SinhalaDetectionAccuracyReport.cs index d857644..4a7181e 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SinhalaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SinhalaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SinhalaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Sinhala, statistics), + : LanguageDetectionDetectionAccuracyReport(Sinhala, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SlovakDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SlovakDetectionAccuracyReport.cs index 2e4377e..aff816c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SlovakDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SlovakDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SlovakDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Slovak, statistics), + : LanguageDetectionDetectionAccuracyReport(Slovak, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SloveneDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SloveneDetectionAccuracyReport.cs index 5ea309d..5e35fe8 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SloveneDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SloveneDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SloveneDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Slovene, statistics), + : LanguageDetectionDetectionAccuracyReport(Slovene, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SomaliDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SomaliDetectionAccuracyReport.cs index f0bd88c..8283efa 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SomaliDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SomaliDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SomaliDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Somali, statistics), + : LanguageDetectionDetectionAccuracyReport(Somali, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SothoDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SothoDetectionAccuracyReport.cs index b01fd83..42acb9c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SothoDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SothoDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SothoDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Sotho, statistics), + : LanguageDetectionDetectionAccuracyReport(Sotho, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SpanishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SpanishDetectionAccuracyReport.cs index 5e68af4..8cc5c3d 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SpanishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SpanishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SpanishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Spanish, statistics), + : LanguageDetectionDetectionAccuracyReport(Spanish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwahiliDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwahiliDetectionAccuracyReport.cs index 9769a16..0e20f0c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwahiliDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwahiliDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SwahiliDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Swahili, statistics), + : LanguageDetectionDetectionAccuracyReport(Swahili, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwedishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwedishDetectionAccuracyReport.cs index 5d6b438..f243f03 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwedishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/SwedishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class SwedishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Swedish, statistics), + : LanguageDetectionDetectionAccuracyReport(Swedish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TagalogDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TagalogDetectionAccuracyReport.cs index d42a3a9..d6f0d90 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TagalogDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TagalogDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TagalogDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Tagalog, statistics), + : LanguageDetectionDetectionAccuracyReport(Tagalog, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TamilDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TamilDetectionAccuracyReport.cs index 500e602..ec63b86 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TamilDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TamilDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TamilDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Tamil, statistics), + : LanguageDetectionDetectionAccuracyReport(Tamil, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TeluguDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TeluguDetectionAccuracyReport.cs index 589ba2a..f40d96e 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TeluguDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TeluguDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TeluguDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Telugu, statistics), + : LanguageDetectionDetectionAccuracyReport(Telugu, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ThaiDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ThaiDetectionAccuracyReport.cs index 37197f6..75d2b4b 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ThaiDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ThaiDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ThaiDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Thai, statistics), + : LanguageDetectionDetectionAccuracyReport(Thai, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TigrinyaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TigrinyaDetectionAccuracyReport.cs index 6b975bc..05ea35c 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TigrinyaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TigrinyaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TigrinyaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Tigrinya, statistics), + : LanguageDetectionDetectionAccuracyReport(Tigrinya, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TsongaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TsongaDetectionAccuracyReport.cs index d2fd2d8..364d12a 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TsongaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TsongaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TsongaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Tsonga, statistics), + : LanguageDetectionDetectionAccuracyReport(Tsonga, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TswanaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TswanaDetectionAccuracyReport.cs index ca8f74f..8c131dc 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TswanaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TswanaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TswanaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Tswana, statistics), + : LanguageDetectionDetectionAccuracyReport(Tswana, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TurkishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TurkishDetectionAccuracyReport.cs index 3966185..09bf928 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TurkishDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/TurkishDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class TurkishDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Turkish, statistics), + : LanguageDetectionDetectionAccuracyReport(Turkish, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UkrainianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UkrainianDetectionAccuracyReport.cs index 40a49eb..33d1eec 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UkrainianDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UkrainianDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class UkrainianDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Ukrainian, statistics), + : LanguageDetectionDetectionAccuracyReport(Ukrainian, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UrduDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UrduDetectionAccuracyReport.cs index 7c0d067..4ad460f 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UrduDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/UrduDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class UrduDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Urdu, statistics), + : LanguageDetectionDetectionAccuracyReport(Urdu, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/VietnameseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/VietnameseDetectionAccuracyReport.cs index 7ad8d4e..9592226 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/VietnameseDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/VietnameseDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class VietnameseDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Vietnamese, statistics), + : LanguageDetectionDetectionAccuracyReport(Vietnamese, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/WelshDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/WelshDetectionAccuracyReport.cs index 102966d..1a65dde 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/WelshDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/WelshDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class WelshDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Welsh, statistics), + : LanguageDetectionDetectionAccuracyReport(Welsh, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/XhosaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/XhosaDetectionAccuracyReport.cs index 9a0618f..c8bdde2 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/XhosaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/XhosaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class XhosaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Xhosa, statistics), + : LanguageDetectionDetectionAccuracyReport(Xhosa, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/YorubaDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/YorubaDetectionAccuracyReport.cs index 06ef730..40a56ee 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/YorubaDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/YorubaDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class YorubaDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Yoruba, statistics), + : LanguageDetectionDetectionAccuracyReport(Yoruba, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ZuluDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ZuluDetectionAccuracyReport.cs index 3847dbc..499f171 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ZuluDetectionAccuracyReport.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetection/ZuluDetectionAccuracyReport.cs @@ -4,7 +4,7 @@ namespace Lingua.AccuracyReport.Tests.LanguageDetection; public class ZuluDetectionAccuracyReport(LanguageDetectionStatistics statistics) - : LanguageDetectionLanguageDetectionAccuracyReport(Zulu, statistics), + : LanguageDetectionDetectionAccuracyReport(Zulu, statistics), IClassFixture> { [Theory(DisplayName = "single word detection")] diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetectionLanguageDetector.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetectionLanguageDetector.cs index 9a58a7a..c43601d 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetectionLanguageDetector.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetectionLanguageDetector.cs @@ -2,12 +2,22 @@ namespace Lingua.AccuracyReport.Tests; public class LanguageDetectionLanguageDetector(global::LanguageDetection.LanguageDetector detector) : ILanguageDetector { - public Language DetectLanguageOf(string text) + public Language DetectLanguageOf(string text, Language expectedLanguage) { - var code = detector.Detect(text); - return code is null - ? Language.Unknown - : Enum.TryParse(code, true, out var result) + var iso6393 = detector.Detect(text); + + switch (iso6393) + { + case null: + return Language.Unknown; + // LanguageDetection only supports Norwegian, so convert to two written forms supported by Lingua + case "nor": + // Default to Bokmal, unless Nynorsk is expected + iso6393 = expectedLanguage == Language.Nynorsk ? "nno" : "nob"; + break; + } + + return Enum.TryParse(iso6393, true, out var result) ? LanguageInfo.GetByIsoCode6393(result) : Language.Unknown; } diff --git a/tests/Lingua.AccuracyReport.Tests/LanguageDetectionStatistics.cs b/tests/Lingua.AccuracyReport.Tests/LanguageDetectionStatistics.cs index bc06dc7..1cd5484 100644 --- a/tests/Lingua.AccuracyReport.Tests/LanguageDetectionStatistics.cs +++ b/tests/Lingua.AccuracyReport.Tests/LanguageDetectionStatistics.cs @@ -1,6 +1,4 @@ using System.Text; -using Xunit.Abstractions; -using Xunit.Sdk; namespace Lingua.AccuracyReport.Tests; @@ -163,11 +161,11 @@ public void ComputeSentenceStatistics(string sentence) _sentenceLengthCount += sentence.Length; } - private static void ComputeStatistics(Dictionary statistics, string element) + private void ComputeStatistics(Dictionary statistics, string element) { - var detectedLanguageInHighAccuracyMode = HighAccuracyDetector.DetectLanguageOf(element); + var detectedLanguageInHighAccuracyMode = HighAccuracyDetector.DetectLanguageOf(element, Language); var detectedLanguageInLowAccuracyMode = Factory.SupportsLowAccuracyMode - ? LowAccuracyDetector.DetectLanguageOf(element) + ? LowAccuracyDetector.DetectLanguageOf(element, Language) : detectedLanguageInHighAccuracyMode; var languageCounts = statistics.GetValueOrDefault(detectedLanguageInLowAccuracyMode, [0, 0]); diff --git a/tests/Lingua.AccuracyReport.Tests/Lingua.AccuracyReport.Tests.csproj b/tests/Lingua.AccuracyReport.Tests/Lingua.AccuracyReport.Tests.csproj index e61214e..a143d48 100644 --- a/tests/Lingua.AccuracyReport.Tests/Lingua.AccuracyReport.Tests.csproj +++ b/tests/Lingua.AccuracyReport.Tests/Lingua.AccuracyReport.Tests.csproj @@ -21,6 +21,7 @@ + @@ -29,6 +30,9 @@ + + PreserveNewest + diff --git a/tests/Lingua.AccuracyReport.Tests/LinguaLanguageDetector.cs b/tests/Lingua.AccuracyReport.Tests/LinguaLanguageDetector.cs index 44cdef0..70aa203 100644 --- a/tests/Lingua.AccuracyReport.Tests/LinguaLanguageDetector.cs +++ b/tests/Lingua.AccuracyReport.Tests/LinguaLanguageDetector.cs @@ -2,5 +2,5 @@ namespace Lingua.AccuracyReport.Tests; public class LinguaLanguageDetector(LanguageDetector detector) : ILanguageDetector { - public Language DetectLanguageOf(string text) => detector.DetectLanguageOf(text); + public Language DetectLanguageOf(string text, Language expectedLanguage) => detector.DetectLanguageOf(text); } diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/BokmalDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/BokmalDetectionAccuracyReport.cs new file mode 100644 index 0000000..f664d48 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/BokmalDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class BokmalDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Bokmal, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Bokmal)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Bokmal)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Bokmal)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/ChineseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/ChineseDetectionAccuracyReport.cs new file mode 100644 index 0000000..f2194aa --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/ChineseDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class ChineseDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Chinese, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Chinese)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Chinese)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Chinese)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/Core14.profile.xml b/tests/Lingua.AccuracyReport.Tests/NTextCat/Core14.profile.xml new file mode 100644 index 0000000..3e22128 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/Core14.profile.xml @@ -0,0 +1,56094 @@ + + + + + 4000 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/DanishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/DanishDetectionAccuracyReport.cs new file mode 100644 index 0000000..6f17880 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/DanishDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class DanishDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Danish, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Danish)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Danish)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Danish)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/DutchDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/DutchDetectionAccuracyReport.cs new file mode 100644 index 0000000..19b1b20 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/DutchDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class DutchDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Dutch, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Dutch)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Dutch)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Dutch)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/EnglishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/EnglishDetectionAccuracyReport.cs new file mode 100644 index 0000000..7446dbc --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/EnglishDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class EnglishDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(English, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(English)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(English)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(English)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/FrenchDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/FrenchDetectionAccuracyReport.cs new file mode 100644 index 0000000..1e7f7e3 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/FrenchDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class FrenchDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(French, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(French)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(French)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(French)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/GermanDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/GermanDetectionAccuracyReport.cs new file mode 100644 index 0000000..887b14a --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/GermanDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class GermanDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(German, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(German)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(German)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(German)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/ItalianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/ItalianDetectionAccuracyReport.cs new file mode 100644 index 0000000..c4ceae4 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/ItalianDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class ItalianDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Italian, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Italian)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Italian)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Italian)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/JapaneseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/JapaneseDetectionAccuracyReport.cs new file mode 100644 index 0000000..b584d1f --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/JapaneseDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class JapaneseDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Japanese, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Japanese)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Japanese)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Japanese)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/KoreanDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/KoreanDetectionAccuracyReport.cs new file mode 100644 index 0000000..a989286 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/KoreanDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class KoreanDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Korean, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Korean)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Korean)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Korean)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/NTextCatDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/NTextCatDetectionAccuracyReport.cs new file mode 100644 index 0000000..4a91edf --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/NTextCatDetectionAccuracyReport.cs @@ -0,0 +1,6 @@ +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public abstract class NTextCatDetectionAccuracyReport( + Language language, + LanguageDetectionStatistics statistics) + : AbstractLanguageDetectionAccuracyReport(language, statistics); diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/NynorskDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/NynorskDetectionAccuracyReport.cs new file mode 100644 index 0000000..f18dda5 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/NynorskDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class NynorskDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Nynorsk, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Nynorsk)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Nynorsk)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Nynorsk)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/PortugueseDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/PortugueseDetectionAccuracyReport.cs new file mode 100644 index 0000000..256df2c --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/PortugueseDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class PortugueseDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Portuguese, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Portuguese)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Portuguese)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Portuguese)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/RussianDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/RussianDetectionAccuracyReport.cs new file mode 100644 index 0000000..b1ef228 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/RussianDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class RussianDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Russian, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Russian)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Russian)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Russian)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/SpanishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/SpanishDetectionAccuracyReport.cs new file mode 100644 index 0000000..b8b06b5 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/SpanishDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class SpanishDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Spanish, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Spanish)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Spanish)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Spanish)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCat/SwedishDetectionAccuracyReport.cs b/tests/Lingua.AccuracyReport.Tests/NTextCat/SwedishDetectionAccuracyReport.cs new file mode 100644 index 0000000..44ddf84 --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCat/SwedishDetectionAccuracyReport.cs @@ -0,0 +1,25 @@ +using Lingua.AccuracyReport.Tests.Lingua; +using Xunit; +using static Lingua.Language; + +namespace Lingua.AccuracyReport.Tests.NTextCat; + +public class SwedishDetectionAccuracyReport(LanguageDetectionStatistics statistics) + : NTextCatDetectionAccuracyReport(Swedish, statistics), + IClassFixture> +{ + [Theory(DisplayName = "single word detection")] + [SingleWordData(Swedish)] + public override void SingleWordsAreIdentifiedCorrectly(string singleWord) => + ComputeSingleWordStatistics(singleWord); + + [Theory(DisplayName = "word pair detection")] + [WordPairsData(Swedish)] + public override void WordPairsAreIdentifiedCorrectly(string wordPair) => + ComputeWordPairStatistics(wordPair); + + [Theory(DisplayName = "sentence detection")] + [SentenceData(Swedish)] + public override void EntireSentencesAreIdentifiedCorrectly(string sentence) => + ComputeSentenceStatistics(sentence); +} diff --git a/tests/Lingua.AccuracyReport.Tests/NTextCatLanguageDetector.cs b/tests/Lingua.AccuracyReport.Tests/NTextCatLanguageDetector.cs new file mode 100644 index 0000000..188413a --- /dev/null +++ b/tests/Lingua.AccuracyReport.Tests/NTextCatLanguageDetector.cs @@ -0,0 +1,41 @@ +using NTextCat; + +namespace Lingua.AccuracyReport.Tests; + +public class NTextCatLanguageDetector(RankedLanguageIdentifier rankedLanguageIdentifier) : ILanguageDetector +{ + public Language DetectLanguageOf(string text, Language expectedLanguage) + { + var values = rankedLanguageIdentifier.Identify(text).ToList(); + + if (values.Count == 0) + return Language.Unknown; + + // NTextCat only supports Norwegian, so convert to two written forms supported by Lingua + var iso6393 = values[0].Item1.Iso639_3; + if (iso6393 == "nor") + { + // Default to Bokmal, unless Nynorsk is expected + iso6393 = expectedLanguage == Language.Nynorsk ? "nno" : "nob"; + } + + return Enum.TryParse(iso6393, true, out var result) + ? LanguageInfo.GetByIsoCode6393(result) + : Language.Unknown; + } +} + +public class NTextCatLanguageDetectorFactory : ILanguageDetectorFactory +{ + public Implementation Implementation => Implementation.NTextCat; + public bool SupportsLowAccuracyMode => false; + + public (ILanguageDetector lowAccuracyDetector, ILanguageDetector highAccuracyDetector) Create() + { + var factory = new RankedLanguageIdentifierFactory(); + var detector = new NTextCatLanguageDetector(factory.Load(Path.Combine("NTextCat", "Core14.profile.xml"))); + + return (detector, detector); + } +} +