-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
[Bug] Category Filters filtering the wrong or extra datapoints #9153
Comments
Working fine here: Screen.Recording.2024-09-20.at.09.55.12.movCan you share more environment info? |
Thats crazy! Here is what I see in the above codesandbox example: Screen.Recording.2024-09-20.at.10.44.09.AM.mov |
☝️ |
Macbook Pro Graphics Feature Status
WebGL Renderer: WebKit WebGL What other information would you like? |
Environment
|
I initially noticed this when filtering results with different order in the data. If an item with category I looked through the code of data-filter/data-filter-extension and data-filter/shader-module - I found nothing suspicious... but by brute force I realized that the difference is in 2.. and when I put after deck.gl/modules/extensions/src/data-filter/data-filter-extension.ts Lines 366 to 377 in 294b6f3
this ugly af code (with screenshot)switch (maxCategories) {
case 128:
if (categoryBitMask[0] % 2 === 0) {
categoryBitMask[0] += 2
}
break
case 64:
if (categoryBitMask[0] % 2 === 0) {
categoryBitMask[0] += 2
}
if (categoryBitMask[2] % 2 === 0) {
categoryBitMask[2] += 2
}
break
case 32:
if (categoryBitMask[0] % 2 === 0) {
categoryBitMask[0] += 2
}
if (categoryBitMask[1] % 2 === 0) {
categoryBitMask[1] += 2
}
if (categoryBitMask[2] % 2 === 0) {
categoryBitMask[2] += 2
}
if (categoryBitMask[3] % 2 === 0) {
categoryBitMask[3] += 2
}
break
} compare with first screenshot in the comment |
@finico interesting, could you make a PR with the changes so I can review better? It's not clear to me exactly how you have modified the code. Can you also include the dataset used to create this repro? |
@felixpalmer I first noticed it on my data in the app, but it reproduces on any data.
I think it's too crooked for PR. https://stackblitz.com/edit/vitejs-vite-xuj2ug7w?file=src%2FPatchedDataFilterExtension.ts And here is a video of how it works for me deckgl-filter.mov |
@finico thank you for putting in the effort to share the repro. I've tried you code and it isn't working on my platform - when I enable the patch, then the filter results are incorrect. I think what your code is doing is somehow correcting for a floating-point precision issue that is present on your platform. @finico @Jon-fiddler I've put together a PR with what I think should be a more robust approach, could you try it on your system and let me know if it fixes the issue? |
@felixpalmer I can confirm that on the locally built version from the branch the filtering works correctly. Thank you! |
Description
When using the datafilterextension and using category filters, i am experiencing some odd behavior when I go to filter out the datapoints with the first category option, it also filters out the next data point right after.
Example:
data => [{...dataStuff, field: 'a'}, {...dataStuff, field: 'b'}, {...dataStuff, field: 'c'}, {...dataStuff, field: 'd'}...]
if I go to apply a filter to show only 'b' and 'c' by removing the 'a' then both 'a' and 'b' are hidden.
If i replace the 2nd data with the 3rd, then both 'a' and 'c' will be hidden.
If i keep 'a', but filter out just 'b' or 'c', then it works fine.
CodeSandbox: https://codesandbox.io/p/sandbox/trusting-chatterjee-7dxgrv
Also seeing an oddity if I filter our everything except "d", then it shows only 'b' and 'c'? Maybe I am doing it wrong and if so please inform me how.
Flavors
Expected Behavior
When excluding the first data point in the list of data then the next datapoint with a different value would also not be filtered out.
Steps to Reproduce
CodeSandbox: https://codesandbox.io/p/sandbox/trusting-chatterjee-7dxgrv
Environment
Logs
No response
The text was updated successfully, but these errors were encountered: