using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Linq; using static Tensorflow.Binding; using System.Text.RegularExpressions; namespace Tensorflow { public class Diagnostician { public void Diagnose(string log) { var lines = File.ReadAllLines(log); foreach(var (i, line) in enumerate(lines)) { if(line.StartsWith("New Tensor ")) { var pointers = Regex.Matches(line, "0x[0-9a-f]{16}"); var tensorHandle = pointers[0].Value; var tensorDataHandle = pointers[1].Value; if (lines.Skip(i).Count(x => x.StartsWith("Delete Tensor ") && x.Contains(tensorHandle) && x.Contains(tensorDataHandle)) == 0) Console.WriteLine(line); } else if (line.StartsWith("New EagerTensorHandle ")) { var pointers = Regex.Matches(line, "0x[0-9a-f]{16}"); var tensorHandle = pointers[0].Value; var del = $"Delete EagerTensorHandle {tensorHandle}"; if (lines.Skip(i).Count(x => x == del) == 0) Console.WriteLine(line); } else if (line.StartsWith("Take EagerTensorHandle ")) { var pointers = Regex.Matches(line, "0x[0-9a-f]{16}"); var eagerTensorHandle = pointers[0].Value; var tensorHandle = pointers[1].Value; var delTensor = $"Delete Tensor {tensorHandle}"; var delEagerTensor = $"Delete EagerTensorHandle {eagerTensorHandle}"; if (lines.Skip(i).Count(x => x.StartsWith(delTensor)) == 0 || lines.Skip(i).Count(x => x.StartsWith(delEagerTensor)) == 0) Console.WriteLine(line); } else if (line.StartsWith("Created Resource ")) { var pointers = Regex.Matches(line, "0x[0-9a-f]{16}"); var eagerTensorHandle = pointers[0].Value; var delTensor = $"Deleted Resource {eagerTensorHandle}"; if (lines.Skip(i).Count(x => x.StartsWith(delTensor)) == 0) Console.WriteLine(line); } } } } }