Skip to content

Commit 6d751dc

Browse files
authoredJul 4, 2018
Merge pull request #7363 from alexbruy/fix-sampling
[processing] fix Random extract/select within subset algorithms
2 parents 6c014b4 + b72f5d1 commit 6d751dc

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed
 

‎python/plugins/processing/algs/qgis/RandomExtractWithinSubsets.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,11 @@ def processAlgorithm(self, parameters, context, feedback):
125125
classes[attrs[index]].append(feature)
126126
feedback.setProgress(int(i * total))
127127

128-
for subset in classes.values():
128+
for k, subset in classes.items():
129129
selValue = value if method != 1 else int(round(value * len(subset), 0))
130+
if selValue > len(subset):
131+
selValue = len(subset)
132+
feedback.reportError(self.tr('Subset "{}" is smaller than requested number of features.'.format(k)))
130133
selran.extend(random.sample(subset, selValue))
131134

132135
total = 100.0 / featureCount if featureCount else 1

‎python/plugins/processing/algs/qgis/RandomSelectionWithinSubsets.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,14 @@ def processAlgorithm(self, parameters, context, feedback):
133133
feedback.setProgress(int(i * total))
134134

135135
selran = []
136-
for subset in classes.values():
136+
for k, subset in classes.items():
137137
if feedback.isCanceled():
138138
break
139139

140140
selValue = value if method != 1 else int(round(value * len(subset), 0))
141+
if selValue > len(subset):
142+
selValue = len(subset)
143+
feedback.reportError(self.tr('Subset "{}" is smaller than requested number of features.'.format(k)))
141144
selran.extend(random.sample(subset, selValue))
142145

143146
layer.selectByIds(selran)

‎python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3923,6 +3923,21 @@ tests:
39233923
name: points_weighted.gml
39243924
compare: false
39253925

3926+
- algorithm: qgis:randomextractwithinsubsets
3927+
name: Random extract within subset (subset smaller than number)
3928+
params:
3929+
FIELD: id2
3930+
INPUT:
3931+
name: points.gml
3932+
type: vector
3933+
METHOD: 0
3934+
NUMBER: 3
3935+
results:
3936+
OUTPUT:
3937+
type: vector
3938+
name: points.gml
3939+
compare: false
3940+
39263941
- algorithm: qgis:heatmapkerneldensityestimation
39273942
name: Heatmap (Kernel density estimation)
39283943
params:
@@ -5355,6 +5370,7 @@ tests:
53555370
compare:
53565371
fields:
53575372
fid: skip
5373+
53585374
- algorithm: native:difference
53595375
name: Test Difference B - A (basic)
53605376
params:

0 commit comments

Comments
 (0)
Please sign in to comment.