Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Auto dispatch create methods in python #5118

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 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
32 changes: 30 additions & 2 deletions examples/meta/generator/targets/python.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"Program": "import numpy as np\n$dependencies\n\n$program",
"Dependencies": {
"IncludeAllClasses": false,
"IncludeInterfacedClasses": true,
"IncludeInterfacedClasses": true,
"IncludeEnums": true,
"IncludeGlobalFunctions": true,
"DependencyListElement": "import shogun as sg",
Expand Down Expand Up @@ -81,7 +81,35 @@
"get_string": "$object.get($arguments)"
},
"StaticCall": "sg.$typeName.$method($arguments)",
"GlobalCall": {"Default": "sg.$method($arguments$kwargs)"},
"GlobalCall": {
"Default": "sg.$method($arguments$kwargs)",
"create_svm": "sg.create($arguments$kwargs)",
"create_evaluation": "sg.create($arguments$kwargs)",
"create_multiclass_strategy": "sg.create($arguments$kwargs)",
"create_ecoc_encoder": "sg.create($arguments$kwargs)",
"create_ecoc_decoder": "sg.create($arguments$kwargs)",
"create_transformer": "sg.create($arguments$kwargs)",
"create_layer": "sg.create($arguments$kwargs)",
"create_splitting_strategy": "sg.create($arguments$kwargs)",
"create_machine_evaluation": "sg.create($arguments$kwargs)",
"create_gp_likelihood": "sg.create($arguments$kwargs)",
"create_gp_mean": "sg.create($arguments$kwargs)",
"create_gp_inference": "sg.create($arguments$kwargs)",
"create_differentiable": "sg.create($arguments$kwargs)",
"create_loss": "sg.create($arguments$kwargs)",
"create_parameter_observer": "sg.create($arguments$kwargs)",
"create_evaluation_result": "sg.create($arguments$kwargs)",
"create_distribution": "sg.create($arguments$kwargs)",
"create_combination_rule": "sg.create($arguments$kwargs)",
"create_distance": "sg.create($arguments$kwargs)",
"create_machine": "sg.create($arguments$kwargs)",
"create_structured_model": "sg.create($arguments$kwargs)",
"create_factor_type": "sg.create($arguments$kwargs)",
"create_gaussian_process": "sg.create($arguments$kwargs)",
"create_minimizer": "sg.create($arguments$kwargs)",
"create_lbfgs_minimizer": "sg.create($arguments$kwargs)",
"create_kernel_normalizer": "sg.create($arguments$kwargs)"
},
"Identifier": "$identifier",
"Enum":"sg.$value"
},
Expand Down
2 changes: 1 addition & 1 deletion examples/undocumented/python/classifier_larank.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def classifier_larank (num_vec,num_class,distance,C=0.9,num_threads=1,num_iter=5
feats_train=sg.create_features(fm_train)
feats_test=sg.create_features(fm_test)

kernel=sg.create_kernel("GaussianKernel", width=1)
kernel=sg.create("GaussianKernel", width=1)

epsilon=1e-5
labels=MulticlassLabels(label_train)
Expand Down
4 changes: 2 additions & 2 deletions examples/undocumented/python/classifier_multiclassocas.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def classifier_multiclassocas (num_vec=10,num_class=3,distance=15,width=2.1,C=1,
from shogun import MulticlassLabels
import shogun as sg
try:
sg.create_machine("MulticlassOCAS")
sg.create("MulticlassOCAS")
except ImportError:
print("MulticlassOCAS not available")
return
Expand All @@ -28,7 +28,7 @@ def classifier_multiclassocas (num_vec=10,num_class=3,distance=15,width=2.1,C=1,

labels=sg.create_labels(label_train)

classifier = sg.create_machine("MulticlassOCAS", labels=labels, C=C)
classifier = sg.create("MulticlassOCAS", labels=labels, C=C)
classifier.train(feats_train)

out = classifier.apply(feats_test).get("labels")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def classifier_multilabeloutputliblinear (fm_train_real=traindat,fm_test_real=te

labels=MulticlassLabels(label_train_multiclass)

classifier = sg.create_machine("MulticlassLibLinear", C=C, labels=labels)
classifier = sg.create("MulticlassLibLinear", C=C, labels=labels)
classifier.train(feats_train)

# TODO: figure out the new style API for the below call, disabling for now
Expand Down
9 changes: 4 additions & 5 deletions examples/undocumented/python/converter_hasheddoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def converter_hasheddoc(strings):
normalize=True

#create converter
converter = sg.create_transformer('HashedDocConverter', tokenizer=tokenizer, num_bits=num_bits, should_normalize=normalize)
converter = sg.create('HashedDocConverter', tokenizer=tokenizer, num_bits=num_bits, should_normalize=normalize)

converted_feats=converter.transform(f)

Expand All @@ -29,9 +29,9 @@ def converter_hasheddoc(strings):

#print('Self dot product of string 0 with converted feats:', converted_feats.dot(0, converted_feats, 0))

hashed_feats=sg.create_features("HashedDocDotFeatures", num_bits=num_bits,
doc_collection=f, tokenizer=tokenizer,
should_normalize=normalize)
hashed_feats = sg.create("HashedDocDotFeatures", num_bits=num_bits,
doc_collection=f, tokenizer=tokenizer,
should_normalize=normalize)

#print('Hashed features\' space dimensionality is', hashed_feats.get_dim_feature_space())

Expand All @@ -43,4 +43,3 @@ def converter_hasheddoc(strings):
print('HashedDocConverter')
converter_hasheddoc(*parameter_list[0])


Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def converter_locallylinearembeeding (data, k):

features = sg.create_features(data)

converter = sg.create_transformer('LocallyLinearEmbedding', k=k)
converter = sg.create('LocallyLinearEmbedding', k=k)

converter.fit(features)
features = converter.transform(features)
Expand Down
4 changes: 2 additions & 2 deletions examples/undocumented/python/distance_canberraword.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@
def distance_canberraword (fm_train_dna=traindna,fm_test_dna=testdna,order=3,gap=0,reverse=False):
charfeat=sg.create_string_features(fm_train_dna, sg.DNA)
feats_train=sg.create_string_features(charfeat, order-1, order, gap, reverse)
preproc = sg.create_transformer("SortWordString")
preproc = sg.create("SortWordString")
preproc.fit(feats_train)
feats_train = preproc.transform(feats_train)

charfeat=sg.create_string_features(fm_test_dna, sg.DNA)
feats_test=sg.create_string_features(charfeat, order-1, order, gap, reverse)
feats_test = preproc.transform(feats_test)

distance = sg.create_distance("CanberraWordDistance")
distance = sg.create("CanberraWordDistance")
distance.init(feats_train, feats_train)

dm_train=distance.get_distance_matrix()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def distance_function(self, idx_a, idx_b):
feats_train.get_global_parallel().set_num_threads(1)
feats_test=sg.create_features(fm_test_real)

distance=sg.create_distance("EuclideanDistance")
distance=sg.create("EuclideanDistance")
distance.init(feats_train, feats_test)

ddistance=DirectorEuclideanDistance()
Expand Down
4 changes: 2 additions & 2 deletions examples/undocumented/python/distance_hammingword.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ def distance_hammingword (fm_train_dna=traindna,fm_test_dna=testdna,

charfeat=sg.create_string_features(fm_train_dna, sg.DNA)
feats_train=sg.create_string_features(charfeat, order-1, order, gap, reverse)
preproc = sg.create_transformer("SortWordString")
preproc = sg.create("SortWordString")
preproc.fit(feats_train)
feats_train = preproc.transform(feats_train)

charfeat=sg.create_string_features(fm_test_dna, sg.DNA)
feats_test=sg.create_string_features(charfeat, order-1, order, gap, reverse)
feats_test = preproc.transform(feats_test)

distance = sg.create_distance("HammingWordDistance", use_sign=use_sign)
distance = sg.create("HammingWordDistance", use_sign=use_sign)
distance.init(feats_train, feats_train)

dm_train=distance.get_distance_matrix()
Expand Down
4 changes: 2 additions & 2 deletions examples/undocumented/python/distance_manhattanword.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ def distance_manhattenword (train_fname=traindna,test_fname=testdna,order=3,gap=

charfeat=sg.create_string_features(sg.read_csv(train_fname), sg.DNA)
feats_train=sg.create_string_features(charfeat, order-1, order, gap, reverse)
preproc = sg.create_transformer("SortWordString")
preproc = sg.create("SortWordString")
preproc.fit(feats_train)
feats_train = preproc.transform(feats_train)

charfeat=sg.create_string_features(sg.read_csv(test_fname), sg.DNA)
feats_test=sg.create_string_features(charfeat, order-1, order, gap, reverse)
feats_test = preproc.transform(feats_test)

distance = sg.create_distance('ManhattanWordDistance')
distance = sg.create('ManhattanWordDistance')
distance.init(feats_train, feats_train)

dm_train=distance.get_distance_matrix()
Expand Down
2 changes: 1 addition & 1 deletion examples/undocumented/python/distance_normsquared.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def distance_normsquared (train_fname=traindat,test_fname=testdat):
feats_train=sg.create_features(sg.read_csv(train_fname))
feats_test=sg.create_features(sg.read_csv(test_fname))

distance = sg.create_distance('EuclideanDistance', disable_sqrt=True)
distance = sg.create('EuclideanDistance', disable_sqrt=True)
distance.init(feats_train, feats_train)

dm_train=distance.get_distance_matrix()
Expand Down
8 changes: 4 additions & 4 deletions examples/undocumented/python/evaluation_clustering_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

def run_clustering(data, k):

distance = sg.create_distance('EuclideanDistance')
distance = sg.create('EuclideanDistance')
distance.init(data, data)
kmeans=sg.create_machine("KMeans", k=k, distance=distance, seed=1)
kmeans=sg.create("KMeans", k=k, distance=distance, seed=1)

#print("Running clustering...")
kmeans.train()
Expand All @@ -23,9 +23,9 @@ def assign_labels(data, centroids, ncenters):

labels = MulticlassLabels(arange(0.,ncenters))
fea_centroids = sg.create_features(centroids)
distance = sg.create_distance('EuclideanDistance')
distance = sg.create('EuclideanDistance')
distance.init(fea_centroids, fea_centroids)
knn = sg.create_machine("KNN", k=1, distance=distance, labels=labels)
knn = sg.create("KNN", k=1, distance=distance, labels=labels)
knn.train()
return knn.apply(data)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,34 +16,34 @@ def evaluation_contingencytableevaluation (ground_truth, predicted):
ground_truth_labels = BinaryLabels(ground_truth)
predicted_labels = BinaryLabels(predicted)

base_evaluator = sg.create_evaluation("ContingencyTableEvaluation")
base_evaluator = sg.create("ContingencyTableEvaluation")
base_evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("AccuracyMeasure")
evaluator = sg.create("AccuracyMeasure")
accuracy = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("ErrorRateMeasure")
evaluator = sg.create("ErrorRateMeasure")
errorrate = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("BALMeasure")
evaluator = sg.create("BALMeasure")
bal = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("WRACCMeasure")
evaluator = sg.create("WRACCMeasure")
wracc = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("F1Measure")
evaluator = sg.create("F1Measure")
f1 = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("CrossCorrelationMeasure")
evaluator = sg.create("CrossCorrelationMeasure")
crosscorrelation = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("RecallMeasure")
evaluator = sg.create("RecallMeasure")
recall = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("PrecisionMeasure")
evaluator = sg.create("PrecisionMeasure")
precision = evaluator.evaluate(predicted_labels,ground_truth_labels)

evaluator = sg.create_evaluation("SpecificityMeasure")
evaluator = sg.create("SpecificityMeasure")
specificity = evaluator.evaluate(predicted_labels,ground_truth_labels)

return accuracy, errorrate, bal, wracc, f1, crosscorrelation, recall, precision, specificity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,40 +23,40 @@ def evaluation_cross_validation_mkl_weight_storage(traindat=traindat, label_trai

# training data, combined features all on same data
features=sg.create_features(traindat)
comb_features=sg.create_features("CombinedFeatures")
comb_features=sg.create("CombinedFeatures")
comb_features.add("feature_array", features)
comb_features.add("feature_array", features)
comb_features.add("feature_array", features)
labels=BinaryLabels(label_traindat)

# kernel, different Gaussians combined
kernel=sg.create_kernel("CombinedKernel")
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=0.1))
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=1))
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=2))
kernel=sg.create("CombinedKernel")
kernel.add("kernel_array", sg.create("GaussianKernel", width=0.1))
kernel.add("kernel_array", sg.create("GaussianKernel", width=1))
kernel.add("kernel_array", sg.create("GaussianKernel", width=2))

# create mkl using libsvm, due to a mem-bug, interleaved is not possible
libsvm = sg.create_machine("LibSVM")
svm = sg.create_machine("MKLClassification", svm=sg.as_svm(libsvm),
libsvm = sg.create("LibSVM")
svm = sg.create("MKLClassification", svm=sg.as_svm(libsvm),
interleaved_optimization=False, kernel=kernel)

# splitting strategy for 5 fold cross-validation (for classification its better
# to use "StratifiedCrossValidation", but the standard
# "StratifiedCrossValidationSplitting" is also available
splitting_strategy = sg.create_splitting_strategy(
splitting_strategy = sg.create(
"StratifiedCrossValidationSplitting", labels=labels, num_subsets=5)

# evaluation method
evaluation_criterium=sg.create_evaluation("ContingencyTableEvaluation", type="ACCURACY")
evaluation_criterium=sg.create("ContingencyTableEvaluation", type="ACCURACY")

# cross-validation instance
cross_validation = sg.create_machine_evaluation(
cross_validation = sg.create(
"CrossValidation", machine=svm, features=comb_features,
labels=labels, splitting_strategy=splitting_strategy,
evaluation_criterion=evaluation_criterium, num_runs=3)

# append cross vlaidation output classes
mkl_storage=sg.create_parameter_observer("ParameterObserverCV")
mkl_storage=sg.create("ParameterObserverCV")
cross_validation.subscribe(mkl_storage)

# perform cross-validation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ def evaluation_cross_validation_multiclass_storage (traindat=traindat, label_tra
labels=MulticlassLabels(label_traindat)

# kernel, different Gaussians combined
kernel=sg.create_kernel("CombinedKernel")
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=0.1))
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=1))
kernel.add("kernel_array", sg.create_kernel("GaussianKernel", width=2))
kernel=sg.create("CombinedKernel")
kernel.add("kernel_array", sg.create("GaussianKernel", width=0.1))
kernel.add("kernel_array", sg.create("GaussianKernel", width=1))
kernel.add("kernel_array", sg.create("GaussianKernel", width=2))

# create mkl using libsvm, due to a mem-bug, interleaved is not possible
svm=MKLMulticlass(1.0,kernel,labels);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def evaluation_meansquarederror (ground_truth, predicted):
ground_truth_labels = RegressionLabels(ground_truth)
predicted_labels = RegressionLabels(predicted)

evaluator = sg.create_evaluation("MeanSquaredError")
evaluator = sg.create("MeanSquaredError")
mse = evaluator.evaluate(predicted_labels,ground_truth_labels)

return mse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def evaluation_meansquaredlogerror (ground_truth, predicted):
ground_truth_labels = RegressionLabels(ground_truth)
predicted_labels = RegressionLabels(predicted)

evaluator = sg.create_evaluation("MeanSquaredLogError")
evaluator = sg.create("MeanSquaredLogError")
mse = evaluator.evaluate(predicted_labels,ground_truth_labels)

return mse
Expand Down
2 changes: 1 addition & 1 deletion examples/undocumented/python/evaluation_prcevaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def evaluation_prcevaluation (ground_truth, predicted):
ground_truth_labels = BinaryLabels(ground_truth)
predicted_labels = BinaryLabels(predicted)

evaluator = sg.create_evaluation("PRCEvaluation")
evaluator = sg.create("PRCEvaluation")
evaluator.evaluate(predicted_labels,ground_truth_labels)

return evaluator.get("PRC"), evaluator.get("auPRC")
Expand Down
2 changes: 1 addition & 1 deletion examples/undocumented/python/evaluation_rocevaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def evaluation_rocevaluation (ground_truth, predicted):
ground_truth_labels = BinaryLabels(ground_truth)
predicted_labels = BinaryLabels(predicted)

evaluator = sg.create_evaluation("ROCEvaluation")
evaluator = sg.create("ROCEvaluation")
evaluator.evaluate(predicted_labels,ground_truth_labels)

return evaluator.get("ROC"), evaluator.get("auROC")
Expand Down
2 changes: 1 addition & 1 deletion examples/undocumented/python/evaluation_thresholds.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def evaluation_thresholds (index):
pred=BinaryLabels(output)
truth=BinaryLabels(label)

evaluator=sg.create_evaluation("ROCEvaluation")
evaluator=sg.create("ROCEvaluation")
evaluator.evaluate(pred, truth)

[fp,tp]=evaluator.get("ROC")
Expand Down
6 changes: 3 additions & 3 deletions examples/undocumented/python/features_hasheddocdot.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ def features_hasheddocdot(strings):
normalize=True

#create HashedDocDot features
hddf = sg.create_features("HashedDocDotFeatures", num_bits=num_bits,
doc_collection=f, tokenizer=tokenizer,
should_normalize=normalize)
hddf = sg.create("HashedDocDotFeatures", num_bits=num_bits,
doc_collection=f, tokenizer=tokenizer,
should_normalize=normalize)
#should expect 32
#print('Feature space dimensionality is', hddf.get_dim_feature_space())

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def gaussian_process_binary_classification_laplace(X_train, y_train, n_test=50):
test_features = sg.create_features(X_test)

# create Gaussian kernel with width = 2.0
kernel = sg.create_kernel('GaussianKernel', width=2.0)
kernel = sg.create('GaussianKernel', width=2.0)

# create zero mean function
mean = sg.gp_mean("ZeroMean")
Expand Down
Loading