diff --git a/src/NaturalLanguage/Enums.cs b/src/NaturalLanguage/Enums.cs index 441e252490..cb2daf08a7 100644 --- a/src/NaturalLanguage/Enums.cs +++ b/src/NaturalLanguage/Enums.cs @@ -1,4 +1,4 @@ -// Copyright 2018, Microsoft Corp. +// Copyright 2018-2019 Microsoft Corp. // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -201,5 +201,8 @@ namespace NaturalLanguage { Language, [Field ("NLTagSchemeScript")] Script, + [iOS (13,0), Mac (10,15), TV (13,0), Watch (6,0)] + [Field ("NLTagSchemeSentimentScore")] + SentimentScore, } } diff --git a/src/NaturalLanguage/NLEmbedding.cs b/src/NaturalLanguage/NLEmbedding.cs new file mode 100644 index 0000000000..9192971e26 --- /dev/null +++ b/src/NaturalLanguage/NLEmbedding.cs @@ -0,0 +1,22 @@ +using System; + +using CoreFoundation; +using Foundation; + +namespace NaturalLanguage { + + public partial class NLEmbedding { + + unsafe public bool TryGetVector (string @string, out float[] vector) + { + var result = false; + vector = new float [Dimension]; + fixed (float *ptr = vector) { + result = GetVector ((IntPtr) ptr, @string); + } + if (!result) + vector = null; // to be consistent with GetVector API + return result; + } + } +} diff --git a/src/NaturalLanguage/NLStrongDictionary.cs b/src/NaturalLanguage/NLStrongDictionary.cs new file mode 100644 index 0000000000..8943094b7b --- /dev/null +++ b/src/NaturalLanguage/NLStrongDictionary.cs @@ -0,0 +1,43 @@ +using System; + +using CoreFoundation; +using Foundation; + +namespace NaturalLanguage { + + // nicer replacement for `NSDictionary>` + public class NLStrongDictionary : DictionaryContainer { + +#if !COREBUILD + public NLStrongDictionary () + { + } + + public NLStrongDictionary (NSDictionary dictionary) : base (dictionary) + { + } + + public string[] this [NSString key] { + get { + if (key == null) + throw new ArgumentNullException (nameof (key)); + + var value = CFDictionary.GetValue (Dictionary.Handle, key.Handle); + return NSArray.StringArrayFromHandle (value); + } + set { + SetArrayValue (key, value); + } + } + + public string[] this [string key] { + get { + return this [(NSString) key]; + } + set { + SetArrayValue ((NSString) key, value); + } + } +#endif + } +} diff --git a/src/NaturalLanguage/NLVectorDictionary.cs b/src/NaturalLanguage/NLVectorDictionary.cs new file mode 100644 index 0000000000..5d5ea6102b --- /dev/null +++ b/src/NaturalLanguage/NLVectorDictionary.cs @@ -0,0 +1,51 @@ +using System; + +using CoreFoundation; +using Foundation; + +namespace NaturalLanguage { + + // nicer replacement for `NSDictionary>` + public class NLVectorDictionary : DictionaryContainer { + +#if !COREBUILD + public NLVectorDictionary () + { + } + + public NLVectorDictionary (NSDictionary dictionary) : base (dictionary) + { + } + + public float[] this [NSString key] { + get { + if (key == null) + throw new ArgumentNullException (nameof (key)); + + var a = CFDictionary.GetValue (Dictionary.Handle, key.Handle); + return NSArray.ArrayFromHandle (a, input => { + return new NSNumber (input).FloatValue; + }); + } + set { + if (key == null) + throw new ArgumentNullException (nameof (key)); + + if (value == null) + RemoveValue (key); + else + Dictionary [key] = NSArray.From (value); + } + } + + public float[] this [string key] { + get { + return this [(NSString) key]; + } + set { + this [(NSString) key] = value; + } + } +#endif + } +} diff --git a/src/frameworks.sources b/src/frameworks.sources index 273b8300c0..b645a8fa96 100644 --- a/src/frameworks.sources +++ b/src/frameworks.sources @@ -1133,7 +1133,12 @@ MULTIPEERCONNECTIVITY_SOURCES = \ NATURALLANGUAGE_API_SOURCES = \ NaturalLanguage/Enums.cs \ +NATURALLANGUAGE_CORE_SOURCES = \ + NaturalLanguage/NLStrongDictionary.cs \ + NaturalLanguage/NLVectorDictionary.cs \ + NATURALLANGUAGE_SOURCES = \ + NaturalLanguage/NLEmbedding.cs \ NaturalLanguage/NLLanguageRecognizer.cs \ # Network diff --git a/src/naturallanguage.cs b/src/naturallanguage.cs index 2a3e3e5c2d..1c2ab24a0b 100644 --- a/src/naturallanguage.cs +++ b/src/naturallanguage.cs @@ -1,4 +1,4 @@ -// Copyright 2018, Microsoft, Corp. +// Copyright 2018-2019 Microsoft, Corp. // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -251,6 +251,37 @@ namespace NaturalLanguage { [Wrap ("GetModels (tagScheme.GetConstant ())")] NLModel[] GetModels (NLTagScheme tagScheme); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Export ("setGazetteers:forTagScheme:")] + void SetGazetteers (NLGazetteer[] gazetteers, NSString tagScheme); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [Wrap ("SetGazetteers (gazetteers, tagScheme.GetConstant ())")] + void SetGazetteers (NLGazetteer[] gazetteers, NLTagScheme tagScheme); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Export ("gazetteersForTagScheme:")] + NLGazetteer[] GetGazetteers (NSString tagScheme); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [Wrap ("GetGazetteers (tagScheme.GetConstant ())")] + NLGazetteer[] GetGazetteers (NLTagScheme tagScheme); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Async] + [Export ("requestAssetsForLanguage:tagScheme:completionHandler:")] + void RequestAssets (NSString language, NSString tagScheme, Action completionHandler); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [Static] + [Async] + [Wrap ("RequestAssets (language.GetConstant (), tagScheme.GetConstant (), completionHandler)")] + void RequestAssets (NLLanguage language, NLTagScheme tagScheme, Action completionHandler); } [iOS (12,0), Mac (10,14), TV (12,0), Watch (5,0)] @@ -319,4 +350,184 @@ namespace NaturalLanguage { [Field ("NLTagOrganizationName")] NSString OrganizationName { get; } } + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [Native] + enum NLDistanceType : long { + Cosine, + } + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [Native] + enum NLTaggerAssetsResult : long { + Available, + NotAvailable, + Error, + } + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + delegate void NLEnumerateNeighborsHandler (string neighbor, /* NLDistance */ double distance, ref bool stop); + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface NLEmbedding { + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("wordEmbeddingForLanguage:")] + [return: NullAllowed] + NLEmbedding GetWordEmbedding (NSString language); + + [Static] + [Wrap ("GetWordEmbedding (language.GetConstant ())")] + [return: NullAllowed] + NLEmbedding GetWordEmbedding (NLLanguage language); + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("wordEmbeddingForLanguage:revision:")] + [return: NullAllowed] + NLEmbedding GetWordEmbedding (NSString language, nuint revision); + + [Static] + [Wrap ("GetWordEmbedding (language.GetConstant ())")] + [return: NullAllowed] + NLEmbedding GetWordEmbedding (NLLanguage language, nuint revision); + + [Static] + [Export ("embeddingWithContentsOfURL:error:")] + [return: NullAllowed] + NLEmbedding GetEmbedding (NSUrl url, [NullAllowed] out NSError error); + + [Export ("containsString:")] + bool Contains (string @string); + + [Export ("distanceBetweenString:andString:distanceType:")] + double GetDistance (string firstString, string secondString, NLDistanceType distanceType); + + [Export ("enumerateNeighborsForString:maximumCount:distanceType:usingBlock:")] + void EnumerateNeighbors (string @string, nuint maxCount, NLDistanceType distanceType, NLEnumerateNeighborsHandler handler); + + [Export ("enumerateNeighborsForString:maximumCount:maximumDistance:distanceType:usingBlock:")] + void EnumerateNeighbors (string @string, nuint maxCount, double maxDistance, NLDistanceType distanceType, NLEnumerateNeighborsHandler handler); + + [Export ("neighborsForString:maximumCount:distanceType:")] + [return: NullAllowed] + string[] GetNeighbors (string @string, nuint maxCount, NLDistanceType distanceType); + + [Export ("neighborsForString:maximumCount:maximumDistance:distanceType:")] + [return: NullAllowed] + string[] GetNeighbors (string @string, nuint maxCount, double maxDistance, NLDistanceType distanceType); + + [Export ("vectorForString:")] + [return: NullAllowed] + [return: BindAs (typeof (float[]))] // doc says "array of double" but other API uses float ?!? + NSNumber[] GetVector (string @string); + + [Internal] // can't bind float[] without NSArray but it will be better bound using .net pattern `bool TryGetVector (string, out float[] vector)` + [Export ("getVector:forString:")] + bool GetVector (IntPtr /* float[] */ vector, string @string); + + [Export ("enumerateNeighborsForVector:maximumCount:distanceType:usingBlock:")] + void EnumerateNeighbors ([BindAs (typeof (float[]))] NSNumber[] vector, nuint maxCount, NLDistanceType distanceType, NLEnumerateNeighborsHandler handler); + + [Export ("enumerateNeighborsForVector:maximumCount:maximumDistance:distanceType:usingBlock:")] + void EnumerateNeighbors ([BindAs (typeof (float[]))] NSNumber[] vector, nuint maxCount, double maxDistance, NLDistanceType distanceType, NLEnumerateNeighborsHandler handler); + + [Export ("neighborsForVector:maximumCount:distanceType:")] + string[] GetNeighbors ([BindAs (typeof (float[]))] NSNumber[] vector, nuint maxCount, NLDistanceType distanceType); + + [Export ("neighborsForVector:maximumCount:maximumDistance:distanceType:")] + string[] GetNeighbors ([BindAs (typeof (float[]))] NSNumber[] vector, nuint maxCount, double maxDistance, NLDistanceType distanceType); + + [Export ("dimension")] + nuint Dimension { get; } + + [Export ("vocabularySize")] + nuint VocabularySize { get; } + + [NullAllowed, Export ("language")] + [BindAs (typeof (NLLanguage?))] + NSString Language { get; } + + [Export ("revision")] + nuint Revision { get; } + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("supportedRevisionsForLanguage:")] + NSIndexSet GetSupportedRevisions (NSString language); + + [Static] + [Wrap ("GetSupportedRevisions (language.GetConstant ())")] + NSIndexSet GetSupportedRevisions (NLLanguage language); + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("currentRevisionForLanguage:")] + nuint GetCurrentRevision (NSString language); + + [Static] + [Wrap ("GetCurrentRevision (language.GetConstant ())")] + nuint GetCurrentRevision (NLLanguage language); + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("writeEmbeddingForDictionary:language:revision:toURL:error:")] + bool Write (NSDictionary dictionary, [NullAllowed] NSString language, nuint revision, NSUrl url, [NullAllowed] out NSError error); + + [Static] + [Wrap ("Write (dictionary.GetDictionary (), language.HasValue ? language.Value.GetConstant () : null, revision, url, out error)")] + bool Write (NLVectorDictionary dictionary, NLLanguage? language, nuint revision, NSUrl url, [NullAllowed] out NSError error); + } + + [Watch (6,0), TV (13,0), Mac (10,15), iOS (13,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface NLGazetteer { + + [Static] + [Export ("gazetteerWithContentsOfURL:error:")] + [return: NullAllowed] + NLGazetteer Create (NSUrl url, [NullAllowed] out NSError error); + + [Export ("initWithContentsOfURL:error:")] + [DesignatedInitializer] + IntPtr Constructor (NSUrl url, [NullAllowed] out NSError error); + + [Export ("initWithData:error:")] + [DesignatedInitializer] + IntPtr Constructor (NSData data, [NullAllowed] out NSError error); + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Export ("initWithDictionary:language:error:")] + [DesignatedInitializer] + IntPtr Constructor (NSDictionary dictionary, [NullAllowed] NSString language, [NullAllowed] out NSError error); + + // sadly `language?.GetConstant ()` does not cut it :( + // error CS1929: 'NLLanguage?' does not contain a definition for 'GetConstant' and the best extension method overload 'NLLanguageExtensions.GetConstant(NLLanguage)' requires a receiver of type 'NLLanguage' + [Wrap ("this (dictionary.GetDictionary (), language.HasValue ? language.Value.GetConstant () : null, out error)")] + IntPtr Constructor (NLStrongDictionary dictionary, NLLanguage? language, [NullAllowed] out NSError error); + + [Export ("labelForString:")] + [return: NullAllowed] + string GetLabel (string @string); + + [NullAllowed, Export ("language")] + [BindAs (typeof (NLLanguage?))] + NSString Language { get; } + + [Export ("data", ArgumentSemantic.Copy)] + NSData Data { get; } + + [EditorBrowsable (EditorBrowsableState.Advanced)] + [Static] + [Export ("writeGazetteerForDictionary:language:toURL:error:")] + bool Write (NSDictionary dictionary, [NullAllowed] NSString language, NSUrl url, [NullAllowed] out NSError error); + + [Static] + [Wrap ("Write (dictionary.GetDictionary (), language.HasValue ? language.Value.GetConstant () : null, url, out error)")] + bool Write (NLStrongDictionary dictionary, NLLanguage? language, NSUrl url, [NullAllowed] out NSError error); + } } diff --git a/tests/monotouch-test/NaturalLanguage/EmbeddingTest.cs b/tests/monotouch-test/NaturalLanguage/EmbeddingTest.cs new file mode 100644 index 0000000000..b24eb902da --- /dev/null +++ b/tests/monotouch-test/NaturalLanguage/EmbeddingTest.cs @@ -0,0 +1,58 @@ +// +// Unit tests for NLEmbedding +// +// Copyright 2019 Microsoft Corp. All rights reserved. +// + +using System; +using System.IO; +using Foundation; +using NaturalLanguage; +using NUnit.Framework; + +namespace MonoTouchFixtures.NaturalLanguage { + + [TestFixture] + [Preserve (AllMembers = true)] + public class EmbeddingTest { + +#if __IOS__ || __MACOS__ + [Test] + public void Vector () + { + TestRuntime.AssertXcodeVersion (11, 0); + + using (var e = NLEmbedding.GetWordEmbedding (NLLanguage.English)) { + Assert.NotNull (e, "GetWordEmbedding"); + Assert.Null (e.GetVector ("Xamarin"), "GetVector"); + Assert.False (e.TryGetVector ("Xamarin", out var vector), "TryGetVector"); + Assert.Null (vector, "vector"); + } + } +#endif + + [Test] + public void Write () + { + TestRuntime.AssertXcodeVersion (11, 0); + + var temp = Path.Combine (Path.GetTempPath (), "NLEmbedding.Test"); + File.Delete (temp); + + var vd = new NLVectorDictionary (); + vd ["a"] = new [] { 0.7f, 1.0f }; + var wd = vd.Dictionary; + Assert.That (wd.Count, Is.EqualTo (1), "Count"); + + using (var url = NSUrl.FromFilename (temp)) { + var strong = NLEmbedding.Write (vd, NLLanguage.French, 1, url, out var error); + Assert.True (strong, "strong"); + Assert.Null (error, "strong error"); + + var weak = NLEmbedding.Write (wd, NLLanguage.French.GetConstant (), 1, url, out error); + Assert.True (strong, "strong"); + Assert.Null (error, "weak error"); + } + } + } +} diff --git a/tests/monotouch-test/NaturalLanguage/GazetteerTest.cs b/tests/monotouch-test/NaturalLanguage/GazetteerTest.cs new file mode 100644 index 0000000000..887efbe98c --- /dev/null +++ b/tests/monotouch-test/NaturalLanguage/GazetteerTest.cs @@ -0,0 +1,39 @@ +// +// Unit tests for NLGazetteer +// +// Copyright 2019 Microsoft Corp. All rights reserved. +// + +using System; +using Foundation; +using NaturalLanguage; +using NUnit.Framework; + +namespace MonoTouchFixtures.NaturalLanguage { + + [TestFixture] + [Preserve (AllMembers = true)] + public class GazetteerTest { + + [Test] + public void Dictionary () + { + TestRuntime.AssertXcodeVersion (11, 0); + + var sd = new NLStrongDictionary (); + sd ["a"] = new [] { "Allo" }; + sd [new NSString ("b")] = new [] { "Bonjour" }; + + var wd = sd.Dictionary; + Assert.That (wd.Count, Is.EqualTo (2), "Count"); + + using (var weak = new NLGazetteer (wd, NLLanguage.French.GetConstant (), out var error)) { + Assert.Null (error, "weak error"); + } + + using (var strong = new NLGazetteer (sd, NLLanguage.French, out var error)) { + Assert.Null (error, "strong error"); + } + } + } +} diff --git a/tests/xtro-sharpie/iOS-NaturalLanguage.todo b/tests/xtro-sharpie/iOS-NaturalLanguage.todo deleted file mode 100644 index 17e61fee90..0000000000 --- a/tests/xtro-sharpie/iOS-NaturalLanguage.todo +++ /dev/null @@ -1,38 +0,0 @@ -!missing-enum! NLDistanceType not bound -!missing-enum! NLTaggerAssetsResult not bound -!missing-field! NLTagSchemeSentimentScore not bound -!missing-selector! +NLEmbedding::currentRevisionForLanguage: not bound -!missing-selector! +NLEmbedding::embeddingWithContentsOfURL:error: not bound -!missing-selector! +NLEmbedding::supportedRevisionsForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage:revision: not bound -!missing-selector! +NLEmbedding::writeEmbeddingForDictionary:language:revision:toURL:error: not bound -!missing-selector! +NLGazetteer::gazetteerWithContentsOfURL:error: not bound -!missing-selector! +NLGazetteer::writeGazetteerForDictionary:language:toURL:error: not bound -!missing-selector! +NLTagger::requestAssetsForLanguage:tagScheme:completionHandler: not bound -!missing-selector! NLEmbedding::containsString: not bound -!missing-selector! NLEmbedding::dimension not bound -!missing-selector! NLEmbedding::distanceBetweenString:andString:distanceType: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::getVector:forString: not bound -!missing-selector! NLEmbedding::language not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::revision not bound -!missing-selector! NLEmbedding::vectorForString: not bound -!missing-selector! NLEmbedding::vocabularySize not bound -!missing-selector! NLGazetteer::data not bound -!missing-selector! NLGazetteer::initWithContentsOfURL:error: not bound -!missing-selector! NLGazetteer::initWithData:error: not bound -!missing-selector! NLGazetteer::initWithDictionary:language:error: not bound -!missing-selector! NLGazetteer::labelForString: not bound -!missing-selector! NLGazetteer::language not bound -!missing-selector! NLTagger::gazetteersForTagScheme: not bound -!missing-selector! NLTagger::setGazetteers:forTagScheme: not bound -!missing-type! NLEmbedding not bound -!missing-type! NLGazetteer not bound diff --git a/tests/xtro-sharpie/macOS-NaturalLanguage.todo b/tests/xtro-sharpie/macOS-NaturalLanguage.todo deleted file mode 100644 index 17e61fee90..0000000000 --- a/tests/xtro-sharpie/macOS-NaturalLanguage.todo +++ /dev/null @@ -1,38 +0,0 @@ -!missing-enum! NLDistanceType not bound -!missing-enum! NLTaggerAssetsResult not bound -!missing-field! NLTagSchemeSentimentScore not bound -!missing-selector! +NLEmbedding::currentRevisionForLanguage: not bound -!missing-selector! +NLEmbedding::embeddingWithContentsOfURL:error: not bound -!missing-selector! +NLEmbedding::supportedRevisionsForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage:revision: not bound -!missing-selector! +NLEmbedding::writeEmbeddingForDictionary:language:revision:toURL:error: not bound -!missing-selector! +NLGazetteer::gazetteerWithContentsOfURL:error: not bound -!missing-selector! +NLGazetteer::writeGazetteerForDictionary:language:toURL:error: not bound -!missing-selector! +NLTagger::requestAssetsForLanguage:tagScheme:completionHandler: not bound -!missing-selector! NLEmbedding::containsString: not bound -!missing-selector! NLEmbedding::dimension not bound -!missing-selector! NLEmbedding::distanceBetweenString:andString:distanceType: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::getVector:forString: not bound -!missing-selector! NLEmbedding::language not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::revision not bound -!missing-selector! NLEmbedding::vectorForString: not bound -!missing-selector! NLEmbedding::vocabularySize not bound -!missing-selector! NLGazetteer::data not bound -!missing-selector! NLGazetteer::initWithContentsOfURL:error: not bound -!missing-selector! NLGazetteer::initWithData:error: not bound -!missing-selector! NLGazetteer::initWithDictionary:language:error: not bound -!missing-selector! NLGazetteer::labelForString: not bound -!missing-selector! NLGazetteer::language not bound -!missing-selector! NLTagger::gazetteersForTagScheme: not bound -!missing-selector! NLTagger::setGazetteers:forTagScheme: not bound -!missing-type! NLEmbedding not bound -!missing-type! NLGazetteer not bound diff --git a/tests/xtro-sharpie/tvOS-NaturalLanguage.todo b/tests/xtro-sharpie/tvOS-NaturalLanguage.todo deleted file mode 100644 index 17e61fee90..0000000000 --- a/tests/xtro-sharpie/tvOS-NaturalLanguage.todo +++ /dev/null @@ -1,38 +0,0 @@ -!missing-enum! NLDistanceType not bound -!missing-enum! NLTaggerAssetsResult not bound -!missing-field! NLTagSchemeSentimentScore not bound -!missing-selector! +NLEmbedding::currentRevisionForLanguage: not bound -!missing-selector! +NLEmbedding::embeddingWithContentsOfURL:error: not bound -!missing-selector! +NLEmbedding::supportedRevisionsForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage:revision: not bound -!missing-selector! +NLEmbedding::writeEmbeddingForDictionary:language:revision:toURL:error: not bound -!missing-selector! +NLGazetteer::gazetteerWithContentsOfURL:error: not bound -!missing-selector! +NLGazetteer::writeGazetteerForDictionary:language:toURL:error: not bound -!missing-selector! +NLTagger::requestAssetsForLanguage:tagScheme:completionHandler: not bound -!missing-selector! NLEmbedding::containsString: not bound -!missing-selector! NLEmbedding::dimension not bound -!missing-selector! NLEmbedding::distanceBetweenString:andString:distanceType: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::getVector:forString: not bound -!missing-selector! NLEmbedding::language not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::revision not bound -!missing-selector! NLEmbedding::vectorForString: not bound -!missing-selector! NLEmbedding::vocabularySize not bound -!missing-selector! NLGazetteer::data not bound -!missing-selector! NLGazetteer::initWithContentsOfURL:error: not bound -!missing-selector! NLGazetteer::initWithData:error: not bound -!missing-selector! NLGazetteer::initWithDictionary:language:error: not bound -!missing-selector! NLGazetteer::labelForString: not bound -!missing-selector! NLGazetteer::language not bound -!missing-selector! NLTagger::gazetteersForTagScheme: not bound -!missing-selector! NLTagger::setGazetteers:forTagScheme: not bound -!missing-type! NLEmbedding not bound -!missing-type! NLGazetteer not bound diff --git a/tests/xtro-sharpie/watchOS-NaturalLanguage.todo b/tests/xtro-sharpie/watchOS-NaturalLanguage.todo deleted file mode 100644 index 17e61fee90..0000000000 --- a/tests/xtro-sharpie/watchOS-NaturalLanguage.todo +++ /dev/null @@ -1,38 +0,0 @@ -!missing-enum! NLDistanceType not bound -!missing-enum! NLTaggerAssetsResult not bound -!missing-field! NLTagSchemeSentimentScore not bound -!missing-selector! +NLEmbedding::currentRevisionForLanguage: not bound -!missing-selector! +NLEmbedding::embeddingWithContentsOfURL:error: not bound -!missing-selector! +NLEmbedding::supportedRevisionsForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage: not bound -!missing-selector! +NLEmbedding::wordEmbeddingForLanguage:revision: not bound -!missing-selector! +NLEmbedding::writeEmbeddingForDictionary:language:revision:toURL:error: not bound -!missing-selector! +NLGazetteer::gazetteerWithContentsOfURL:error: not bound -!missing-selector! +NLGazetteer::writeGazetteerForDictionary:language:toURL:error: not bound -!missing-selector! +NLTagger::requestAssetsForLanguage:tagScheme:completionHandler: not bound -!missing-selector! NLEmbedding::containsString: not bound -!missing-selector! NLEmbedding::dimension not bound -!missing-selector! NLEmbedding::distanceBetweenString:andString:distanceType: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForString:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::enumerateNeighborsForVector:maximumCount:maximumDistance:distanceType:usingBlock: not bound -!missing-selector! NLEmbedding::getVector:forString: not bound -!missing-selector! NLEmbedding::language not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForString:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:distanceType: not bound -!missing-selector! NLEmbedding::neighborsForVector:maximumCount:maximumDistance:distanceType: not bound -!missing-selector! NLEmbedding::revision not bound -!missing-selector! NLEmbedding::vectorForString: not bound -!missing-selector! NLEmbedding::vocabularySize not bound -!missing-selector! NLGazetteer::data not bound -!missing-selector! NLGazetteer::initWithContentsOfURL:error: not bound -!missing-selector! NLGazetteer::initWithData:error: not bound -!missing-selector! NLGazetteer::initWithDictionary:language:error: not bound -!missing-selector! NLGazetteer::labelForString: not bound -!missing-selector! NLGazetteer::language not bound -!missing-selector! NLTagger::gazetteersForTagScheme: not bound -!missing-selector! NLTagger::setGazetteers:forTagScheme: not bound -!missing-type! NLEmbedding not bound -!missing-type! NLGazetteer not bound