KnowledgeBase.KB.internal_AskPossibleProperties C# (CSharp) Method

internal_AskPossibleProperties() private method

private internal_AskPossibleProperties ( Name property, List ToMList, IEnumerable constraints ) : IEnumerable
property Name
ToMList List
constraints IEnumerable
return IEnumerable
        private IEnumerable<BeliefPair> internal_AskPossibleProperties(Name property, List<Name> ToMList, IEnumerable<SubstitutionSet> constraints)
        {
            property = RemovePropertyPerspective(property, ToMList);

            //ToM property shift
            property = ExtractPropertyFromToM(property, ToMList, nameof(property));

            var mind_key = ToMList2Key(ToMList);
            if (!property.IsVariable)
            {
                bool dynamicFound = false;
                foreach (var r in AskDynamicProperties(property, mind_key, constraints))
                {
                    dynamicFound = true;
                    yield return r;
                }
                if (dynamicFound)
                    yield break;
            }

            var group = constraints.GroupBy(property.MakeGround);

            foreach (var g in group)
            {
                if (g.Key.IsPrimitive)
                {
                    yield return Tuples.Create(g.Key, (IEnumerable<SubstitutionSet>)g);
                    continue;
                }

                Name fact;
                try
                {
                    fact = property.ApplyToTerms(p => SimplifyProperty(p, ToMList));
                }
                catch (Exception)
                {
                    continue;
                }

                var g2 = g.SelectMany(c => m_knowledgeStorage.Unify(fact, c)).GroupBy(r => r.Item1, r => r.Item2);
                foreach (var r in g2)
                {
                    var value = r.Key.GetValueFor(mind_key);
                    if (value == null)
                        continue;
                    yield return Tuples.Create(value, r.Distinct());
                }
            }
        }