Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions FATS/Base.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import os,sys,time
import os, sys, time
import numpy as np


class Base:
def __init__(self):
self.category='all'
self.category = 'all'

def fit(self, data):
return self
64 changes: 44 additions & 20 deletions FATS/Feature.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import pandas as pd
import matplotlib.pyplot as plt

import featureFunction
from . import featureFunction


class FeatureSpace:
Expand Down Expand Up @@ -53,21 +53,25 @@ def __init__(self, Data=None, featureList=None, excludeList=[], **kwargs):
self.Data = Data

if self.Data == 'all':
if featureList == None:
if featureList is None:

if excludeList == None:
if excludeList is None:
for name, obj in inspect.getmembers(featureFunction):
if inspect.isclass(obj) and name != 'Base':
if obj.__module__.endswith('FeatureFunctionLib'):
# if set(obj().Data).issubset(self.Data):
self.featureOrder.append((inspect.getsourcelines(obj)[-1:])[0])
self.featureOrder.append(
(inspect.getsourcelines(obj)[-1:])[0]
)
self.featureList.append(name)
else:
for name, obj in inspect.getmembers(featureFunction):
if inspect.isclass(obj) and name != 'Base' and not name in excludeList:
if obj.__module__.endswith('FeatureFunctionLib'):
# if set(obj().Data).issubset(self.Data):
self.featureOrder.append((inspect.getsourcelines(obj)[-1:])[0])
self.featureOrder.append(
(inspect.getsourcelines(obj)[-1:])[0]
)
self.featureList.append(name)

else:
Expand All @@ -85,15 +89,23 @@ def __init__(self, Data=None, featureList=None, excludeList=[], **kwargs):
if obj.__module__.endswith('FeatureFunctionLib'):
if name in kwargs.keys():
if set(obj(kwargs[name]).Data).issubset(self.Data):
self.featureOrder.append((inspect.getsourcelines(obj)[-1:])[0])
self.featureOrder.append(
(inspect.getsourcelines(obj)[-1:])[0]
)
self.featureList.append(name)

else:
if set(obj().Data).issubset(self.Data):
self.featureOrder.append((inspect.getsourcelines(obj)[-1:])[0])
self.featureOrder.append(
(inspect.getsourcelines(obj)[-1:])[0]
)
self.featureList.append(name)
else:
print "Warning: the feature", name, "could not be calculated because", obj().Data, "are needed."
print(
"Warning: the feature", name,
"could not be calculated because",
obj().Data, "are needed."
)
else:

for feature in featureList:
Expand All @@ -103,12 +115,19 @@ def __init__(self, Data=None, featureList=None, excludeList=[], **kwargs):
if set(obj().Data).issubset(self.Data):
self.featureList.append(name)
else:
print "Warning: the feature", name, "could not be calculated because", obj().Data, "are needed."
print(
"Warning: the feature", name,
"could not be calculated because",
obj().Data, "are needed."
)

if self.featureOrder != []:
self.sort = True
self.featureOrder = np.argsort(self.featureOrder)
self.featureList = [self.featureList[i] for i in self.featureOrder]
self.featureList = [
self.featureList[i]
for i in self.featureOrder
]
self.idx = np.argsort(self.featureList)

else:
Expand All @@ -120,20 +139,20 @@ def __init__(self, Data=None, featureList=None, excludeList=[], **kwargs):
if item in kwargs.keys():
try:
a = getattr(m, item)(kwargs[item])
except:
print "error in feature " + item
except Exception:
print("error in feature", item)
sys.exit(1)
else:
try:
a = getattr(m, item)()
except:
print " could not find feature " + item
except Exception:
print(" could not find feature", item)
# discuss -- should we exit?
sys.exit(1)
try:
self.featureFunc.append(a.fit)
except:
print "could not initilize " + item
except Exception:
print("could not initilize", item)

def calculateFeature(self, data):
self._X = np.asarray(data)
Expand All @@ -144,17 +163,22 @@ def calculateFeature(self, data):

def result(self, method='array'):
if method == 'array':
if self.sort == True:
if self.sort is True:
return [np.asarray(self.__result)[i] for i in self.idx]
else:
return np.asarray(self.__result)
elif method == 'dict':
if self.sort == True:
return dict(zip([self.featureList[i] for i in self.idx], [np.asarray(self.__result)[i] for i in self.idx]))
if self.sort is True:
return dict(
zip(
[self.featureList[i] for i in self.idx],
[np.asarray(self.__result)[i] for i in self.idx]
)
)
else:
return dict(zip(self.featureList, np.asarray(self.__result)))
elif method == 'features':
if self.sort == True:
if self.sort is True:
return [self.featureList[i] for i in self.idx]
else:
return self.featureList
Expand Down
Loading