/// <summary> /// Find all possible mappings that would keep this configuration symmetric if all objects /// were remapping according to them. If the configuration is not symmetric, then there will /// not be any result. For more information see <see cref="LooseObjectHolder.GetSymmetricMappings"/>. /// </summary> /// <returns>The numerable of all possible mappings keeping the symmetry.</returns> public IEnumerable <IReadOnlyDictionary <ConfigurationObject, ConfigurationObject> > GetSymmetryMappings() // Take all symmetric mappings => LooseObjectsHolder.GetSymmetricMappings() // Remap the constructed objects as well .Select(mappedLooseObjects => (mappedLooseObjects, mappedConstructedObjects: ConstructedObjects
/// <summary> /// Determines if the configuration is fully symmetric, i.e. <see cref="LooseObjectHolder.GetSymmetricMappings"/> /// produces only mappings that keeps this configuration the same. /// </summary> /// <returns>true, if the configuration is fully symmetric; false otherwise.</returns> public bool IsFullySymmetric() => GetSymmetryMappings().Count() == LooseObjectsHolder.GetSymmetricMappings().Count();