Changeset 17353
- Timestamp:
- 11/19/19 16:33:01 (5 years ago)
- Location:
- branches/3026_IntegrationIntoSymSpace
- Files:
-
- 3 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs
r17330 r17353 6 6 7 7 namespace HeuristicLab.JsonInterface { 8 /// <summary> 9 /// Constants for reading/writing templates. 10 /// </summary> 8 11 internal class Constants { 9 12 -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/BaseConverter.cs
r17284 r17353 5 5 using System.Threading.Tasks; 6 6 using HeuristicLab.Core; 7 using HeuristicLab.Data; 7 8 using Newtonsoft.Json.Linq; 8 9 … … 10 11 public abstract class BaseConverter : IJsonItemConverter 11 12 { 13 public void Inject(IItem item, JsonItem data) { 14 if (data.Reference != null) { 15 JsonItem.Merge(data, data.Reference); 16 } 17 InjectData(item, data); 18 } 19 12 20 public JsonItem Extract(IItem value) { 13 21 JsonItem data = ExtractData(value); … … 15 23 return data; 16 24 } 17 18 public void Inject(IItem item, JsonItem data) { 19 if(data.Reference != null) { 20 JsonItem.Merge(data, data.Reference); 21 } 22 InjectData(item, data); 23 } 24 25 25 26 public abstract void InjectData(IItem item, JsonItem data); 26 27 public abstract JsonItem ExtractData(IItem value); … … 38 39 (IItem)Activator.CreateInstance(type,args); 39 40 40 protected IItem Instantiate<T>(params object[] args) => Instantiate(typeof(T), args); 41 protected T Instantiate<T>(params object[] args) => (T)Instantiate(typeof(T), args); 42 43 protected object GetMaxValue(Type t) { 44 TypeCode typeCode = Type.GetTypeCode(t); 45 46 if (typeof(ValueType).IsEqualTo(typeof(PercentValue))) 47 return 1.0d; 48 49 switch (typeCode) { 50 case TypeCode.Int16: return Int16.MaxValue; 51 case TypeCode.Int32: return Int32.MaxValue; 52 case TypeCode.Int64: return Int64.MaxValue; 53 case TypeCode.UInt16: return UInt16.MaxValue; 54 case TypeCode.UInt32: return UInt32.MaxValue; 55 case TypeCode.UInt64: return UInt64.MaxValue; 56 case TypeCode.Single: return Single.MaxValue; 57 case TypeCode.Double: return Double.MaxValue; 58 case TypeCode.Decimal: return Decimal.MaxValue; 59 case TypeCode.Byte: return Byte.MaxValue; 60 case TypeCode.Boolean: return true; 61 default: return GetDefaultValue(t); 62 } 63 } 64 65 protected object GetMinValue(Type t) { 66 TypeCode typeCode = Type.GetTypeCode(t); 67 68 if (typeof(ValueType).IsEqualTo(typeof(PercentValue))) 69 return 0.0d; 70 71 switch (typeCode) { 72 case TypeCode.Int16: return Int16.MinValue; 73 case TypeCode.Int32: return Int32.MinValue; 74 case TypeCode.Int64: return Int64.MinValue; 75 case TypeCode.UInt16: return UInt16.MinValue; 76 case TypeCode.UInt32: return UInt32.MinValue; 77 case TypeCode.UInt64: return UInt64.MinValue; 78 case TypeCode.Single: return Single.MinValue; 79 case TypeCode.Double: return Double.MinValue; 80 case TypeCode.Decimal: return Decimal.MinValue; 81 case TypeCode.Byte: return Byte.MinValue; 82 case TypeCode.Boolean: return false; 83 default: return GetDefaultValue(t); 84 } 85 } 86 87 protected object GetDefaultValue(Type t) => t.IsValueType ? Activator.CreateInstance(t) : null; 41 88 #endregion 42 89 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs
r17342 r17353 4 4 using System.Text; 5 5 using System.Threading.Tasks; 6 using HeuristicLab.Common; 6 7 using HeuristicLab.Core; 7 8 … … 9 10 public class ConstrainedValueParameterConverter : ParameterBaseConverter { 10 11 public override void InjectData(IParameter parameter, JsonItem data) { 11 foreach (var x in parameter.Cast<dynamic>().ValidValues)12 if (x.GetType().Name== CastValue<string>(data.Value))12 foreach(var x in GetValidValues(parameter)) 13 if(x.ToString() == CastValue<string>(data.Value)) 13 14 parameter.ActualValue = x; 14 15 … … 20 21 new JsonItem() { 21 22 Name = value.Name, 22 Value = value.ActualValue?. GetType().Name,23 Range = GetValidValues(value) ,23 Value = value.ActualValue?.ToString(), 24 Range = GetValidValues(value).Select(x => x.ToString()), 24 25 Parameters = GetParameterizedChilds(value) 25 26 }; 26 27 27 28 #region Helper 28 private object[] GetValidValues(IParameter value) {29 List< object> list = new List<object>();29 private IItem[] GetValidValues(IParameter value) { 30 List<IItem> list = new List<IItem>(); 30 31 var values = value.Cast<dynamic>().ValidValues; 31 foreach (var x in values) list.Add( x.GetType().Name);32 foreach (var x in values) list.Add((IItem)x); 32 33 return list.ToArray(); 33 34 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/DummyConverter.cs
r17342 r17353 4 4 using System.Text; 5 5 using System.Threading.Tasks; 6 using HeuristicLab.Common; 6 7 using HeuristicLab.Core; 7 8 … … 14 15 15 16 public override JsonItem ExtractData(IItem value) => 16 new JsonItem() { Value = value.GetType(). Name};17 new JsonItem() { Value = value.GetType().GetPrettyName(false) }; 17 18 } 18 19 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs
r17342 r17353 4 4 using System.Text; 5 5 using System.Threading.Tasks; 6 using HeuristicLab.Common; 6 7 using HeuristicLab.Core; 7 8 … … 11 12 JsonItem data = base.ExtractData(value); 12 13 13 data.Value = value.GetType(). Name;14 data.Value = value.GetType().GetPrettyName(false); 14 15 data.Operators = new List<JsonItem>(); 15 16 dynamic val = value.Cast<dynamic>(); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs
r17342 r17353 11 11 IValueLookupParameter param = value.Cast<IValueLookupParameter>(); 12 12 object actualValue = null; 13 I List<object> actualRange = null;13 IEnumerable<object> actualRange = null; 14 14 if(param.Value != null) { 15 15 JsonItem tmp = JsonItemConverter.Extract(param.Value); -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs
r17342 r17353 18 18 new JsonItem() { 19 19 Value = value.Cast<ValueType>().Value, 20 Range = new object[] { GetMinValue( ), GetMaxValue() }20 Range = new object[] { GetMinValue(typeof(T)), GetMaxValue(typeof(T)) } 21 21 }; 22 23 #region Helper24 private object GetMaxValue() {25 TypeCode typeCode = Type.GetTypeCode(typeof(T));26 27 if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))28 return 1.0d;29 30 switch (typeCode) {31 case TypeCode.Int16: return Int16.MaxValue;32 case TypeCode.Int32: return Int32.MaxValue;33 case TypeCode.Int64: return Int64.MaxValue;34 case TypeCode.UInt16: return UInt16.MaxValue;35 case TypeCode.UInt32: return UInt32.MaxValue;36 case TypeCode.UInt64: return UInt64.MaxValue;37 case TypeCode.Single: return Single.MaxValue;38 case TypeCode.Double: return Double.MaxValue;39 case TypeCode.Decimal: return Decimal.MaxValue;40 case TypeCode.Byte: return Byte.MaxValue;41 case TypeCode.Boolean: return true;42 default: return default(T);43 }44 }45 46 private object GetMinValue() {47 TypeCode typeCode = Type.GetTypeCode(typeof(T));48 49 if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))50 return 0.0d;51 52 switch (typeCode) {53 case TypeCode.Int16: return Int16.MinValue;54 case TypeCode.Int32: return Int32.MinValue;55 case TypeCode.Int64: return Int64.MinValue;56 case TypeCode.UInt16: return UInt16.MinValue;57 case TypeCode.UInt32: return UInt32.MinValue;58 case TypeCode.UInt64: return UInt64.MinValue;59 case TypeCode.Single: return Single.MinValue;60 case TypeCode.Double: return Double.MinValue;61 case TypeCode.Decimal: return Decimal.MinValue;62 case TypeCode.Byte: return Byte.MinValue;63 case TypeCode.Boolean: return false;64 default: return default(T);65 }66 }67 #endregion68 22 } 69 23 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/CustomJsonWriter.cs
r17342 r17353 4 4 5 5 namespace HeuristicLab.JsonInterface { 6 /// <summary> 7 /// Custom json writer for own formatting for templates. 8 /// It collapses arrays into a single line. 9 /// </summary> 6 10 internal class CustomJsonWriter : JsonTextWriter { 7 11 private bool isRangeArray = false; -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
r17349 r17353 63 63 <Compile Include="Attributes\ConvertableAttribute.cs" /> 64 64 <Compile Include="Constants.cs" /> 65 <Compile Include="Converters\ParameterConverter.cs" /> 66 <Compile Include="Converters\StorableConverter.cs" /> 65 67 <Compile Include="Converters\ValueLookupParameterConverter.cs" /> 68 <Compile Include="Converters\ValueRangeConverter.cs" /> 66 69 <Compile Include="CustomJsonWriter.cs" /> 67 70 <Compile Include="Extensions\ObjectExtensions.cs" /> -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItemConverter.cs
r17284 r17353 10 10 public interface IJsonItemConverter { 11 11 /// <summary> 12 /// Injects the saved infos from the JsonItem into the IItem. 13 /// (Sets the necessary values.) 14 /// </summary> 15 /// <param name="item">The IItem which get the data injected.</param> 16 /// <param name="data">The JsonItem with the saved values.</param> 17 void Inject(IItem item, JsonItem data); 18 19 /// <summary> 12 20 /// Extracts all infos out of an IItem to create a JsonItem. 13 21 /// (For template generation.) … … 16 24 /// <returns>JsonItem with infos to reinitialise the IItem.</returns> 17 25 JsonItem Extract(IItem value); 18 19 /// <summary>20 /// Injects the saved infos from the JsonItem into the IItem.21 /// (Sets the necessary values.)22 /// </summary>23 /// <param name="item">The IItem which get the data injected.</param>24 /// <param name="data">The JsonItem with the saved values.</param>25 void Inject(IItem item, JsonItem data);26 26 } 27 27 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
r17349 r17353 2 2 using System.Collections.Generic; 3 3 using System.Linq; 4 using HeuristicLab.Common; 4 5 using HeuristicLab.Core; 5 6 using HeuristicLab.Data; … … 9 10 10 11 namespace HeuristicLab.JsonInterface { 12 /// <summary> 13 /// Static class to generate json interface templates. 14 /// </summary> 11 15 public static class JCGenerator { 12 13 16 private struct GenData { 14 17 public JObject Template { get; set; } … … 16 19 public JArray JsonItems { get; set; } 17 20 } 18 19 21 20 22 public static string GenerateTemplate(IAlgorithm algorithm) { 21 23 // data container … … 30 32 // which have parameters aswell 31 33 AddInstantiableIItem(Constants.Algorithm, algorithm, genData); 32 IsConvertable(algorithm, true);33 if (algorithm.Problem != null && IsConvertable(algorithm.Problem, true)) // 1.2. only when an problem exists34 //IsConvertable(algorithm, true); 35 if (algorithm.Problem != null) // 1.2. only when an problem exists 34 36 AddInstantiableIItem(Constants.Problem, algorithm.Problem, genData); 35 37 … … 43 45 44 46 #region Helper 45 private static bool IsConvertable(object obj, bool throwException ) {47 private static bool IsConvertable(object obj, bool throwException = false) { 46 48 bool tmp = ConvertableAttribute.IsConvertable(obj); 47 49 if (throwException && tmp) 48 throw new NotSupportedException($"Type {obj.GetType(). Name} is not convertable!");50 throw new NotSupportedException($"Type {obj.GetType().GetPrettyName(false)} is not convertable!"); 49 51 return tmp; 50 52 } 53 51 54 private static void AddInstantiableIItem(string metaDataTagName, IItem item, GenData genData) { 52 55 JsonItem jsonItem = JsonItemConverter.Extract(item); … … 78 81 obj.Property(nameof(JsonItem.Type))?.Remove(); 79 82 80 genData.TypeList.Add(item.Path, item.Type); 83 if(!genData.TypeList.ContainsKey(item.Path)) 84 genData.TypeList.Add(item.Path, item.Type); 81 85 return obj; 82 86 } … … 87 91 TransformNodes(x => { 88 92 var p = x.ToObject<JsonItem>(); 93 x.Property(nameof(JsonItem.Type))?.Remove(); 94 x.Property(nameof(JsonItem.Parameters))?.Remove(); 95 /* 89 96 if ((p.Value == null || (p.Value != null && p.Value.GetType() == typeof(string) && p.Range == null) && p.ActualName == null)) { 90 97 objToRemove.Add(x); … … 92 99 x.Property(nameof(JsonItem.Type))?.Remove(); 93 100 x.Property(nameof(JsonItem.Parameters))?.Remove(); 94 } 101 }*/ 95 102 }, token[Constants.FreeParameters]); 96 foreach (var x in objToRemove) x.Remove();103 //foreach (var x in objToRemove) x.Remove(); 97 104 } 98 105 … … 109 116 if (p.Value == null) objToRemove.Add(x); 110 117 }, token[Constants.StaticParameters]); 111 foreach (var x in objToRemove) x.Remove();118 //foreach (var x in objToRemove) x.Remove(); 112 119 } 113 120 -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs
r17349 r17353 14 14 15 15 namespace HeuristicLab.JsonInterface { 16 /// <summary> 17 /// Static class to instantiate an IAlgorithm object with a json interface template and config. 18 /// </summary> 16 19 public static class JCInstantiator { 17 20 private struct InstData { … … 23 26 } 24 27 28 /// <summary> 29 /// Instantiate an IAlgorithm object with a template and config. 30 /// </summary> 31 /// <param name="templateFile">Template file (json), generated with JCGenerator.</param> 32 /// <param name="configFile">Config file (json) for the template.</param> 33 /// <returns>confugrated IAlgorithm object</returns> 25 34 public static IAlgorithm Instantiate(string templateFile, string configFile = "") { 26 35 InstData instData = new InstData() { -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs
r17349 r17353 9 9 10 10 namespace HeuristicLab.JsonInterface { 11 /// <summary> 12 /// Main data class for json interface. 13 /// </summary> 11 14 public class JsonItem { 12 15 … … 14 17 private string name; 15 18 private object value; 16 private I List<object> range;19 private IEnumerable<object> range; 17 20 #endregion 18 21 … … 27 30 public string Type { get; set; } 28 31 public string Path { get; set; } 29 public IList<JsonItem> Parameters { get; set; } 32 public IList<JsonItem> Parameters { get; set; } // -> für flachen aufbau -> childs? 30 33 public IList<JsonItem> Operators { get; set; } 31 34 public object Value { 32 35 get => value; 33 36 set { 34 this.value = value; 37 if (value is JContainer) 38 this.value = ((JContainer)value).ToObject<object[]>(); 39 else 40 this.value = value; 35 41 CheckConstraints(); 36 42 } 37 43 } 38 public I List<object> Range {44 public IEnumerable<object> Range { 39 45 get => range; 40 46 set { … … 96 102 private void CheckConstraints() { 97 103 if (Range != null && Value != null && !IsInRange()) 98 throw new ArgumentOutOfRangeException( "Default", "Defaultis not in range.");104 throw new ArgumentOutOfRangeException(nameof(Value), $"{nameof(Value)} is not in range."); 99 105 } 100 106 101 102 private bool IsInRange() => IsInRangeList() || IsInNumericRange(); 107 private bool IsInRange() => IsInRangeList() || 108 (Value.GetType().IsArray && ((object[])Value).All(x => IsInNumericRange(x))) || 109 (!Value.GetType().IsArray && IsInNumericRange(Value)); 103 110 104 111 private bool IsInRangeList() { … … 108 115 } 109 116 110 private bool IsInNumericRange( ) =>111 IsInNumericRange<long>( )112 || IsInNumericRange<int>( )113 || IsInNumericRange<short>( )114 || IsInNumericRange<byte>( )115 || IsInNumericRange<float>( )116 || IsInNumericRange<double>( );117 private bool IsInNumericRange(object value) => 118 IsInNumericRange<long>(value) 119 || IsInNumericRange<int>(value) 120 || IsInNumericRange<short>(value) 121 || IsInNumericRange<byte>(value) 122 || IsInNumericRange<float>(value) 123 || IsInNumericRange<double>(value); 117 124 118 private bool IsInNumericRange<T>( ) where T : IComparable {119 object value = Value, min = Range[0], max = Range[1];125 private bool IsInNumericRange<T>(object value) where T : IComparable { 126 object min = Range.First(), max = Range.Last(); 120 127 return value != null && min != null && max != null && value is T && min is T && max is T && 121 128 (((T)min).CompareTo(value) == -1 || ((T)min).CompareTo(value) == 0) && -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItemConverter.cs
r17287 r17353 8 8 9 9 namespace HeuristicLab.JsonInterface { 10 /// <summary> 11 /// Static class for handling json converters. 12 /// </summary> 10 13 public static class JsonItemConverter { 11 14 … … 15 18 } 16 19 17 private static IDictionary<Type, ConverterPriorityContainer> transformers = new Dictionary<Type, ConverterPriorityContainer>(); 20 private static IDictionary<Type, ConverterPriorityContainer> Converters { get; set; } 21 = new Dictionary<Type, ConverterPriorityContainer>(); 18 22 23 /// <summary> 24 /// Register a converter for a given type and priority. 25 /// </summary> 26 /// <param name="type">The type for which the converter will be selected.</param> 27 /// <param name="converter">The implemented converter.</param> 28 /// <param name="priority">The priority for the converter selection (when multiple converter match for a given type). Higher is better.</param> 19 29 public static void Register(Type type, IJsonItemConverter converter, int priority) { 20 if (! transformers.ContainsKey(type))21 transformers.Add(type, new ConverterPriorityContainer() { Converter = converter, Priority = priority });30 if (!Converters.ContainsKey(type)) 31 Converters.Add(type, new ConverterPriorityContainer() { Converter = converter, Priority = priority }); 22 32 } 23 33 24 public static void Register<T>(IJsonItemConverter converter, int priority) => Register(typeof(T), converter, priority); 34 public static void Register<T>(IJsonItemConverter converter, int priority) => 35 Register(typeof(T), converter, priority); 25 36 37 /// <summary> 38 /// Deregister a converter (same object has to be already registered). 39 /// </summary> 40 /// <param name="converter">Converter to deregister.</param> 41 public static void Deregister(IJsonItemConverter converter) { 42 var types = 43 Converters 44 .Where(x => x.Value.Converter.GetHashCode() == converter.GetHashCode()) 45 .Select(x => x.Key); 46 foreach (var x in types) 47 Converters.Remove(x); 48 } 49 50 /// <summary> 51 /// Get a converter for a specific type. 52 /// </summary> 53 /// <param name="type">The type for which the converter will be selected.</param> 54 /// <returns>An IJsonItemConverter object.</returns> 26 55 public static IJsonItemConverter Get(Type type) { 27 56 IList<ConverterPriorityContainer> possibleConverters = new List<ConverterPriorityContainer>(); 28 29 foreach (var x in transformers)57 58 foreach (var x in Converters) 30 59 if (type.IsEqualTo(x.Key)) 31 60 possibleConverters.Add(x.Value); … … 49 78 50 79 80 /// <summary> 81 /// Static constructor for default converter configuration. 82 /// </summary> 51 83 static JsonItemConverter() { 52 84 Register<IntValue>(new ValueTypeValueConverter<IntValue, int>(), 1); … … 67 99 Register<BoolMatrix>(new ValueTypeMatrixConverter<BoolMatrix, bool>(), 1); 68 100 101 Register<DoubleRange>(new DoubleRangeConverter(), 1); 102 Register<IntRange>(new IntRangeConverter(), 1); 103 69 104 Register(typeof(EnumValue<>), new EnumTypeConverter(), 1); 70 105 71 Register<IValueParameter>(new ValueParameterConverter(), 1); 72 Register<IParameterizedItem>(new ParameterizedItemConverter(), 1); 73 Register<ILookupParameter>(new LookupParameterConverter(), 2); 74 Register<IValueLookupParameter>(new ValueLookupParameterConverter(), 3); 106 Register<IParameter>(new ParameterConverter(), 1); 75 107 76 Register(typeof(IConstrainedValueParameter<>), new ConstrainedValueParameterConverter(), 2); 77 Register(typeof(ICheckedMultiOperator<>), new MultiCheckedOperatorConverter(), 2); 108 Register<IValueParameter>(new ValueParameterConverter(), 2); 109 Register<IParameterizedItem>(new ParameterizedItemConverter(), 2); 110 Register<ILookupParameter>(new LookupParameterConverter(), 3); 111 Register<IValueLookupParameter>(new ValueLookupParameterConverter(), 4); 112 113 Register(typeof(IConstrainedValueParameter<>), new ConstrainedValueParameterConverter(), 3); 114 Register(typeof(ICheckedMultiOperator<>), new MultiCheckedOperatorConverter(), 3); 78 115 } 79 116 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Tests/HeuristicLab.JsonInterface/GeneratorInstantiatorTest.cs
r17330 r17353 20 20 GeneticAlgorithm alg = new GeneticAlgorithm(); 21 21 alg.Problem = new TravelingSalesmanProblem(); 22 JCGenerator gen = new JCGenerator();23 22 //File.WriteAllText(@"C:\Workspace\Template.json", gen.GenerateTemplate(alg, tsp)); 24 File.WriteAllText(templateFilePath, gen.GenerateTemplate(alg));23 File.WriteAllText(templateFilePath, JCGenerator.GenerateTemplate(alg)); 25 24 File.WriteAllText(configFilePath, "["+ 26 25 "{\"Name\": \"Seed\",\"Default\": 55555,\"Path\": \"Genetic Algorithm (GA).Seed\"},"+ … … 38 37 [TestMethod] 39 38 public void TestInstantiator() { 40 JCInstantiator configurator = new JCInstantiator(); 41 GeneticAlgorithm alg = (GeneticAlgorithm)configurator.Instantiate(templateFilePath, configFilePath); 39 GeneticAlgorithm alg = (GeneticAlgorithm)JCInstantiator.Instantiate(templateFilePath, configFilePath); 42 40 43 41 Assert.AreEqual(55555, alg.Seed.Value); … … 50 48 public void TestRangeChangeWithConfig() { 51 49 File.WriteAllText(configFilePath, "[{\"Name\": \"MutationProbability\", \"Path\": \"Genetic Algorithm (GA).MutationProbability\", \"Default\": 2.0,\"Range\":[0.0,2.0]}]"); 52 JCInstantiator configurator = new JCInstantiator(); 53 GeneticAlgorithm alg = (GeneticAlgorithm)configurator.Instantiate(templateFilePath, configFilePath); 50 GeneticAlgorithm alg = (GeneticAlgorithm)JCInstantiator.Instantiate(templateFilePath, configFilePath); 54 51 } 55 52 } -
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Tests/HeuristicLab.Tests.csproj
r17323 r17353 591 591 <Compile Include="HeuristicLab.IGraph\IGraphWrappersVectorTest.cs" /> 592 592 <Compile Include="HeuristicLab.JsonInterface\GeneratorInstantiatorTest.cs" /> 593 <Compile Include="HeuristicLab.JsonInterface\ConvertableChecks.cs" /> 593 594 <Compile Include="HeuristicLab.Persistence-3.3\StorableAttributeTests.cs" /> 594 595 <Compile Include="HeuristicLab.Persistence-3.3\UseCases.cs" />
Note: See TracChangeset
for help on using the changeset viewer.