diff --git a/.gitignore b/.gitignore index 84894931..60d7adcf 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,12 @@ Thumbs.db *.dotCover .vs -*.GhostDoc.xml \ No newline at end of file +*.GhostDoc.xml + +# tensorflow native binaries +runtimes/ +1.12.0/ + +# xunit console tools +xunit.runner.console-2.1.0 +tools/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 2de46b4c..44f36572 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,19 @@ language: csharp solution: TensorFlowSharp.sln script: - - tsh_version=1.4.0-pre1 + - tsh_version=1.12.0 - wget "https://www.nuget.org/api/v2/package/TensorFlowSharp/$tsh_version" - - tar xzvf $tsh_version native - - msbuild /t:Restore $TRAVIS_BUILD_DIR/TensorFlowSharp.sln + - tar xzvf $tsh_version runtimes + - dotnet restore $TRAVIS_BUILD_DIR/TensorFlowSharp.sln - cd $TRAVIS_BUILD_DIR/ - msbuild /p:Configuration=Release TensorFlowSharp.sln - - cp -R $TRAVIS_BUILD_DIR/native/*.dylib $TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/bin/Release/ - - cp -R $TRAVIS_BUILD_DIR/native/*.dylib $TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests.CSharp/bin/Release/ - - cd $TRAVIS_BUILD_DIR/packages/xunit.runner.console.2.2.0/tools - - cp "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/obj/Release/FSharp.Core.dll" . - - mono --arch=64 xunit.console.exe "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/bin/Release/TensorFlowSharp.Tests.dll" "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests.CSharp/bin/Release/TensorFlowSharp.Tests.CSharp.dll" + - cp $TRAVIS_BUILD_DIR/runtimes/osx/native/*.dylib $TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/bin/Release/net471/ + - cp -R $TRAVIS_BUILD_DIR/runtimes/osx/native/*.dylib $TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests.CSharp/bin/Release/net471/ + - wget "https://www.nuget.org/api/v2/package/xunit.runner.console/2.1.0" -O xunit.runner.console-2.1.0 + - tar xzvf xunit.runner.console-2.1.0 tools + - cd $TRAVIS_BUILD_DIR/tools + - cp "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/bin/Release/net471/FSharp.Core.dll" . + - mono --arch=64 xunit.console.exe "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests/bin/Release/net471/TensorFlowSharp.Tests.dll" "$TRAVIS_BUILD_DIR/tests/TensorFlowSharp.Tests.CSharp/bin/Release/net471/TensorFlowSharp.Tests.CSharp.dll" mono: "5.10.0" dotnet: "2.1.4" os: "osx" diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 00000000..245363c8 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,43 @@ +# How to Build and Test + +Unfortunately, the process is currently more manual than would be ideal. If you want to build TensorFlowSharp +from source, you first need to get the TensorFlow native binaries. CONTRIBUTING.md contains info about how to +build those from source as well or download pre-built binaries from Google. Alternatively, you can extract the +pre-built binaries from the official TensorFlowSharp nuget package. This is the easiest approach. + +To do that, browse to nuget.org, find the latest TensorFlowSharp package and download the `.nupkg` file. Unzip +it (nupkg files are just zip files with a different extension) and copy the `runtimes` directory and all of its +subdirectories to `runtimes` at the root of this repo. + +## Building + +Once the native libraries have been copied to the `runtimes` directory, you should be able to build the project with +`dotnet build`. This will build for .net4.5, .net4.6 and newer and netstandard2.0. If you specify, `-c Release` as an +option on the build commandline, it will also produce a copy of the nupkg file with all three binary types packed inside +(as well as the native libraries for windows, osx and linux). + +## Testing + +In order to test on net45 or net471, you will need to download `xunit.console.exe`. Once again, you can browse to +nuget.org and find the `2.1.0` version of the package `xunit.runners.console`. You must use this old version of xunit +beacuse newer versions do not support net45. Download the nupkg file, unzip it, and copy the `tools` directory to +`tools` at the root of this repo. + +### Testing for Net45 + +From the root of the repo run `tools\xunit.console.exe tests\TensorFlowSharp.Tests\bin\debug\net45\TensorFlowSharp.Tests.dll tests\TensorFlowSharp.Tests.CSharp\bin\debug\net45\TensorFlowSharp.Tests.CSharp.dll` + +On windows 6 tests fail. Results may be slightly different on other platforms. + +### Testing for Net471 + +From the root of the repo run `tools\xunit.console.exe tests\TensorFlowSharp.Tests\bin\debug\net471\TensorFlowSharp.Tests.dll tests\TensorFlowSharp.Tests.CSharp\bin\debug\net471\TensorFlowSharp.Tests.CSharp.dll` + +On windows 6 tests fail. Results may be slightly different on other platforms. + +### Testing for NetStandard2.0 + +From the root of the repo run `dotnet test`. + +On Windows 1 test fails in the f# test project, and 6 tests fail in the c# test project. Results may be slightly +different on other platforms. \ No newline at end of file diff --git a/Examples/ExampleCommon/ExampleCommon.csproj b/Examples/ExampleCommon/ExampleCommon.csproj index b46c843e..7ddb351f 100644 --- a/Examples/ExampleCommon/ExampleCommon.csproj +++ b/Examples/ExampleCommon/ExampleCommon.csproj @@ -1,56 +1,11 @@ - - - + + - Debug - AnyCPU - {116BA176-F67C-4066-8685-C080705BAA16} - Library - Properties - ExampleCommon - ExampleCommon - v4.7.1 - 512 - - 0.2 + net45;net471;netstandard2.0 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - + - - {0264c321-34f4-46af-819e-168d1e597232} - TensorFlowSharp - + - + \ No newline at end of file diff --git a/Examples/ExampleCommon/Properties/AssemblyInfo.cs b/Examples/ExampleCommon/Properties/AssemblyInfo.cs deleted file mode 100644 index 9c5d198f..00000000 --- a/Examples/ExampleCommon/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ExampleCommon")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ExampleCommon")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("116ba176-f67c-4066-8685-c080705baa16")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Examples/ExampleInceptionInference/ExampleInceptionInference.csproj b/Examples/ExampleInceptionInference/ExampleInceptionInference.csproj index 9ac2c094..c2e4dd5d 100644 --- a/Examples/ExampleInceptionInference/ExampleInceptionInference.csproj +++ b/Examples/ExampleInceptionInference/ExampleInceptionInference.csproj @@ -1,59 +1,17 @@ - - + + - Debug - AnyCPU - {069A6736-7711-4805-8660-A267E713BC54} + net45;net471;netcoreapp2.2 Exe - ExampleInceptionInference - ExampleInceptionInference - v4.7.1 - 0.2 - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - true - x64 - - - true - bin\Release - prompt - 4 - true - x64 - - - - - ..\..\packages\Mono.Options.4.4.0.0\lib\net4-client\Mono.Options.dll - - - - - - - - - + - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - - - {116BA176-F67C-4066-8685-C080705BAA16} - ExampleCommon - + + + - + - + \ No newline at end of file diff --git a/Examples/ExampleInceptionInference/Properties/AssemblyInfo.cs b/Examples/ExampleInceptionInference/Properties/AssemblyInfo.cs deleted file mode 100644 index fc94b5ca..00000000 --- a/Examples/ExampleInceptionInference/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle ("ExampleInceptionInference")] -[assembly: AssemblyDescription ("")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyCompany ("")] -[assembly: AssemblyProduct ("")] -[assembly: AssemblyCopyright ("miguel")] -[assembly: AssemblyTrademark ("")] -[assembly: AssemblyCulture ("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion ("1.0.*")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/Examples/ExampleInceptionInference/packages.config b/Examples/ExampleInceptionInference/packages.config deleted file mode 100644 index 8a52a680..00000000 --- a/Examples/ExampleInceptionInference/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Examples/ExampleObjectDetection/App.config b/Examples/ExampleObjectDetection/App.config index f49e36dd..1c2a5edc 100644 --- a/Examples/ExampleObjectDetection/App.config +++ b/Examples/ExampleObjectDetection/App.config @@ -4,7 +4,4 @@ - - - diff --git a/Examples/ExampleObjectDetection/ExampleObjectDetection.csproj b/Examples/ExampleObjectDetection/ExampleObjectDetection.csproj index fe9c98e4..2822b414 100644 --- a/Examples/ExampleObjectDetection/ExampleObjectDetection.csproj +++ b/Examples/ExampleObjectDetection/ExampleObjectDetection.csproj @@ -1,84 +1,29 @@ - - - + + - Debug - AnyCPU - {69471B59-576D-446B-8DF3-96EC783C0B6C} + net45;net471 Exe - ExampleObjectDetection - ExampleObjectDetection - v4.7.1 - 512 - true - - 0.2 - - - x64 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + - - ..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Mono.Options.5.3.0.1\lib\net4-client\Mono.Options.dll - - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net471\System.ValueTuple.dll - - - - - - - - - - - - + - + + PreserveNewest + + - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - - - {116BA176-F67C-4066-8685-C080705BAA16} - ExampleCommon - + + + - - PreserveNewest - + + - + \ No newline at end of file diff --git a/Examples/ExampleObjectDetection/Properties/AssemblyInfo.cs b/Examples/ExampleObjectDetection/Properties/AssemblyInfo.cs deleted file mode 100644 index 7160c928..00000000 --- a/Examples/ExampleObjectDetection/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ExampleObjectDetection")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ExampleObjectDetection")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("69471b59-576d-446b-8df3-96ec783c0b6c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Examples/ExampleObjectDetection/packages.config b/Examples/ExampleObjectDetection/packages.config deleted file mode 100644 index d5846997..00000000 --- a/Examples/ExampleObjectDetection/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Examples/FExampleInceptionInference/AssemblyInfo.fs b/Examples/FExampleInceptionInference/AssemblyInfo.fs deleted file mode 100644 index 03d37883..00000000 --- a/Examples/FExampleInceptionInference/AssemblyInfo.fs +++ /dev/null @@ -1,20 +0,0 @@ -namespace FExampleInceptionInference -open System.Reflection -open System.Runtime.CompilerServices - -[] -[] -[] -[] -[] -[] -[] - -// The assembly version has the format {Major}.{Minor}.{Build}.{Revision} - -[] - -//[] -//[] - -() diff --git a/Examples/FExampleInceptionInference/FSharpExampleInceptionInference.fsproj b/Examples/FExampleInceptionInference/FSharpExampleInceptionInference.fsproj index 2355a4f6..3f1b4850 100644 --- a/Examples/FExampleInceptionInference/FSharpExampleInceptionInference.fsproj +++ b/Examples/FExampleInceptionInference/FSharpExampleInceptionInference.fsproj @@ -1,70 +1,20 @@ - - + + - Debug - AnyCPU - {03FB7F3A-6D24-4033-9B04-69AD8A198CCF} + net45;net471;netcoreapp2.2 Exe - FExampleInceptionInference - FExampleInceptionInference - v4.7.1 - 0.2 - - - true - full - false - bin\Debug - DEBUG - prompt - true - x64 - - - true - bin\Release - - prompt - true - true - x64 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets + - - - - - - - + + - - + + - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - + - - - - - - - - - - - - - + diff --git a/Examples/ImageCompression/ImageCompression.fs b/Examples/ImageCompression/ImageCompression.fs index ced86048..0202187b 100644 --- a/Examples/ImageCompression/ImageCompression.fs +++ b/Examples/ImageCompression/ImageCompression.fs @@ -3,6 +3,9 @@ // // From models/compression/encoder.py // + +module ImageCompression + open System open System.IO open TensorFlow diff --git a/Examples/ImageCompression/ImageCompression.fsproj b/Examples/ImageCompression/ImageCompression.fsproj index f463453d..205d75e9 100644 --- a/Examples/ImageCompression/ImageCompression.fsproj +++ b/Examples/ImageCompression/ImageCompression.fsproj @@ -1,58 +1,17 @@ - - + + - Debug - AnyCPU - {5A493E1F-407D-4A3B-AF9B-A0F2930C1C18} + net45;net471;netcoreapp2.2 Exe - ImageCompression - ImageCompression - v4.7.1 - 0.2 - - - true - full - false - bin\Debug - DEBUG - prompt - true - x64 - - - true - bin\Release - - prompt - true - true - x64 - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets + - - - - - - - - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - + + + - - - PreserveNewest - + - + diff --git a/Learn/Learn.csproj b/Learn/Learn.csproj index febbe952..b4f5f01b 100644 --- a/Learn/Learn.csproj +++ b/Learn/Learn.csproj @@ -1,59 +1,12 @@ - - + + - Debug - AnyCPU - {20567EDE-7C20-4734-B489-C6D303843105} - Library - Learn - Learn - v4.7.1 - 0.2 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - true - - - true - bin\Release - prompt - 4 - false + net45;net471;netstandard2.0 true + - - - - ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll - - - - - - - - - - - - - - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - - - - + - + \ No newline at end of file diff --git a/Learn/Properties/AssemblyInfo.cs b/Learn/Properties/AssemblyInfo.cs deleted file mode 100644 index 026b26be..00000000 --- a/Learn/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle ("Learn")] -[assembly: AssemblyDescription ("")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyCompany ("")] -[assembly: AssemblyProduct ("")] -[assembly: AssemblyCopyright ("miguel")] -[assembly: AssemblyTrademark ("")] -[assembly: AssemblyCulture ("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion ("1.0.*")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/Learn/packages.config b/Learn/packages.config deleted file mode 100644 index 949fd556..00000000 --- a/Learn/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/OpGenerator/OpGenerator.cs b/OpGenerator/OpGenerator.cs index 554be77d..0b2c9520 100644 --- a/OpGenerator/OpGenerator.cs +++ b/OpGenerator/OpGenerator.cs @@ -565,7 +565,7 @@ void UpdateApis (string [] dirs) void Run (string [] dirs) { - output = File.CreateText ("../../../TensorFlowSharp/Operations.g.cs"); + output = File.CreateText ("../../../../../TensorFlowSharp/Operations.g.cs"); var operations = Serializer.Deserialize> (GetOpsList ()); UpdateApis (dirs); p ("using System;\n"); diff --git a/OpGenerator/OpGenerator.csproj b/OpGenerator/OpGenerator.csproj index 18b3a006..6befc828 100644 --- a/OpGenerator/OpGenerator.csproj +++ b/OpGenerator/OpGenerator.csproj @@ -1,57 +1,37 @@ - - + + - Debug - AnyCPU - {700E5928-3D5D-4B54-AD4D-BC48E79E389E} + net45;net471;netcoreapp2.2 Exe - OpGenerator - OpGenerator - v4.7.1 - 0.2 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - true - true - x64 - - - true - bin\Release - prompt - 4 - true true - x64 + x64 + - - - - ..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll - - - ..\packages\protobuf-net.2.3.2\lib\net40\protobuf-net.dll - - - - - - - + + - + + + + + + - + + + - \ No newline at end of file diff --git a/OpGenerator/Properties/AssemblyInfo.cs b/OpGenerator/Properties/AssemblyInfo.cs deleted file mode 100644 index cc9133e9..00000000 --- a/OpGenerator/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle ("OpGenerator")] -[assembly: AssemblyDescription ("")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyCompany ("")] -[assembly: AssemblyProduct ("")] -[assembly: AssemblyCopyright ("miguel")] -[assembly: AssemblyTrademark ("")] -[assembly: AssemblyCulture ("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion ("1.0.*")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/OpGenerator/packages.config b/OpGenerator/packages.config deleted file mode 100644 index 2b99280a..00000000 --- a/OpGenerator/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/SampleTest/Properties/AssemblyInfo.cs b/SampleTest/Properties/AssemblyInfo.cs deleted file mode 100644 index c69ae029..00000000 --- a/SampleTest/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle ("SampleTest")] -[assembly: AssemblyDescription ("")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyCompany ("")] -[assembly: AssemblyProduct ("")] -[assembly: AssemblyCopyright ("miguel")] -[assembly: AssemblyTrademark ("")] -[assembly: AssemblyCulture ("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion ("1.0.*")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/SampleTest/SampleTest.csproj b/SampleTest/SampleTest.csproj index 123c35a1..cdc8d195 100644 --- a/SampleTest/SampleTest.csproj +++ b/SampleTest/SampleTest.csproj @@ -1,66 +1,18 @@ - - + + - Debug - AnyCPU - {243E2C90-F465-4A6E-9063-8F2C138015C7} + net45;net471;netcoreapp2.2 Exe - SampleTest - SampleTest - v4.7.1 - 0.2 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - true - x64 - true - - - true - bin\Release - prompt - 4 - true - x64 true + - - - - ..\packages\CsvHelper.2.16.3.0\lib\net45\CsvHelper.dll - - - - - - ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll - - - - - - - - - - {0264C321-34F4-46AF-819E-168D1E597232} - TensorFlowSharp - - - {20567EDE-7C20-4734-B489-C6D303843105} - Learn - + + + - + - + \ No newline at end of file diff --git a/SampleTest/packages.config b/SampleTest/packages.config deleted file mode 100644 index 591a598f..00000000 --- a/SampleTest/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/TensorFlowSharp/Buffer.cs b/TensorFlowSharp/Buffer.cs index 9a799748..8990240c 100644 --- a/TensorFlowSharp/Buffer.cs +++ b/TensorFlowSharp/Buffer.cs @@ -133,7 +133,11 @@ internal static void FreeBlock (IntPtr data, IntPtr length) static TFBuffer () { FreeBlockDelegate = FreeBlock; +#if NET45 + FreeBufferFunc = Marshal.GetFunctionPointerForDelegate (FreeBlockDelegate); +#else FreeBufferFunc = Marshal.GetFunctionPointerForDelegate (FreeBlockDelegate); +#endif } diff --git a/TensorFlowSharp/BufferInternal.cs b/TensorFlowSharp/BufferInternal.cs new file mode 100644 index 00000000..aaccd75f --- /dev/null +++ b/TensorFlowSharp/BufferInternal.cs @@ -0,0 +1,209 @@ +// This file is copied from: +// github.com/dotnet/corefx repo - commit id: 0bb106232745aedfc0d0c5a84ff2b244bf190317 +// file: corefx/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/BufferInternal.cs +// +// It's needed to enable running on Net 4.5 where System.Buffer.Memmove is unavailable. +// The only changes from the original are this comment header and wrapping everything else with #if NET45/#endif. + +#if NET45 +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace System { + + // These sources are taken from corclr repo (src\mscorlib\src\System\Buffer.cs with x64 path removed) + // The reason for this duplication is that System.Runtime.dll 4.0.10 did not expose Buffer.MemoryCopy, + // but we need to make this component work with System.Runtime.dll 4.0.10 + // The methods AreOverlapping and SlowCopyBackwards are not from Buffer.cs. Buffer.cs does an internal CLR call for these. + static class BufferInternal + { + // This method has different signature for x64 and other platforms and is done for performance reasons. + private static unsafe void Memmove(byte* dest, byte* src, uint len) + { + if (AreOverlapping(dest, src, len)) + { + SlowCopyBackwards(dest, src, len); + return; + } + + // This is portable version of memcpy. It mirrors what the hand optimized assembly versions of memcpy typically do. + switch (len) + { + case 0: + return; + case 1: + *dest = *src; + return; + case 2: + *(short*)dest = *(short*)src; + return; + case 3: + *(short*)dest = *(short*)src; + *(dest + 2) = *(src + 2); + return; + case 4: + *(int*)dest = *(int*)src; + return; + case 5: + *(int*)dest = *(int*)src; + *(dest + 4) = *(src + 4); + return; + case 6: + *(int*)dest = *(int*)src; + *(short*)(dest + 4) = *(short*)(src + 4); + return; + case 7: + *(int*)dest = *(int*)src; + *(short*)(dest + 4) = *(short*)(src + 4); + *(dest + 6) = *(src + 6); + return; + case 8: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + return; + case 9: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(dest + 8) = *(src + 8); + return; + case 10: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(short*)(dest + 8) = *(short*)(src + 8); + return; + case 11: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(short*)(dest + 8) = *(short*)(src + 8); + *(dest + 10) = *(src + 10); + return; + case 12: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + return; + case 13: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + *(dest + 12) = *(src + 12); + return; + case 14: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + *(short*)(dest + 12) = *(short*)(src + 12); + return; + case 15: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + *(short*)(dest + 12) = *(short*)(src + 12); + *(dest + 14) = *(src + 14); + return; + case 16: + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + *(int*)(dest + 12) = *(int*)(src + 12); + return; + default: + break; + } + + if ((unchecked((int)dest) & 3) != 0) + { + if (((int)dest & 1) != 0) + { + *dest = *src; + src++; + dest++; + len--; + if (((int)dest & 2) == 0) + goto Aligned; + } + *(short*)dest = *(short*)src; + src += 2; + dest += 2; + len -= 2; + Aligned:; + } + + uint count = len / 16; + while (count > 0) + { + ((int*)dest)[0] = ((int*)src)[0]; + ((int*)dest)[1] = ((int*)src)[1]; + ((int*)dest)[2] = ((int*)src)[2]; + ((int*)dest)[3] = ((int*)src)[3]; + dest += 16; + src += 16; + count--; + } + + if ((len & 8) != 0) + { + ((int*)dest)[0] = ((int*)src)[0]; + ((int*)dest)[1] = ((int*)src)[1]; + dest += 8; + src += 8; + } + if ((len & 4) != 0) + { + ((int*)dest)[0] = ((int*)src)[0]; + dest += 4; + src += 4; + } + if ((len & 2) != 0) + { + ((short*)dest)[0] = ((short*)src)[0]; + dest += 2; + src += 2; + } + if ((len & 1) != 0) + *dest = *src; + + return; + } + + private static unsafe void SlowCopyBackwards(byte* dest, byte* src, uint len) + { + Debug.Assert(len <= int.MaxValue); + if (len == 0) return; + + for(int i=((int)len)-1; i>=0; i--) + { + dest[i] = src[i]; + } + } + + private static unsafe bool AreOverlapping(byte* dest, byte* src, uint len) + { + byte* srcEnd = src + len; + byte* destEnd = dest + len; + if (srcEnd >= dest && srcEnd <= destEnd) + { + return true; + } + return false; + } + + // The attributes on this method are chosen for best JIT performance. + // Please do not edit unless intentional. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe void MemoryCopy(void* source, void* destination, int destinationSizeInBytes, int sourceBytesToCopy) + { + if (sourceBytesToCopy > destinationSizeInBytes) + { + throw new ArgumentOutOfRangeException(nameof(sourceBytesToCopy)); + } + + Memmove((byte*)destination, (byte*)source, checked((uint)sourceBytesToCopy)); + } + } +} +#endif \ No newline at end of file diff --git a/TensorFlowSharp/Queue.cs b/TensorFlowSharp/Queue.cs index 19efbbdc..c4f063b9 100644 --- a/TensorFlowSharp/Queue.cs +++ b/TensorFlowSharp/Queue.cs @@ -189,7 +189,7 @@ public override TFOperation Enqueue (TFOutput [] components, long? timeout_ms = public TFTensor [] EnqueueExecute (TFOutput [] components, TFTensor [] inputValues, long? timeout_ms = null, string operationName = null) { TFOperation enqueueOp = Enqueue (components, timeout_ms, operationName); - TFTensor [] tensors = Session.Run (components, inputValues, Array.Empty (), new [] { enqueueOp }); + TFTensor [] tensors = Session.Run (components, inputValues, new TFOutput[0], new [] { enqueueOp }); return tensors; } @@ -244,7 +244,7 @@ public override TFOutput [] Dequeue (long? timeout_ms = null, string operationNa public TFTensor [] DequeueExecute (long? timeout_ms = null, string operationName = null) { TFOutput [] values = Session.Graph.QueueDequeueV2 (_handle, _componentTypes, timeout_ms, operationName); - TFTensor [] tensors = Session.Run (Array.Empty (), Array.Empty (), values); + TFTensor [] tensors = Session.Run (new TFOutput[0], new TFTensor[0], values); return tensors; } @@ -287,7 +287,7 @@ public override TFOutput GetSize (string operationName = null) public int GetSizeExecute (string operationName = null) { TFOutput sizeOutput = GetSize (operationName); - TFTensor [] tensors = Session.Run (Array.Empty (), Array.Empty (), new TFOutput [] { sizeOutput }); + TFTensor [] tensors = Session.Run (new TFOutput[0], new TFTensor[0], new TFOutput [] { sizeOutput }); return (int)tensors.First ().GetValue (); } } diff --git a/TensorFlowSharp/Tensor.cs b/TensorFlowSharp/Tensor.cs index ec7480d0..a8a93937 100644 --- a/TensorFlowSharp/Tensor.cs +++ b/TensorFlowSharp/Tensor.cs @@ -1145,7 +1145,11 @@ internal static unsafe void Set (Array target, TFDataType dt, long [] shape, int unsafe static void Copy (IntPtr src, void* target, int size) { +#if NET45 + BufferInternal.MemoryCopy((void*)src, (void*)target, size, size); +#else Buffer.MemoryCopy ((void*)src, target, size, size); +#endif } static unsafe void FetchFlatArray (Array target, TFDataType dt, IntPtr data) diff --git a/TensorFlowSharp/TensorFlowSharp.csproj b/TensorFlowSharp/TensorFlowSharp.csproj index fff94c84..184f621f 100644 --- a/TensorFlowSharp/TensorFlowSharp.csproj +++ b/TensorFlowSharp/TensorFlowSharp.csproj @@ -1,21 +1,20 @@ - net471;netstandard2.0 + net45;net46;netstandard2.0 TensorFlowSharp TensorFlowSharp true full bin\Debug\TensorFlowSharp.xml true - 0.2 1.12.0 true TensorFlowSharp - 1.10.0-pre1 + 1.12.0 Miguel de Icaza https://github.com/migueldeicaza/TensorFlowSharp/blob/master/LICENSE https://github.com/migueldeicaza/TensorFlowSharp/ @@ -26,14 +25,37 @@ 1.12.0 adds support for the TensorFlow 1.12 release + + true + true + + + + + + + + + + - - - - - + + + + + diff --git a/tests/TensorFlowSharp.Tests.CSharp/ArrayTests.cs b/tests/TensorFlowSharp.Tests.CSharp/ArrayTests.cs index 523e59e0..bab06d8a 100644 --- a/tests/TensorFlowSharp.Tests.CSharp/ArrayTests.cs +++ b/tests/TensorFlowSharp.Tests.CSharp/ArrayTests.cs @@ -155,7 +155,7 @@ public void BasicConstantsUnSymmetrical () } #endif - private static IEnumerable stackData() + public static IEnumerable stackData() { // Example from https://www.tensorflow.org/api_docs/python/tf/stack @@ -198,7 +198,7 @@ public void Should_Stack(double[] x, double[] y, double[] z, int? axis, double[, } } - private static IEnumerable rangeData() + public static IEnumerable rangeData() { double[] x = { 1, 4 }; double[] y = { 2, 5 }; @@ -257,7 +257,7 @@ public void Should_Range(object start, object limit, object delta, object expect } - private static IEnumerable transposeData () + public static IEnumerable transposeData () { yield return new object [] { new double [,] { { 1, 2 }, { 3, 4 } }}; diff --git a/tests/TensorFlowSharp.Tests.CSharp/ClipTests.cs b/tests/TensorFlowSharp.Tests.CSharp/ClipTests.cs index 05a2a6f2..8cf70a0d 100644 --- a/tests/TensorFlowSharp.Tests.CSharp/ClipTests.cs +++ b/tests/TensorFlowSharp.Tests.CSharp/ClipTests.cs @@ -6,7 +6,7 @@ namespace TensorFlowSharp.Tests.CSharp { public class ClipTests { - private static IEnumerable clipByValueData() + public static IEnumerable clipByValueData() { yield return new object[] { @@ -68,7 +68,7 @@ public void Should_ClipByValue(double[,] m, double min, double max, double[,] ex - private static IEnumerable clipByNormData() + public static IEnumerable clipByNormData() { yield return new object[] { @@ -171,7 +171,7 @@ public void Should_ClipByNorm(double[,] m, double norm, int axis, double[,] expe - private static IEnumerable clipByAverageNormData() + public static IEnumerable clipByAverageNormData() { yield return new object[] { diff --git a/tests/TensorFlowSharp.Tests.CSharp/MathTests.cs b/tests/TensorFlowSharp.Tests.CSharp/MathTests.cs index b3686c34..5a4c9c6b 100644 --- a/tests/TensorFlowSharp.Tests.CSharp/MathTests.cs +++ b/tests/TensorFlowSharp.Tests.CSharp/MathTests.cs @@ -29,7 +29,7 @@ public void Should_CalculateTanhGrad_Correctly () } } - private static IEnumerable reduceMeanData () + public static IEnumerable reduceMeanData () { // Example from https://www.tensorflow.org/api_docs/python/tf/reduce_mean // # 'x' is [[1., 1.] @@ -72,7 +72,7 @@ public void Should_ReduceMean (double [,] input, int? axis, object expected) } } - private static IEnumerable sigmoidCrossEntropyData () + public static IEnumerable sigmoidCrossEntropyData () { yield return new object [] { new [] { 1.0, 0.0, 1.0, 1.0 }, new [] { 1.0, 0.0, 1.0, 1.0 }, new [] { 0.31326168751822281, 0.69314718055994529, 0.31326168751822281, 0.31326168751822281 } }; yield return new object [] { new [] { 1.0, 0.0, 1.0, 1.0 }, new [] { -0.2, 4.2, 0.0, 0.0 }, new [] { 0.79813886938159184, 4.2148842546719187, 0.69314718055994529, 0.69314718055994529 } }; @@ -101,7 +101,7 @@ public void Should_SigmoidCrossEntropyWithLogits (double [] labels, double [] lo } } - private static IEnumerable reduceProdData () + public static IEnumerable reduceProdData () { // Example from https://www.tensorflow.org/api_docs/python/tf/reduce_mean but adapted to return prod var x = new double [,] { { 1, 1 }, @@ -138,7 +138,7 @@ public void Should_ReduceProd (double [,] input, int? axis, object expected) } } - private static IEnumerable reduceProdData2 () + public static IEnumerable reduceProdData2 () { yield return new object [] { null, 170170.0 }; yield return new object [] { -3, new [] { 1.0 } }; diff --git a/tests/TensorFlowSharp.Tests.CSharp/Properties/AssemblyInfo.cs b/tests/TensorFlowSharp.Tests.CSharp/Properties/AssemblyInfo.cs deleted file mode 100644 index 88a10e90..00000000 --- a/tests/TensorFlowSharp.Tests.CSharp/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TensorFlowSharp.Tests.CSharp")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TensorFlowSharp.Tests.CSharp")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("6504a704-575c-48d0-a4d2-422a7010936b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tests/TensorFlowSharp.Tests.CSharp/TensorFlowSharp.Tests.CSharp.csproj b/tests/TensorFlowSharp.Tests.CSharp/TensorFlowSharp.Tests.CSharp.csproj index c6ef1f61..ecb8b7b8 100644 --- a/tests/TensorFlowSharp.Tests.CSharp/TensorFlowSharp.Tests.CSharp.csproj +++ b/tests/TensorFlowSharp.Tests.CSharp/TensorFlowSharp.Tests.CSharp.csproj @@ -1,91 +1,10 @@ - - - - + + - Debug - AnyCPU - {6504A704-575C-48D0-A4D2-422A7010936B} - Library - Properties - TensorFlowSharp.Tests.CSharp - TensorFlowSharp.Tests.CSharp - v4.7.1 - 512 - - - - 0.2 + net45;net471;netcoreapp2.2 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - ..\..\packages\Microsoft.DotNet.InternalAbstractions.1.0.500-preview2-1-003177\lib\net451\Microsoft.DotNet.InternalAbstractions.dll - - - - - - ..\..\packages\System.ValueTuple.4.3.1\lib\netstandard1.0\System.ValueTuple.dll - - - - - - - - - ..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.2.0\lib\netstandard1.1\xunit.assert.dll - - - ..\..\packages\xunit.extensibility.core.2.2.0\lib\netstandard1.1\xunit.core.dll - - - ..\..\packages\xunit.extensibility.execution.2.2.0\lib\net452\xunit.execution.desktop.dll - - + - - - - - - - - - - - - - - - - - - PreserveNewest @@ -108,20 +27,7 @@ PreserveNewest - - - - - - {20567ede-7c20-4734-b489-c6d303843105} - Learn - - - {0264c321-34f4-46af-819e-168d1e597232} - TensorFlowSharp - - - + PreserveNewest @@ -145,11 +51,20 @@ PreserveNewest - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/TensorFlowSharp.Tests.CSharp/TensorTests.cs b/tests/TensorFlowSharp.Tests.CSharp/TensorTests.cs index 5dfbd84f..0a017fbd 100644 --- a/tests/TensorFlowSharp.Tests.CSharp/TensorTests.cs +++ b/tests/TensorFlowSharp.Tests.CSharp/TensorTests.cs @@ -8,7 +8,7 @@ namespace TensorFlowSharp.Tests.CSharp { public class TensorTests { - private static IEnumerable jaggedData () + public static IEnumerable jaggedData () { yield return new object [] { new double [][] { new [] { 1.0, 2.0 }, new [] { 3.0, 4.0 } }, diff --git a/tests/TensorFlowSharp.Tests.CSharp/packages.config b/tests/TensorFlowSharp.Tests.CSharp/packages.config deleted file mode 100644 index c403b5ca..00000000 --- a/tests/TensorFlowSharp.Tests.CSharp/packages.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/TensorFlowSharp.Tests/AssemblyInfo.fs b/tests/TensorFlowSharp.Tests/AssemblyInfo.fs deleted file mode 100644 index 30c2623b..00000000 --- a/tests/TensorFlowSharp.Tests/AssemblyInfo.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace TensorFlowSharp.Tests.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[] -[] -[] -[] -[] -[] -[] -[] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [] -[] -[] - -do - () \ No newline at end of file diff --git a/tests/TensorFlowSharp.Tests/TensorFlowSharp.Tests.fsproj b/tests/TensorFlowSharp.Tests/TensorFlowSharp.Tests.fsproj index 47b387fd..9dbfc026 100644 --- a/tests/TensorFlowSharp.Tests/TensorFlowSharp.Tests.fsproj +++ b/tests/TensorFlowSharp.Tests/TensorFlowSharp.Tests.fsproj @@ -1,104 +1,25 @@ - - - + + - Debug - AnyCPU - 2.0 - 9ee13143-569f-4f7a-975a-de7df5c8ff0b - Library - TensorFlowSharp.Tests - TensorFlowSharp.Tests - v4.7.1 - 4.4.0.0 - true - TensorFlowSharp.Tests - - + net45;net471;netcoreapp2.2 0.2 - - true - full - false - false - bin\Debug\ - DEBUG;TRACE - 3 - bin\Debug\TensorFlowSharp.Tests.XML - x64 - - - pdbonly - true - true - bin\Release\ - TRACE - 3 - bin\Release\TensorFlowSharp.Tests.XML - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - + - - + - - - True - - - - - - TensorFlowSharp - {0264c321-34f4-46af-819e-168d1e597232} - True - - - ..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.2.0\lib\netstandard1.1\xunit.assert.dll - True - - - ..\..\packages\xunit.runner.console.2.2.0\tools\xunit.console.exe - - - ..\..\packages\xunit.extensibility.core.2.2.0\lib\netstandard1.1\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.2.0\lib\net452\xunit.execution.desktop.dll - True - - - ..\..\packages\xunit.runner.console.2.2.0\tools\xunit.runner.reporters.net452.dll - + + + + + + + + + + - + \ No newline at end of file diff --git a/tests/TensorFlowSharp.Tests/packages.config b/tests/TensorFlowSharp.Tests/packages.config deleted file mode 100644 index 07f2cf14..00000000 --- a/tests/TensorFlowSharp.Tests/packages.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file