Tested first run

This commit is contained in:
2022-08-29 19:30:36 -07:00
parent 659e0e39bf
commit 753eeaba2a
26 changed files with 711 additions and 458 deletions

View File

@ -7,7 +7,7 @@ namespace View_by_Distance.Map.Models.Stateless;
public class ByDeterministicHashCode
{
private static void SetOther(string outputExtension, Dictionary<string, Person> personKeyValuePairs, string deterministicHashCodePeopleDirectory, List<double> skipCollection, List<(string, int?, string, PersonBirthday[])> peopleCollection)
private static void SetOther(string resizeFilenameExtension, Person[] people, string deterministicHashCodePeopleDirectory, List<double> skipCollection, List<(string, int?, string, PersonBirthday[])> peopleCollection)
{
string json;
string personKey;
@ -18,22 +18,31 @@ public class ByDeterministicHashCode
string[] personKeyDirectories;
string personKeyJsonDirectory;
PersonBirthday? personBirthday;
List<string> personKeys = new();
string[] personDisplayDirectories;
string convertedPersonKeyDirectory;
string? personDisplayDirectoryName;
List<PersonBirthday> personBirthdays;
Dictionary<string, Person> personKeyValuePairs = new();
foreach (Person person in people)
{
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(person.Birthday);
if (personKeyValuePairs.ContainsKey(personKey))
break;
personKeyValuePairs.Add(personKey, person);
}
string[] groupDirectories = Directory.GetDirectories(deterministicHashCodePeopleDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string groupDirectory in groupDirectories)
{
groupDirectoryName = Path.GetFileName(groupDirectory);
if (groupDirectoryName[0] == '!')
{
skipCollection.AddRange(from l in Directory.GetFiles(groupDirectory, $"*{outputExtension}", SearchOption.AllDirectories) select double.Parse(Path.GetFileNameWithoutExtension(l)));
skipCollection.AddRange(from l in Directory.GetFiles(groupDirectory, $"*{resizeFilenameExtension}", SearchOption.AllDirectories) select double.Parse(Path.GetFileNameWithoutExtension(l)));
continue;
}
else if (groupDirectoryName[0] is not '_' and not '~' and not '^')
continue;
skipCollection.AddRange(from l in Directory.GetFiles(groupDirectory, $"*{outputExtension}", SearchOption.AllDirectories) select double.Parse(Path.GetFileNameWithoutExtension(l)));
skipCollection.AddRange(from l in Directory.GetFiles(groupDirectory, $"*{resizeFilenameExtension}", SearchOption.AllDirectories) select double.Parse(Path.GetFileNameWithoutExtension(l)));
personDisplayDirectories = Directory.GetDirectories(groupDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string personDisplayDirectory in personDisplayDirectories)
{
@ -84,10 +93,24 @@ public class ByDeterministicHashCode
json = JsonSerializer.Serialize(personKeyValuePairs[personKey], new JsonSerializerOptions() { WriteIndented = true });
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(personKeyJsonFileName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
}
personKeys.Add(personKey);
peopleCollection.Add(new(personDisplayDirectoryName, approximateYears, personKey, personBirthdays.OrderByDescending(l => l.Value).ToArray()));
}
}
}
approximateYears = null;
const string displayDirectoryName = Property.Models.Stateless.IResult.AllInOne;
DateTime incrementDate = new(Shared.Models.Stateless.IPersonBirthday.FirstYear, 1, 1);
for (int i = 0; i < 500; i++)
{
incrementDate = incrementDate.AddDays(1);
personBirthday = new(incrementDate);
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday);
if (personKeys.Contains(personKey))
continue;
personKeys.Add(personKey);
peopleCollection.Add(new(displayDirectoryName, approximateYears, personKey, new PersonBirthday[] { personBirthday }));
}
}
internal static void SetKeyValuePairs(string deterministicHashCodeContentDirectory, List<(string, double)> deterministicHashCodeCollection, List<(string, double)> incorrectDeterministicHashCodeCollection, Dictionary<int, List<Face>> keyValuePairs)
@ -138,8 +161,6 @@ public class ByDeterministicHashCode
continue;
deterministicHashCodeCollection.Add(new(personKey, reversedDeterministicHashCodeKey.Value));
}
if (personNameDirectory == personFirstInitialDirectory)
continue;
personNameLinkDirectories = Directory.GetDirectories(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string personNameLinkDirectory in personNameLinkDirectories)
{
@ -152,6 +173,8 @@ public class ByDeterministicHashCode
}
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personNameLinkDirectory);
}
if (personNameDirectory == personFirstInitialDirectory)
continue;
Directory.Move(personNameDirectory, personFirstInitialDirectory);
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personNameDirectory);
}
@ -163,56 +186,90 @@ public class ByDeterministicHashCode
}
}
internal static string SetByRef(string outputExtension, Dictionary<string, Person> personKeyValuePairs, List<double> skipCollection, Dictionary<string, (string, int?, string, PersonBirthday[])> peopleKeyValuePairs, Dictionary<int, string[]> deterministicHashCodeUnknownFaceKeyValuePairs, Dictionary<double, string[]> deterministicHashCodeKeyValuePairs, Dictionary<double, string[]> incorrectDeterministicHashCodeKeyValuePairs, string deterministicHashCodeRootDirectory)
internal static string SetByRef(string resizeFilenameExtension, Person[] people, List<double> skipCollection, Dictionary<string, (string, int?, string, PersonBirthday[])> peopleKeyValuePairs, List<string> notMappedPersonKeys, Dictionary<int, string[]> deterministicHashCodeUnknownFaceKeyValuePairs, Dictionary<double, string[]> deterministicHashCodeKeyValuePairs, Dictionary<double, string[]> incorrectDeterministicHashCodeKeyValuePairs, string deterministicHashCodeRootDirectory)
{
string result;
string[] distinctPersonKeys;
Dictionary<int, List<Face>> keyValuePairs = new();
List<string> deterministicHashCodePersonKeys = new();
List<string> deterministicHashCodeUnknownFacePersonKeys = new();
Dictionary<double, List<string>> deterministicHashCodeScope = new();
Dictionary<double, List<string>> incorrectDeterministicHashCodeScope = new();
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> deterministicHashCodeCollection = new();
string deterministicHashCodePeopleDirectory = Path.Combine(deterministicHashCodeRootDirectory, "People");
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> incorrectDeterministicHashCodeCollection = new();
foreach (KeyValuePair<int, string[]> keyValuePair in deterministicHashCodeUnknownFaceKeyValuePairs)
deterministicHashCodeUnknownFacePersonKeys.AddRange(keyValuePair.Value);
deterministicHashCodeUnknownFacePersonKeys = deterministicHashCodeUnknownFacePersonKeys.Distinct().ToList();
List<(string, int?, string, PersonBirthday[])> peopleCollection = new();
string deterministicHashCodePeopleDirectory = Path.Combine(deterministicHashCodeRootDirectory, "People");
if (Directory.Exists(deterministicHashCodePeopleDirectory))
SetOther(outputExtension, personKeyValuePairs, deterministicHashCodePeopleDirectory, skipCollection, peopleCollection);
if (!Directory.Exists(deterministicHashCodePeopleDirectory))
_ = Directory.CreateDirectory(deterministicHashCodePeopleDirectory);
else
SetOther(resizeFilenameExtension, people, deterministicHashCodePeopleDirectory, skipCollection, peopleCollection);
result = Path.Combine(deterministicHashCodeRootDirectory, "()");
if (!Directory.Exists(result))
result = string.Empty;
else
_ = Directory.CreateDirectory(result);
SetKeyValuePairs(result, deterministicHashCodeCollection, incorrectDeterministicHashCodeCollection, keyValuePairs);
deterministicHashCodeCollection = (from l in deterministicHashCodeCollection orderby l.IdAndNormalizedPixelPercentage select l).ToList();
incorrectDeterministicHashCodeCollection = (from l in incorrectDeterministicHashCodeCollection orderby l.IdAndNormalizedPixelPercentage select l).ToList();
foreach ((string personKey, double idAndNormalizedPixelPercentage) in deterministicHashCodeCollection)
{
Dictionary<int, List<Face>> keyValuePairs = new();
Dictionary<double, List<string>> deterministicHashCodeScope = new();
Dictionary<double, List<string>> incorrectDeterministicHashCodeScope = new();
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> deterministicHashCodeCollection = new();
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> incorrectDeterministicHashCodeCollection = new();
SetKeyValuePairs(result, deterministicHashCodeCollection, incorrectDeterministicHashCodeCollection, keyValuePairs);
deterministicHashCodeCollection = (from l in deterministicHashCodeCollection orderby l.IdAndNormalizedPixelPercentage select l).ToList();
incorrectDeterministicHashCodeCollection = (from l in incorrectDeterministicHashCodeCollection orderby l.IdAndNormalizedPixelPercentage select l).ToList();
foreach ((string personKey, double idAndNormalizedPixelPercentage) in deterministicHashCodeCollection)
{
if (!deterministicHashCodeScope.ContainsKey(idAndNormalizedPixelPercentage))
deterministicHashCodeScope.Add(idAndNormalizedPixelPercentage, new());
deterministicHashCodeScope[idAndNormalizedPixelPercentage].Add(personKey);
deterministicHashCodePersonKeys.Add(personKey);
}
deterministicHashCodePersonKeys = deterministicHashCodePersonKeys.Distinct().ToList();
foreach ((string personKey, double idAndNormalizedPixelPercentage) in incorrectDeterministicHashCodeCollection)
{
if (!incorrectDeterministicHashCodeScope.ContainsKey(idAndNormalizedPixelPercentage))
incorrectDeterministicHashCodeScope.Add(idAndNormalizedPixelPercentage, new());
incorrectDeterministicHashCodeScope[idAndNormalizedPixelPercentage].Add(personKey);
}
foreach (KeyValuePair<double, List<string>> keyValuePair in deterministicHashCodeScope)
deterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
foreach (KeyValuePair<double, List<string>> keyValuePair in incorrectDeterministicHashCodeScope)
incorrectDeterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
if (!deterministicHashCodeScope.ContainsKey(idAndNormalizedPixelPercentage))
deterministicHashCodeScope.Add(idAndNormalizedPixelPercentage, new());
deterministicHashCodeScope[idAndNormalizedPixelPercentage].Add(personKey);
deterministicHashCodePersonKeys.Add(personKey);
}
foreach ((string personDisplayDirectoryName, int? approximateYears, string personKey, PersonBirthday[] personBirthdays) in peopleCollection)
deterministicHashCodePersonKeys = deterministicHashCodePersonKeys.Distinct().ToList();
foreach ((string personKey, double idAndNormalizedPixelPercentage) in incorrectDeterministicHashCodeCollection)
{
if (peopleKeyValuePairs.ContainsKey(personKey) && peopleKeyValuePairs[personKey].Item1 != personDisplayDirectoryName)
throw new NotImplementedException();
if (deterministicHashCodeUnknownFacePersonKeys.Contains(personKey) || deterministicHashCodePersonKeys.Contains(personKey))
peopleKeyValuePairs.Add(personKey, new(personDisplayDirectoryName, approximateYears, personKey, personBirthdays));
if (!incorrectDeterministicHashCodeScope.ContainsKey(idAndNormalizedPixelPercentage))
incorrectDeterministicHashCodeScope.Add(idAndNormalizedPixelPercentage, new());
incorrectDeterministicHashCodeScope[idAndNormalizedPixelPercentage].Add(personKey);
}
foreach (KeyValuePair<double, List<string>> keyValuePair in deterministicHashCodeScope)
{
distinctPersonKeys = keyValuePair.Value.Distinct().ToArray();
deterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, distinctPersonKeys);
}
foreach (KeyValuePair<double, List<string>> keyValuePair in incorrectDeterministicHashCodeScope)
incorrectDeterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
if (peopleCollection.Any())
{
foreach ((string displayDirectoryName, int? approximateYears, string personKey, PersonBirthday[] personBirthdays) in peopleCollection)
{
if (peopleKeyValuePairs.ContainsKey(personKey) && peopleKeyValuePairs[personKey].Item1 != displayDirectoryName)
throw new NotImplementedException();
if (deterministicHashCodeUnknownFacePersonKeys.Contains(personKey) || deterministicHashCodePersonKeys.Contains(personKey))
peopleKeyValuePairs.Add(personKey, new(displayDirectoryName, approximateYears, personKey, personBirthdays));
else
notMappedPersonKeys.Add(personKey);
}
}
if (deterministicHashCodeUnknownFacePersonKeys.Any() || deterministicHashCodePersonKeys.Any())
{
int? approximateYears = null;
PersonBirthday? personBirthday;
const string displayDirectoryName = Property.Models.Stateless.IResult.AllInOne;
foreach (string personKey in deterministicHashCodeUnknownFacePersonKeys)
{
if (!peopleKeyValuePairs.ContainsKey(personKey))
{
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
if (personBirthday is null)
continue;
peopleKeyValuePairs.Add(personKey, new(displayDirectoryName, approximateYears, personKey, new PersonBirthday[] { personBirthday }));
}
}
foreach (string personKey in deterministicHashCodePersonKeys)
{
if (!peopleKeyValuePairs.ContainsKey(personKey))
{
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
if (personBirthday is null)
continue;
peopleKeyValuePairs.Add(personKey, new(displayDirectoryName, approximateYears, personKey, new PersonBirthday[] { personBirthday }));
}
}
}
return result;
}