Skip to content

Commit 45c9c25

Browse files
add string normalize method
1 parent 14e351f commit 45c9c25

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

src/TorchSharp/Torch.cs

+28-6
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,27 @@ public static partial class torch
5454
static bool nativeBackendCudaLoaded = false;
5555

5656
public static string __version__ => libtorchPackageVersion;
57+
private static string NormalizeNuGetVersion(string versionString)
58+
{
59+
if (string.IsNullOrWhiteSpace(versionString))
60+
throw new ArgumentException($"Invalid NuGet version: {versionString}");
61+
62+
string[] parts = versionString.Split('-', '+');
63+
string[] versionParts = parts[0].Split('.');
64+
65+
if (versionParts.Length < 2 || versionParts.Length > 4 || !versionParts.All(IsNumeric))
66+
throw new ArgumentException($"Invalid NuGet version: {versionString}");
67+
68+
string normalizedVersion = versionParts[0] + "." + versionParts[1];
69+
if (versionParts.Length > 2) normalizedVersion += "." + versionParts[2];
70+
if (versionParts.Length > 3 && int.Parse(versionParts[3]) != 0) normalizedVersion += "." + versionParts[3];
71+
72+
if (parts.Length > 1)
73+
normalizedVersion += "-" + parts[1];
74+
75+
return normalizedVersion;
76+
}
77+
private static bool IsNumeric(string str) => int.TryParse(str, out _);
5778

5879
internal static bool TryLoadNativeLibraryFromFile(string path, StringBuilder trace) {
5980
bool ok;
@@ -168,16 +189,17 @@ private static void LoadNativeBackend(bool useCudaBackend, out StringBuilder? tr
168189

169190
if (torchsharpLoc!.Contains("torchsharp") && torchsharpLoc.Contains("lib") && Directory.Exists(packagesDir) && Directory.Exists(torchsharpHome)) {
170191

171-
var torchSharpVersion = Path.GetFileName(torchsharpHome); // really GetDirectoryName
172-
192+
var assembly = typeof(torch).Assembly;
193+
var version = assembly.GetName().Version;
194+
var torchSharpVersion = (version != null) ? version.ToString() : Path.GetFileName(torchsharpHome);
173195
if (useCudaBackend) {
174196
var consolidatedDir = Path.Combine(torchsharpLoc, $"cuda-{cudaVersion}");
175197

176198
trace.AppendLine($" Trying dynamic load for .NET/F# Interactive by consolidating native {cudaRootPackage}-* binaries to {consolidatedDir}...");
177199

178-
var cudaOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, $"{cudaRootPackage}-*", libtorchPackageVersion, consolidatedDir, trace);
200+
var cudaOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, $"{cudaRootPackage}-*", NormalizeNuGetVersion(libtorchPackageVersion), consolidatedDir, trace);
179201
if (cudaOk) {
180-
cudaOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, "torchsharp", torchSharpVersion, consolidatedDir, trace);
202+
cudaOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, "torchsharp", NormalizeNuGetVersion(torchSharpVersion), consolidatedDir, trace);
181203
if (cudaOk) {
182204
var consolidated = Path.Combine(consolidatedDir, target);
183205
ok = TryLoadNativeLibraryFromFile(consolidated, trace);
@@ -193,9 +215,9 @@ private static void LoadNativeBackend(bool useCudaBackend, out StringBuilder? tr
193215

194216
trace.AppendLine($" Trying dynamic load for .NET/F# Interactive by consolidating native {cpuRootPackage}-* binaries to {consolidatedDir}...");
195217

196-
var cpuOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, cpuRootPackage, libtorchPackageVersion, consolidatedDir, trace);
218+
var cpuOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, cpuRootPackage, NormalizeNuGetVersion(libtorchPackageVersion), consolidatedDir, trace);
197219
if (cpuOk) {
198-
cpuOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, "torchsharp", torchSharpVersion, consolidatedDir, trace);
220+
cpuOk = CopyNativeComponentsIntoSingleDirectory(packagesDir, "torchsharp", NormalizeNuGetVersion(torchSharpVersion), consolidatedDir, trace);
199221
if (cpuOk) {
200222
var consolidated = Path.Combine(consolidatedDir, target);
201223
ok = TryLoadNativeLibraryFromFile(consolidated, trace);

0 commit comments

Comments
 (0)