diff --git a/.gitignore b/.gitignore index 1f252dc..20daf8c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,8 @@ npm-debug.log* yarn-debug.log* yarn-error.log* - +yarn.lock .external -performance_staging/ \ No newline at end of file +performance_staging/ +.claude/ diff --git a/package-lock.json b/package-lock.json index abbf9ca..126c821 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,15 +15,18 @@ "@mdx-js/react": "^3.0.0", "@orama/orama": "^3.1.18", "clsx": "^2.0.0", + "plotly.js-dist-min": "^3.7.0", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-plotly.js": "^4.1.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.10.1", "@docusaurus/tsconfig": "3.10.1", "@docusaurus/types": "3.10.1", "@types/react": "^19.0.0", + "@types/react-dom": "^19.2.4", "tsx": "^4.23.5", "typescript": "~6.0.2" }, @@ -32,46 +35,46 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.22.0.tgz", - "integrity": "sha512-BFR6zNowNKcY7Ou7TaJc9QWexES4YKPbmf/OTFofpdsdhz4x6q0lbxp3duO0EHnyrN7rE4ba/TSXuY+BDGu4+g==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.19.0.tgz", + "integrity": "sha512-Lhnez3hhXHk25lfxLAMxvkP4fmN3+1RgADhD2ssMDBYuAsDVReeyP+3SGRx+ntq8ijMrLqUyfvO72TB6jsTteQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.9.tgz", - "integrity": "sha512-4U2JKLMWlDu0CotYyUkWakDxr8AIav3QtIUXXRpfavYN29aVWfzlwJp9T0rPKEf/dO2QCPAUc0Kq1Tj1GJxo2A==", + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz", + "integrity": "sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.19.9", - "@algolia/autocomplete-shared": "1.19.9" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.8", + "@algolia/autocomplete-shared": "1.19.8" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.9.tgz", - "integrity": "sha512-6mExC6X7762s2SV3eJy3QOkB8bdMmnUhQ2agvGVDuzwoGyr3PquGSY/0vPQXCfiAiCaXUz1rXn+lwghgSi0l0w==", + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz", + "integrity": "sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.19.9" + "@algolia/autocomplete-shared": "1.19.8" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.9.tgz", - "integrity": "sha512-YosP9Uoek6y/Ur1r1qeogk4biMe/hzkyNcgMCciw0//3XpCM7VlYLSHnyt/vOnEOGhCCc0+3v+unEiH6zz+Z1A==", + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz", + "integrity": "sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ==", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -79,99 +82,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.56.0.tgz", - "integrity": "sha512-7r4Z3NC7yU1oAQVWJNA2HX7tX481F3pJvCGyLIXiTdBcthz4Q/o21jwcMYDFkuI92UWTNBQQmHYgwHo1zS5dzg==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.53.0.tgz", + "integrity": "sha512-0ZjA5Hcmaoz5Lj6OG0zhfIyeqzJZnLW2CRJA1W17UwMFGRtZAJ9yJKRvPEDA6gkpsIoQxORTSW6sWFiuYncPNQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.56.0.tgz", - "integrity": "sha512-avmjXQSq+jadFO8Xl2em05/uQdQnEmHsJyOAdVbZkmVgpMfxL12aJwVVfGNwYr9nulcpuJN1X0lTaQ5wxuNGcA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.53.0.tgz", + "integrity": "sha512-kWNodP75iiEaOtemC9F/hlxNBG5E2QUjN1BusnE6m2b4l7Qh/BUO3fGCVsmKJI65VO4VKGGmT43ICvHtTcJ2JQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.56.0.tgz", - "integrity": "sha512-v2TPStUhY//ripPjIVclZ8AWc7DEGooXULZGFlFu37zNatgHjw34oZZ+OSbbc/YHO+xZwPl62I1k8xH1m4S2eg==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.53.0.tgz", + "integrity": "sha512-YPN45TXD9Wrse185t/Ta7nktZsqpv97oOjCzp2sblHnCL6rBc9TDeJAg1IGl2UpdwnSD05Zu/5wLB4watOUMyg==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.56.0.tgz", - "integrity": "sha512-P0ehROpM4Sem3Sqo5x2cKPgj67D3G3jy0rh1Amwkcvsfr6tkvIcdCmerieanqTF7NxUMPNFLkpIFeMO8Rpa50w==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.53.0.tgz", + "integrity": "sha512-qAcYTDJE6m924FDDUQvdD6vh7DYaqOeSpFS74IP37/JRV0v4cGBauyxTF2WzDnokUylQDbqreoFIJZfg0Fitmw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.56.0.tgz", - "integrity": "sha512-SXK3Vn3WVxyzbm31oePZBJkp1wpOyuWdd4B/Pv7n0aXDxmeSWhC1R1FC1517mMrFAIaPH4Rt0x6RUe7ZNjz8FA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.53.0.tgz", + "integrity": "sha512-fQaY+DkSJOpuUVUe8MQTwrdiKAqkJGhpDarB08duBn/sUv7Bkib6MDRQauCcWTWTe4HIW+EbwQP9R4kci1V/Yw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.56.0.tgz", - "integrity": "sha512-5+ZdX8garFnmycnZgKhtXHePEaLj5zqDxI/0lkhhluzCcvTn0/PvvTirTg8hHYetQHvn7GDyeAiqTAieMvMW4A==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.53.0.tgz", + "integrity": "sha512-o72tsiEZGfeS/dxL9IADfzcZWGEwKDEe5CvtrBuT//3JR+SHuTtHRI2ZTf7D7bcKagcbojvO8hnkHdfoakSlYg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.56.0.tgz", - "integrity": "sha512-+mKUdYvqOi0BcvpAEyCEw49vSBptufIcfibtHz2bdr1pI789M46Yt0uQEk/sxtK3teh71OQvVFHaTDzShUWewQ==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.53.0.tgz", + "integrity": "sha512-Ds16IyPm/dNJPCU8OzApo2gwGrgWT5BYHhE3NFwZbpCveqyvPDB9sZDDkJ5DsdOGT2aC+R3i0/M1OVXF2qdgPg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" @@ -184,81 +187,81 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.56.0.tgz", - "integrity": "sha512-9g/zj+AZx5moFcdFIrYQoVrueXivjUcc3MQHtCYT8WhIuk1lUh1AyEhvJCS0XBZld09cLvd1AZ3BvDBpVpX2UA==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.53.0.tgz", + "integrity": "sha512-oNbT6z4NwD8Pou9VPINGlN/tlG1afESh2EbxqnP6rwl95xKVD/Zlciis1PpNeO/9U/rrajc1+7DcfKi03tX1KQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.56.0.tgz", - "integrity": "sha512-Qf3Sr6f9A9uxCZUf3MXS0d2b877uYzEB5yxqpVGXAhcJnBCQjrRRon0KvefpGkxy+BshrIJs96OUoMtGqXTFDA==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.53.0.tgz", + "integrity": "sha512-G+KZb/yd+qAOFn/cEvTGeLxQm8aP3a0od50l3z/ylccY+/o4YG3TNcjU1tFQHW4mXC137GPyR7W70R0kRQDLnA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.56.0.tgz", - "integrity": "sha512-GXWG1rWc5wu8hY4N33Y3b6ernY6sAdAvmKWN/zHAiACOx40WnpG0TVX5YazCAr/9gOYGInSiM2A0y2jy2xbiDA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.53.0.tgz", + "integrity": "sha512-6aVfYd55Un6IUgPLbo84WfgFZlS3L0vA1ttzXL5vahHewUJ8jYgd89TzlWRTeej7w70mb9RWsVlFYGmJ/diQww==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.56.0.tgz", - "integrity": "sha512-7t24cBxaInS3mZb7ddEaZT/tp6q+/aR4YttsQVyP1/i+LmwPR34atO35KjaLFCcRVrlP7sYOAqkCfg6lIRB+ew==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.53.0.tgz", + "integrity": "sha512-ke27DqgzCOlt+RbeEdCxtXxMQOnAOi8ujr2wid0DmDKzR95Kw/f9sBsuhBxtjevCqJRJszfRTLY0B1pbO6IhkA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0" + "@algolia/client-common": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.56.0.tgz", - "integrity": "sha512-R7ePHgVYmDFjZpvrsVAfbDz/d4RxKAYZ5/vgLfIsCVRZRryjWl/3INOxpOICzitehQ5FjNtNjcLQTrmHPTcHBQ==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.53.0.tgz", + "integrity": "sha512-GngiOqt2Gq4oLno6yXQVj9om+qSO9SWAoduoTOEg79dKZ62brB8OOIvSJG/vDNoanYi6a7Al9uDZwXvi+bcVTg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0" + "@algolia/client-common": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.56.0.tgz", - "integrity": "sha512-PIOUXlSnrqM0S+WOgDRb4RzotydJH7ZoT6tOyL7tAO7qJOfvX5wsEW8Pe+PMKMwvuI4/gIyK9cg2H7lJXqnc4Q==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.53.0.tgz", + "integrity": "sha512-6mF9LZMUk0QqWvrnxkxBqhswwz6Xfiwy6/gmTzL5HrlhdVG3ITAqGV2k3XmVThP1h0Ulc3VQwiNCD7/Nr4JNlQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.56.0" + "@algolia/client-common": "5.53.0" }, "engines": { "node": ">= 14.0.0" @@ -327,13 +330,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -626,12 +629,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.8" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1232,15 +1235,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", - "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.8" + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1536,9 +1539,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", - "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" @@ -1626,9 +1629,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", - "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", @@ -1952,17 +1955,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", + "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", + "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1970,9 +1973,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -1982,6 +1985,26 @@ "node": ">=6.9.0" } }, + "node_modules/@choojs/findup": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", + "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "license": "MIT", + "peer": true, + "dependencies": { + "commander": "^2.15.1" + }, + "bin": { + "findup": "bin/findup.js" + } + }, + "node_modules/@choojs/findup/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -2226,9 +2249,9 @@ } }, "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2647,9 +2670,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3094,9 +3117,9 @@ } }, "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3318,9 +3341,9 @@ } }, "node_modules/@docsearch/core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.7.0.tgz", - "integrity": "sha512-p/9xVKmPDj3FPvMfPf5naVO3Ej8SCbcUugGvx1+8GgkuBNbqxqN2Irx3WLBv8VY0jH7XpRwKWdlmjXLZsmTLsg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.3.tgz", + "integrity": "sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA==", "license": "MIT", "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3340,20 +3363,20 @@ } }, "node_modules/@docsearch/css": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.7.0.tgz", - "integrity": "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz", + "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.7.0.tgz", - "integrity": "sha512-x6oedjJ8O8/pIDBsMo5Orca3/6cQCz616/CwthVe68l43mqnj2lrJ9kFQITBqy8hMsS3nWeBWFoVO5dJ1DCFKA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.3.tgz", + "integrity": "sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g==", "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.19.2", - "@docsearch/core": "4.7.0", - "@docsearch/css": "4.7.0" + "@docsearch/core": "4.6.3", + "@docsearch/css": "4.6.3" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -4169,9 +4192,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -4186,9 +4209,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -4203,9 +4226,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -4220,9 +4243,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -4237,9 +4260,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -4254,9 +4277,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -4271,9 +4294,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -4288,9 +4311,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -4305,9 +4328,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -4322,9 +4345,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -4339,9 +4362,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -4356,9 +4379,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -4373,9 +4396,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -4390,9 +4413,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -4407,9 +4430,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -4424,9 +4447,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -4441,9 +4464,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -4458,9 +4481,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -4475,9 +4498,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -4492,9 +4515,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -4509,9 +4532,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -4526,9 +4549,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -4543,9 +4566,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -4560,9 +4583,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -4577,9 +4600,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -4594,9 +4617,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -5299,13 +5322,13 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.67.0.tgz", - "integrity": "sha512-+QOYAGujzm86pKcX4N0JQ1YcLEjypr/I+wmQRxwI8W7K0QXKSi8vQVC2oKQGjcfbHq02JvCQijypfvyhcTz7uw==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.3.tgz", + "integrity": "sha512-IvO50vkGydDZwS1e9rz/JXEtCCt9XvqxoGI6FlrVIvVm4/HpygMKW4ETtREWtMTsN5CLJ9FR6GuCduoQPZLBiw==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-node-builtins": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.3", "thingies": "^2.5.0" }, "engines": { @@ -5320,14 +5343,14 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.67.0.tgz", - "integrity": "sha512-2jCnH5ofKXb+6vcl8dQArO1Gb4FT7vLbMGVnNim0ekXkY78DPVXZvJ8DQp9WLbqP/G/gxiPVz/DOMoOCD4BqqQ==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.3.tgz", + "integrity": "sha512-JlIDGUWPl7Y6zl+/ISnZuh8z2aMr/xoR66D18zlaVAuL192CvlNJEzOlzp27x4P52HRtDnCSOk6f59vTsmp5vw==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.67.0", - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-core": "4.57.3", + "@jsonjoy.com/fs-node-builtins": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.3", "thingies": "^2.5.0" }, "engines": { @@ -5342,16 +5365,16 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.67.0.tgz", - "integrity": "sha512-EZ/mSrxRYphDbyll1VuDW0mvj/USoe2M5sxT2nYqyYyvdxsIsijhJOiygBHAaj86Eqd/Kb9ukkwXjBisRTk1tg==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.3.tgz", + "integrity": "sha512-089gZoKvbeOsT2jeBaVKSz91oFXQWFG7a62sMY6gVMHnoWbyGzTb6OVUP/V7G3wLQLJ555BEsHt8SD1nj1dgaQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.67.0", - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "@jsonjoy.com/fs-node-utils": "4.67.0", - "@jsonjoy.com/fs-print": "4.67.0", - "@jsonjoy.com/fs-snapshot": "4.67.0", + "@jsonjoy.com/fs-core": "4.57.3", + "@jsonjoy.com/fs-node-builtins": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-print": "4.57.3", + "@jsonjoy.com/fs-snapshot": "4.57.3", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -5367,9 +5390,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.67.0.tgz", - "integrity": "sha512-os7Cft1EudH0xZs5Kh5/qHI72jk8DMQ1561elyHkHd9c9xaa4wOfK1iMh4JB9y+kXtpXjEnT4cjHqqc7A3X3lA==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.3.tgz", + "integrity": "sha512-JAI3PqNuY8BR7ovy4h0bADLrqJLIcUauONNZfyTxUnj3Wf3tpTYe39eJ6z7FzYyA+tdMt33VpiQQUikGr3QOBw==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -5383,14 +5406,14 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.67.0.tgz", - "integrity": "sha512-5e6WTnLhw0Q5mPEACOsA7h2BA++N1FCSmhXRX5gone8Le4fsqcpgpukqW5hWneLfzIr5AOEliu0PyokdYx3Bwg==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.3.tgz", + "integrity": "sha512-uZGxyC0zDmcmW5bfHd4YivAZ54BLlbF9G0K5rBaksI/tZdJSGM7/AC+1TY7yvFu0Wc6gUHR7mFwf6SbQ3J1BTQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.67.0", - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "@jsonjoy.com/fs-node-utils": "4.67.0" + "@jsonjoy.com/fs-fsa": "4.57.3", + "@jsonjoy.com/fs-node-builtins": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.3" }, "engines": { "node": ">=10.0" @@ -5404,13 +5427,12 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.67.0.tgz", - "integrity": "sha512-ZcCPh4jvUqYxAgu4lLe+6eQbijxEkZIrCq0Jhh669o3v3zrCn8N4YAFod3zllZtSHhwb+YbER29LUW/SdNrP7Q==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.3.tgz", + "integrity": "sha512-quCil8AvfcOxob4pn0drGdcQWpkPVgkt9q1+EjeyXXT40/L3l5lvYrr6hR8LmHu0eg+DNNaUwqjLT6Hr7V4sdQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "glob-to-regex.js": "^1.0.1" + "@jsonjoy.com/fs-node-builtins": "4.57.3" }, "engines": { "node": ">=10.0" @@ -5424,12 +5446,12 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.67.0.tgz", - "integrity": "sha512-xBhay3ayVlFeScafZy+7jyH0+I6MLomaL+2nn/KWirgjwh58w8+u44j7oSvE8EQ2NLF63B1eVc65awmbs/39Iw==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.3.tgz", + "integrity": "sha512-ITwaLZpGIqD9jHndwMvDFZDIvbVzGRsJZDQ5HKln0vyMculu1c1nb7zbEBgY8BVSBZ9S2xO138OWIBGeRsrF3Q==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.57.3", "tree-dump": "^1.1.0" }, "engines": { @@ -5444,13 +5466,13 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.67.0.tgz", - "integrity": "sha512-wn5c6Qx0iVX1dV74l5WOCIPH9lz3xU6A0QG45n0c53athmmr7Z+XTg0YOndME88g/5LjcqwiSSYD9aSr9+goYg==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.3.tgz", + "integrity": "sha512-wdNaG2DxCtvj9lKldAnEV3ycYPEpk+p2cP2lHD1qdxkoQGlWUtQverqvG9KZSkm6BHFha4PP6XRZbpARNfHRxA==", "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.67.0", + "@jsonjoy.com/fs-node-utils": "4.57.3", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -5666,6 +5688,123 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", + "peer": true, + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", + "license": "ISC", + "peer": true + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.3.tgz", + "integrity": "sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 22" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "license": "BSD-3-Clause", + "peer": true, + "peerDependencies": { + "mapbox-gl": ">=0.32.1 <2.0.0" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC", + "peer": true + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", + "peer": true, + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC", + "peer": true + }, "node_modules/@mdx-js/mdx": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", @@ -5842,128 +5981,128 @@ } }, "node_modules/@peculiar/asn1-cms": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", - "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.7.0.tgz", + "integrity": "sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "@peculiar/asn1-x509-attr": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", - "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.7.0.tgz", + "integrity": "sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", - "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.7.0.tgz", + "integrity": "sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", - "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.7.0.tgz", + "integrity": "sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-rsa": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-cms": "^2.7.0", + "@peculiar/asn1-pkcs8": "^2.7.0", + "@peculiar/asn1-rsa": "^2.7.0", + "@peculiar/asn1-schema": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", - "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.7.0.tgz", + "integrity": "sha512-9GTl1nE8Mx1kTZ+7QyYatDyKsm34QcWRBFkY1iPvWC3X4Dona5s/tlLiQsx5WzVdZqiMBZNYT0buyw4/vbhnjw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", - "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.7.0.tgz", + "integrity": "sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pfx": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-cms": "^2.7.0", + "@peculiar/asn1-pfx": "^2.7.0", + "@peculiar/asn1-pkcs8": "^2.7.0", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "@peculiar/asn1-x509-attr": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", - "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.7.0.tgz", + "integrity": "sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", - "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz", + "integrity": "sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==", "license": "MIT", "dependencies": { "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.10", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", - "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.7.0.tgz", + "integrity": "sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-schema": "^2.7.0", "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.10", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", - "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.7.0.tgz", + "integrity": "sha512-NS8e7SOgXipkzUPLF/sce7ukpMpWjhxYsH0n6Y+bHYo4TTxOb95Zv7hqwSuL212mj5YxovjdOKQOgH1As3E94w==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, @@ -5998,6 +6137,99 @@ "node": ">=20.0.0" } }, + "node_modules/@plotly/d3": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz", + "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@plotly/d3-sankey": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", + "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "node_modules/@plotly/d3-sankey-circular": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", + "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "d3-array": "^1.2.1", + "d3-collection": "^1.0.4", + "d3-shape": "^1.2.0", + "elementary-circuits-directed-graph": "^1.0.4" + } + }, + "node_modules/@plotly/mapbox-gl": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz", + "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==", + "deprecated": "This package is deprecated as of August 2026. plotly.js v4 uses MapLibre for map traces — see https://github.com/maplibre/maplibre-gl-js.", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/@plotly/point-cluster": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", + "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "binary-search-bounds": "^2.0.4", + "clamp": "^1.0.1", + "defined": "^1.0.0", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.2", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/@plotly/regl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==", + "license": "MIT", + "peer": true + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -6026,9 +6258,9 @@ "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.3.tgz", - "integrity": "sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", @@ -6103,27 +6335,27 @@ "license": "BSD-3-Clause" }, "node_modules/@rspack/binding": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.12.tgz", - "integrity": "sha512-f4HHuLbvuld8Ba4iB/4ibse5XrKxFrgmM3S4P2AOKnPlekAFlBjmltCuaTL/W2ggYvILaVY+YcFXrEH1rrKeQA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.7.12", - "@rspack/binding-darwin-x64": "1.7.12", - "@rspack/binding-linux-arm64-gnu": "1.7.12", - "@rspack/binding-linux-arm64-musl": "1.7.12", - "@rspack/binding-linux-x64-gnu": "1.7.12", - "@rspack/binding-linux-x64-musl": "1.7.12", - "@rspack/binding-wasm32-wasi": "1.7.12", - "@rspack/binding-win32-arm64-msvc": "1.7.12", - "@rspack/binding-win32-ia32-msvc": "1.7.12", - "@rspack/binding-win32-x64-msvc": "1.7.12" + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.12.tgz", - "integrity": "sha512-rbFprJaJiqrmfy8SHth8EsoRS0wg4bXcucwj9NiMzpGFq14Opw8c04iQ6H9BECYzgmN0PKZ9rh41LdVvhdZe4A==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", "cpu": [ "arm64" ], @@ -6134,9 +6366,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.12.tgz", - "integrity": "sha512-jnOp+/UXOJa9xqUb8KXH03sysoO2e4Ij6tw6MqDdmdj8n/A8PQENRPUbW9AwXpPtVDJPus9r4fi7b3+6e4B8Hg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", "cpu": [ "x64" ], @@ -6147,9 +6379,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.12.tgz", - "integrity": "sha512-C8owWG+yvo7X0oVLIXetkoJhIFBP1LYNcAQqtgLmJnQLQDklGuP83dKC+zISGQWpjawHfZ1ER96vLgoTrxKZdw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", "cpu": [ "arm64" ], @@ -6163,9 +6395,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.12.tgz", - "integrity": "sha512-i51WWI64aRpsfSki6rN0aepPqXkVfS+vZM7+4bWDcmnhUmdMvhIPcYg0QRk3DtyJnu33jqNLM0WHY78k00NyfA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", "cpu": [ "arm64" ], @@ -6179,9 +6411,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.12.tgz", - "integrity": "sha512-MSos0FuPEefqo9V92ULd5hggKG29EkSNg1zDcypy0OkpsKh5pfjVxTLYFXgTcVyFoUQQbdG8zFBzYbwmJ8V4ew==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", "cpu": [ "x64" ], @@ -6195,9 +6427,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.12.tgz", - "integrity": "sha512-JcAMVKXOnjfpC3coWjCFPWD3Yl8RBw6a+IXQQ8mfRlHaHMIiOv8IfZqx15XRxMUn49CtP7Z0Na8iiAg2aKrcfw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", "cpu": [ "x64" ], @@ -6211,9 +6443,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.12.tgz", - "integrity": "sha512-n+ZqP6ZMc0nhOgvadg5VhEs9ojtbES80AcWeFnmGkbzIszvGSO63GKNiRkXtjJ9KFuRzytbbmsCqkUVH+Tywxg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", "cpu": [ "wasm32" ], @@ -6224,9 +6456,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.12.tgz", - "integrity": "sha512-8+h5fYDXYdmugbdfZ+D1y8IQ3rv2EhSfyGP7vBe+bjNyaMa4jWrpucmZbtxojUL1AzaeuHbvMdj9UO/gelk/+g==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", "cpu": [ "arm64" ], @@ -6237,9 +6469,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.12.tgz", - "integrity": "sha512-cDMGwTRSa2p9fNBVe1wTRkF2AEXZ9ARWW36QeC5CkLaI0Ezz8lvhF2+CSOPnhaQ1O1qtn0L0SF+lFnrY+I7xGQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", "cpu": [ "ia32" ], @@ -6250,9 +6482,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.12.tgz", - "integrity": "sha512-wIqFvlgFqrgUyj/6S/FJcvShnkZOmIeXTfqvheLY67MGq8qd8jb1YimQVKAIrmWB3yuJKUFACI3Ag1UBtEedEA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", "cpu": [ "x64" ], @@ -6263,13 +6495,13 @@ ] }, "node_modules/@rspack/core": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.12.tgz", - "integrity": "sha512-6CwFIHlhRmXfZoMj3v9MZ1SMTPBn+cHVXeMIeaGp5sufqinKsISbsqHu6ZMJu2wDSmZLdmQJX6zLxkhcAUlhkQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.22.0", - "@rspack/binding": "1.7.12", + "@rspack/binding": "1.7.11", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -6312,9 +6544,9 @@ "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { - "version": "0.27.12", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", - "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -6598,14 +6830,14 @@ } }, "node_modules/@swc/core": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz", - "integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.40.tgz", + "integrity": "sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.27" + "@swc/types": "^0.1.26" }, "engines": { "node": ">=10" @@ -6615,18 +6847,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.47", - "@swc/core-darwin-x64": "1.15.47", - "@swc/core-linux-arm-gnueabihf": "1.15.47", - "@swc/core-linux-arm64-gnu": "1.15.47", - "@swc/core-linux-arm64-musl": "1.15.47", - "@swc/core-linux-ppc64-gnu": "1.15.47", - "@swc/core-linux-s390x-gnu": "1.15.47", - "@swc/core-linux-x64-gnu": "1.15.47", - "@swc/core-linux-x64-musl": "1.15.47", - "@swc/core-win32-arm64-msvc": "1.15.47", - "@swc/core-win32-ia32-msvc": "1.15.47", - "@swc/core-win32-x64-msvc": "1.15.47" + "@swc/core-darwin-arm64": "1.15.40", + "@swc/core-darwin-x64": "1.15.40", + "@swc/core-linux-arm-gnueabihf": "1.15.40", + "@swc/core-linux-arm64-gnu": "1.15.40", + "@swc/core-linux-arm64-musl": "1.15.40", + "@swc/core-linux-ppc64-gnu": "1.15.40", + "@swc/core-linux-s390x-gnu": "1.15.40", + "@swc/core-linux-x64-gnu": "1.15.40", + "@swc/core-linux-x64-musl": "1.15.40", + "@swc/core-win32-arm64-msvc": "1.15.40", + "@swc/core-win32-ia32-msvc": "1.15.40", + "@swc/core-win32-x64-msvc": "1.15.40" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -6638,9 +6870,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz", - "integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.40.tgz", + "integrity": "sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==", "cpu": [ "arm64" ], @@ -6654,9 +6886,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz", - "integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.40.tgz", + "integrity": "sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==", "cpu": [ "x64" ], @@ -6670,9 +6902,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz", - "integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.40.tgz", + "integrity": "sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==", "cpu": [ "arm" ], @@ -6686,9 +6918,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz", - "integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.40.tgz", + "integrity": "sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==", "cpu": [ "arm64" ], @@ -6705,9 +6937,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz", - "integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.40.tgz", + "integrity": "sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==", "cpu": [ "arm64" ], @@ -6724,9 +6956,9 @@ } }, "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz", - "integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.40.tgz", + "integrity": "sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==", "cpu": [ "ppc64" ], @@ -6743,9 +6975,9 @@ } }, "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz", - "integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.40.tgz", + "integrity": "sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==", "cpu": [ "s390x" ], @@ -6762,9 +6994,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz", - "integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.40.tgz", + "integrity": "sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==", "cpu": [ "x64" ], @@ -6781,9 +7013,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz", - "integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.40.tgz", + "integrity": "sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==", "cpu": [ "x64" ], @@ -6800,9 +7032,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz", - "integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.40.tgz", + "integrity": "sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==", "cpu": [ "arm64" ], @@ -6816,9 +7048,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz", - "integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.40.tgz", + "integrity": "sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==", "cpu": [ "ia32" ], @@ -6832,9 +7064,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz", - "integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.40.tgz", + "integrity": "sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==", "cpu": [ "x64" ], @@ -6854,9 +7086,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/html": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html/-/html-1.15.47.tgz", - "integrity": "sha512-Olu/8OORvYB+43v2/85nHe1EA8WSvWp8D3kctEAput/o4F+EWCK0nr4yGTqvWB7Z+ODz0k+vnxpvHQYzsKP2LA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html/-/html-1.15.40.tgz", + "integrity": "sha512-YVWNrh3wZWH2oXz7uL+s1WZbFIsnAp9cCl/b+C7ufDJqhsOvbr0un9IOYZ/CxRIRdnHGfhVD199n8baD/kRQew==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -6865,24 +7097,24 @@ "node": ">=14" }, "optionalDependencies": { - "@swc/html-darwin-arm64": "1.15.47", - "@swc/html-darwin-x64": "1.15.47", - "@swc/html-linux-arm-gnueabihf": "1.15.47", - "@swc/html-linux-arm64-gnu": "1.15.47", - "@swc/html-linux-arm64-musl": "1.15.47", - "@swc/html-linux-ppc64-gnu": "1.15.47", - "@swc/html-linux-s390x-gnu": "1.15.47", - "@swc/html-linux-x64-gnu": "1.15.47", - "@swc/html-linux-x64-musl": "1.15.47", - "@swc/html-win32-arm64-msvc": "1.15.47", - "@swc/html-win32-ia32-msvc": "1.15.47", - "@swc/html-win32-x64-msvc": "1.15.47" + "@swc/html-darwin-arm64": "1.15.40", + "@swc/html-darwin-x64": "1.15.40", + "@swc/html-linux-arm-gnueabihf": "1.15.40", + "@swc/html-linux-arm64-gnu": "1.15.40", + "@swc/html-linux-arm64-musl": "1.15.40", + "@swc/html-linux-ppc64-gnu": "1.15.40", + "@swc/html-linux-s390x-gnu": "1.15.40", + "@swc/html-linux-x64-gnu": "1.15.40", + "@swc/html-linux-x64-musl": "1.15.40", + "@swc/html-win32-arm64-msvc": "1.15.40", + "@swc/html-win32-ia32-msvc": "1.15.40", + "@swc/html-win32-x64-msvc": "1.15.40" } }, "node_modules/@swc/html-darwin-arm64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.47.tgz", - "integrity": "sha512-Qe3FXNLO/k2WN7xmBP8SzBrtLvlIbyqa8cceUOI0opE4gk+myk5qIk022MiGJOgiF1B21/wMXgA08gYjQ2lP2Q==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.40.tgz", + "integrity": "sha512-A9oxSh60pMEsX/4VBpn3e6s8DfGWsHzAeG+Vd9mXgkTqt/ouX12owP6RyqfqK8v0WuEsBKkGY0+MbwLvlOG8NQ==", "cpu": [ "arm64" ], @@ -6896,9 +7128,9 @@ } }, "node_modules/@swc/html-darwin-x64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-1.15.47.tgz", - "integrity": "sha512-khCOiWmqlqi8yz+F/ePExhht/+3/cz1XzKV7raPKVynzd6sPxYtFQlNubj305s2soEXgkYYIH0zVVLwiMOVn6Q==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-1.15.40.tgz", + "integrity": "sha512-GZ5KxJ/1pqnpOAjaa9hnkSk3M1LHjc5ci5GCt5/llAgDKFLDHzydIflHXTOIaS4nRCtfVMmD0joKX+ZWruSkJw==", "cpu": [ "x64" ], @@ -6912,9 +7144,9 @@ } }, "node_modules/@swc/html-linux-arm-gnueabihf": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.15.47.tgz", - "integrity": "sha512-7VRqaOEQEFPHSbUcnobmI59WbFK9M35Sse8TFN3hHxOlK9fINJ9yN5FuE9XEeRQAk+PFdR6WrIcF1Xwx1Cpi8A==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.15.40.tgz", + "integrity": "sha512-Bbwtl0G6vYcWlDQmjeuyFx8YIvqi1StlQWjRNB1ZtvrRNL3JadFARhijBONiUIyTK9MgUbWtTV3QU69qzjNENQ==", "cpu": [ "arm" ], @@ -6928,9 +7160,9 @@ } }, "node_modules/@swc/html-linux-arm64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.47.tgz", - "integrity": "sha512-Ri9MmQqVRiEWuRfpkSTqz0bguvejXQcqQAkoW1Hke6+DColfzETcgNWa/Kw/ii5A/SS9Nb7acKaYdIw1vMBPwA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.40.tgz", + "integrity": "sha512-buu4fGyCIhkwmCetI4CfWOPn7cphJHwQ9ksK685hlL0R0PUaDCNdIxo+JAz0mK2JgPhoGqnKsVEmV6gLIL5GBw==", "cpu": [ "arm64" ], @@ -6947,9 +7179,9 @@ } }, "node_modules/@swc/html-linux-arm64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.15.47.tgz", - "integrity": "sha512-NyXRQiVBkeutgCwCxUUaFqZdDmpZONs7Zz3AZGoY35s9GwXF412Nt22fK/e7lO/sM6G/+S3rOom/0xTmUQSK6A==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.15.40.tgz", + "integrity": "sha512-BwWtpAGEHIP1QwKExWqBIjGpAHMahjT26ORZv3+TbwW4IuEl2QP5FrcYc30O8abCG5J1lWRl1vXKYDpzbIDz1A==", "cpu": [ "arm64" ], @@ -6966,9 +7198,9 @@ } }, "node_modules/@swc/html-linux-ppc64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-ppc64-gnu/-/html-linux-ppc64-gnu-1.15.47.tgz", - "integrity": "sha512-rQ+XLJHFzu0e4M5p1+8kF2FKzI7WO9KPPji87OuicHZVrDCEqg7/jSGu3hys9CjIQIYVfR+tAFuZz3Q1/jOoNA==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-ppc64-gnu/-/html-linux-ppc64-gnu-1.15.40.tgz", + "integrity": "sha512-wLtHgwmZu5K7PvuTROklgWJO6D+KwywpYR1geI8dSWX/AYnx/KCGVK9ncPzWVfnLXWhXbkgua3Ujdrfoxf+qSw==", "cpu": [ "ppc64" ], @@ -6985,9 +7217,9 @@ } }, "node_modules/@swc/html-linux-s390x-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-s390x-gnu/-/html-linux-s390x-gnu-1.15.47.tgz", - "integrity": "sha512-w6bitHrllrE3lqmf14cT3spmWhZHGts1O08O4adzxztSPto7O5GM3IerqZm/NtsqlxNsfbVHnhaNXxXWe/8Q+Q==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-s390x-gnu/-/html-linux-s390x-gnu-1.15.40.tgz", + "integrity": "sha512-WbWzQBCmvECZG6ep9D5SMMZTFCbFmRSCc7lPD3YhhaK16BNqr1AybvybZYOgxX9Ot5tq7gTWCgjFZXLDOn6Y/g==", "cpu": [ "s390x" ], @@ -7004,9 +7236,9 @@ } }, "node_modules/@swc/html-linux-x64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.47.tgz", - "integrity": "sha512-FTA7E29gcyadd71prg8sJUVacYrIhAXS8L7p48yCfgcNOKquofN1TDOrHVOyYMoxplL3FUwwbN+AZxWO7QfWPQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.40.tgz", + "integrity": "sha512-i+/JqL5j9mTGMcVshWLMzciqyE3Np+gN5+UqMyO1D5zSmniJD5MHRlGXCtLaWx/MIKX0Q4Xkre33o56fmxp+uA==", "cpu": [ "x64" ], @@ -7023,9 +7255,9 @@ } }, "node_modules/@swc/html-linux-x64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.15.47.tgz", - "integrity": "sha512-g+K1GKUrj+S9o8Qsgii2g7ooMzZ750R4IAqH5CVElIA5FTMAx7KGnu9ga6aEnRwwLYxY3s1k/nN+ls0NEk240g==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.15.40.tgz", + "integrity": "sha512-mroZnb5omFc4iE01UsJgta+Nm0sIFWpGfTPk+BHfH165MZAM4wNndeczX5RpGZbQSF1nNpCoNgqJyT7l3hITMg==", "cpu": [ "x64" ], @@ -7042,9 +7274,9 @@ } }, "node_modules/@swc/html-win32-arm64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.15.47.tgz", - "integrity": "sha512-5Iw3i00JdTySi+ccc2CM5bxY+8TZivQmcTqUC6mUdAY0/KYBgSe1/L294UJQ4OTLQqNDOYXY9jdb070zZUX7jg==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.15.40.tgz", + "integrity": "sha512-qg1LXRrsY9FXy0S7vouSF0kkn1vdkTD//FW66iuezH7HMm5/DJGwEj7oc1zTKPWU0HnwOINOUbl6rUHrRuXHAQ==", "cpu": [ "arm64" ], @@ -7058,9 +7290,9 @@ } }, "node_modules/@swc/html-win32-ia32-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.15.47.tgz", - "integrity": "sha512-YkKd0hbIOeuFC1Sg7uGKkU2JhL+c9vAJlT6P0nRbWCAL71n01IPbdtbW6PmvgVmI7pxRYucXpr4pg839nX5+9Q==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.15.40.tgz", + "integrity": "sha512-5NwMmgt9A70LQzcYOl4OiIJk5AhsGP69fNRfkmXXop+iIcAGUmYy+d6F2/Gc0u05j9G0R04NPWcHBQrHQhr0Gw==", "cpu": [ "ia32" ], @@ -7074,9 +7306,9 @@ } }, "node_modules/@swc/html-win32-x64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.15.47.tgz", - "integrity": "sha512-w9Ug+VB9hlHT4hTWIJSB40AdF+qs5w07CYq/+ef1vQRjT5naN6/SKuXmr9/CKLn3T7A9z3lRMPKE4+lmtUkBOQ==", + "version": "1.15.40", + "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.15.40.tgz", + "integrity": "sha512-WUNZqCZ+8WY1pr8t3X3fq4gI5+FL/tCCzlrJ2lLn0s+TyA2SLm/RPfXxQIr94EnjJWcIV21G//6/uXeBN8cPzw==", "cpu": [ "x64" ], @@ -7090,9 +7322,9 @@ } }, "node_modules/@swc/types": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", - "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -7110,6 +7342,83 @@ "node": ">=14.16" } }, + "node_modules/@turf/area": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.3.5.tgz", + "integrity": "sha512-sSn80wPT7XfBIDN3vurCPxhk9W4U8ozS/XImSqeLN8qveTICOxzZkhsGDMp0CuncaN+plWut4a2TdNM7mzZB6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.5", + "@turf/meta": "7.3.5", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.5.tgz", + "integrity": "sha512-oG1ya/HtBjAIg4TimbWx+nOYPbY0bCvt82Bq8tm6sBw3qqtbOyRSfDz79Sq90TnH7DXJprJ1qnVGKNtZ6jemfw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.5", + "@turf/meta": "7.3.5", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.3.5.tgz", + "integrity": "sha512-hkWaqwGFdOn6Tf0EWfn2yn1XZ1FWE1h2C5ZWstDMu/FxYO5DB+YjlmOFPl4K6SmSOEgdV07eK2vDCyPeTHqKGA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.5", + "@turf/meta": "7.3.5", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.5.tgz", + "integrity": "sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.5.tgz", + "integrity": "sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@turf/helpers": "7.3.5", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", @@ -7195,9 +7504,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", - "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -7206,6 +7515,23 @@ "@types/send": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/gtag.js": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.20.tgz", @@ -7213,9 +7539,9 @@ "license": "MIT" }, "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -7284,6 +7610,25 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", @@ -7294,9 +7639,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", - "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "license": "MIT" }, "node_modules/@types/mime": { @@ -7312,14 +7657,21 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", - "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", + "version": "25.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", + "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", "license": "MIT", "dependencies": { - "undici-types": "~8.3.0" + "undici-types": ">=7.24.0 <7.24.7" } }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT", + "peer": true + }, "node_modules/@types/prismjs": { "version": "1.26.6", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", @@ -7339,14 +7691,24 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", - "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", + "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" } }, + "node_modules/@types/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", @@ -7442,6 +7804,16 @@ "@types/node": "*" } }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -7473,9 +7845,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", - "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", "license": "ISC" }, "node_modules/@webassemblyjs/ast": { @@ -7636,6 +8008,13 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "license": "Apache-2.0" }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", + "license": "MIT", + "peer": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -7680,9 +8059,9 @@ } }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -7691,6 +8070,18 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -7789,34 +8180,34 @@ } }, "node_modules/algoliasearch": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.56.0.tgz", - "integrity": "sha512-PrqppUmhT4ENdas2pH9caE7efUcxy6EcSFhWzosiVuQBzu2tQ5yLTI6jwomT/1cuBnivzGfxiJCqDNN9FRRh+Q==", - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.22.0", - "@algolia/client-abtesting": "5.56.0", - "@algolia/client-analytics": "5.56.0", - "@algolia/client-common": "5.56.0", - "@algolia/client-insights": "5.56.0", - "@algolia/client-personalization": "5.56.0", - "@algolia/client-query-suggestions": "5.56.0", - "@algolia/client-search": "5.56.0", - "@algolia/ingestion": "1.56.0", - "@algolia/monitoring": "1.56.0", - "@algolia/recommend": "5.56.0", - "@algolia/requester-browser-xhr": "5.56.0", - "@algolia/requester-fetch": "5.56.0", - "@algolia/requester-node-http": "5.56.0" + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.53.0.tgz", + "integrity": "sha512-OGW1q6b91CRSSeiOnM8LxuR5NYJ2esvw66jUZ4IIvdv+ItNkx3pwLuyR+jaCdbGee4ov5WgUnyPryyh11xvByQ==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.19.0", + "@algolia/client-abtesting": "5.53.0", + "@algolia/client-analytics": "5.53.0", + "@algolia/client-common": "5.53.0", + "@algolia/client-insights": "5.53.0", + "@algolia/client-personalization": "5.53.0", + "@algolia/client-query-suggestions": "5.53.0", + "@algolia/client-search": "5.53.0", + "@algolia/ingestion": "1.53.0", + "@algolia/monitoring": "1.53.0", + "@algolia/recommend": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.29.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.2.tgz", - "integrity": "sha512-SaV+rZM3drExb0punEYYjT+sNcH74YFwN8ocjya7IDOyQvKWeQpEaSMVG3+IGTVos+feuatj7ljQ4BXlXdUp3w==", + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.1.tgz", + "integrity": "sha512-6ck2YFudF2Pje7szQoPBiRFTGfd+1I+0I/WfLPGn0bj1kvrFoOQmNyedNiDxTk3/r4IfSLDYk+RA4G7u8H6+yA==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -7924,12 +8315,46 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, + "node_modules/array-bounds": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==", + "license": "MIT", + "peer": true + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/array-normalize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", + "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.0" + } + }, + "node_modules/array-range": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==", + "license": "MIT", + "peer": true + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -7963,9 +8388,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", - "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "funding": [ { "type": "opencollective", @@ -7982,8 +8407,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.6", - "caniuse-lite": "^1.0.30001806", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -8088,10 +8513,20 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/baseline-browser-mapping": { - "version": "2.11.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz", - "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==", + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -8127,6 +8562,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/binary-search-bounds": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", + "license": "MIT", + "peer": true + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", + "license": "MIT", + "peer": true + }, + "node_modules/bitmap-sdf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", + "license": "MIT", + "peer": true + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/body-parser": { "version": "1.20.6", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", @@ -8176,9 +8643,9 @@ "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz", - "integrity": "sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.0.tgz", + "integrity": "sha512-fGQtj1qdR9vIKjFiWPQd52qIqwjaYqhcI40JEiDuvlZ86E7ZBPBwY9fPgHy9r2rYGIjiRfctNPYz6OQU73ww2w==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -8243,9 +8710,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", - "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -8262,10 +8729,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.44", - "caniuse-lite": "^1.0.30001806", - "electron-to-chromium": "^1.5.393", - "node-releases": "^2.0.51", + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -8432,9 +8899,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001806", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", - "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "funding": [ { "type": "opencollective", @@ -8612,6 +9079,13 @@ "node": ">=8" } }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==", + "license": "MIT", + "peer": true + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -8722,7 +9196,27 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/color-convert": { + "node_modules/color-alpha": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.1.3.tgz", + "integrity": "sha512-krPYBO1RSO5LH4AGb/b6z70O1Ip2o0F0+0cVFN5FN99jfQtZFT08rQyg+9oOBNJYAn3SRwJIFC8jUEOKz7PisA==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.4.1" + } + }, + "node_modules/color-alpha/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -8734,12 +9228,93 @@ "node": ">=7.0.0" } }, + "node_modules/color-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", + "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1" + } + }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-normalize": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "license": "MIT", + "peer": true, + "dependencies": { + "clamp": "^1.0.1", + "color-rgba": "^2.1.1", + "dtype": "^2.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-normalize/node_modules/color-rgba": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", + "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/color-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.1.2.tgz", + "integrity": "sha512-z0f1xKxh4za/RSprsmxNkFcyO2o/4VJ2QxiiRRIjfqAsqOXys+BvpOCINNAKOX9AQ/alpS03Wc0WMtEmtLmHzw==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "^2.0.0" + } + }, + "node_modules/color-parse/node_modules/color-name": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz", + "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.2.tgz", + "integrity": "sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA==", + "license": "Unlicense", + "peer": true + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -8849,12 +9424,48 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -9082,6 +9693,13 @@ } } }, + "node_modules/country-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==", + "license": "MIT", + "peer": true + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -9149,9 +9767,9 @@ } }, "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -9173,6 +9791,59 @@ "postcss": "^8.0.9" } }, + "node_modules/css-font": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", + "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "pick-by-alias": "^1.2.0", + "string-split-by": "^1.0.0", + "unquote": "^1.1.0" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", + "license": "MIT", + "peer": true + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", + "license": "MIT", + "peer": true + }, + "node_modules/css-global-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==", + "license": "MIT", + "peer": true + }, "node_modules/css-has-pseudo": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", @@ -9223,9 +9894,9 @@ } }, "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -9352,6 +10023,13 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", + "license": "MIT", + "peer": true + }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -9377,6 +10055,13 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT", + "peer": true + }, "node_modules/cssdb": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", @@ -9541,6 +10226,176 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "peer": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-geo-projection": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", + "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "commander": "2", + "d3-array": "1", + "d3-geo": "^1.12.0", + "resolve": "^1.1.10" + }, + "bin": { + "geo2svg": "bin/geo2svg", + "geograticule": "bin/geograticule", + "geoproject": "bin/geoproject", + "geoquantize": "bin/geoquantize", + "geostitch": "bin/geostitch" + } + }, + "node_modules/d3-geo-projection/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, + "node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "peer": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -9702,6 +10557,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -9730,6 +10595,13 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-kerning": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==", + "license": "MIT", + "peer": true + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -9897,6 +10769,27 @@ "node": ">=8" } }, + "node_modules/draw-svg-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", + "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "~0.1.1", + "normalize-svg-path": "~0.1.0" + } + }, + "node_modules/dtype": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -9911,12 +10804,39 @@ "node": ">= 0.4" } }, + "node_modules/dup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==", + "license": "MIT", + "peer": true + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "license": "MIT" }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC", + "peer": true + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -9930,11 +10850,21 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.401", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.401.tgz", - "integrity": "sha512-H6ViHN68nGYlChEvlIU67fn8O2/tpbWQPwck98yaJmh+08LSvHiydzDQ6oXNccLU3kNRVIRS9A4mA7CG+i6fLQ==", + "version": "1.5.364", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz", + "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==", "license": "ISC" }, + "node_modules/elementary-circuits-directed-graph": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", + "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "strongly-connected-components": "^1.0.1" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -9975,10 +10905,20 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", + "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -10028,9 +10968,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -10045,19 +10985,75 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "license": "MIT" }, - "node_modules/esast-util-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "license": "MIT", + "peer": true, "dependencies": { - "@types/estree-jsx": "^1.0.0", + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" @@ -10084,9 +11080,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -10097,32 +11093,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.1", - "@esbuild/android-arm": "0.28.1", - "@esbuild/android-arm64": "0.28.1", - "@esbuild/android-x64": "0.28.1", - "@esbuild/darwin-arm64": "0.28.1", - "@esbuild/darwin-x64": "0.28.1", - "@esbuild/freebsd-arm64": "0.28.1", - "@esbuild/freebsd-x64": "0.28.1", - "@esbuild/linux-arm": "0.28.1", - "@esbuild/linux-arm64": "0.28.1", - "@esbuild/linux-ia32": "0.28.1", - "@esbuild/linux-loong64": "0.28.1", - "@esbuild/linux-mips64el": "0.28.1", - "@esbuild/linux-ppc64": "0.28.1", - "@esbuild/linux-riscv64": "0.28.1", - "@esbuild/linux-s390x": "0.28.1", - "@esbuild/linux-x64": "0.28.1", - "@esbuild/netbsd-arm64": "0.28.1", - "@esbuild/netbsd-x64": "0.28.1", - "@esbuild/openbsd-arm64": "0.28.1", - "@esbuild/openbsd-x64": "0.28.1", - "@esbuild/openharmony-arm64": "0.28.1", - "@esbuild/sunos-x64": "0.28.1", - "@esbuild/win32-arm64": "0.28.1", - "@esbuild/win32-ia32": "0.28.1", - "@esbuild/win32-x64": "0.28.1" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "node_modules/escalade": { @@ -10164,6 +11160,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -10177,6 +11206,31 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -10202,7 +11256,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -10211,15 +11265,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/estree-util-attach-comments": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", @@ -10365,6 +11410,17 @@ "node": ">= 0.8" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -10491,6 +11547,36 @@ "node": ">= 0.6" } }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "peer": true, + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -10509,6 +11595,40 @@ "node": ">=0.10.0" } }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT", + "peer": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -10531,6 +11651,16 @@ "node": ">=8.6.0" } }, + "node_modules/fast-isnumeric": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", + "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-string-blank": "^1.0.1" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -10760,6 +11890,16 @@ "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", "license": "Apache-2.0" }, + "node_modules/flatten-vertex-data": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", + "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "license": "MIT", + "peer": true, + "dependencies": { + "dtype": "^2.0.0" + } + }, "node_modules/follow-redirects": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", @@ -10780,6 +11920,26 @@ } } }, + "node_modules/font-atlas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", + "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.0.0" + } + }, + "node_modules/font-measure": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", + "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "css-font": "^1.2.0" + } + }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -10828,10 +11988,21 @@ "node": ">= 0.6" } }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "node_modules/fs-extra": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", - "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -10874,6 +12045,20 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC", + "peer": true + }, + "node_modules/get-canvas-context": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==", + "license": "MIT", + "peer": true + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -10935,6 +12120,62 @@ "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "license": "ISC" }, + "node_modules/gl-mat4": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==", + "license": "Zlib", + "peer": true + }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT", + "peer": true + }, + "node_modules/gl-text": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz", + "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.2", + "color-normalize": "^1.5.0", + "css-font": "^1.2.0", + "detect-kerning": "^2.1.2", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "font-atlas": "^2.1.0", + "font-measure": "^1.2.2", + "gl-util": "^3.1.2", + "is-plain-obj": "^1.1.0", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "parse-unit": "^1.0.1", + "pick-by-alias": "^1.2.0", + "regl": "^2.0.0", + "to-px": "^1.0.1", + "typedarray-pool": "^1.1.0" + } + }, + "node_modules/gl-util": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", + "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1", + "is-firefox": "^1.0.3", + "is-plain-obj": "^1.1.0", + "number-is-integer": "^1.0.1", + "object-assign": "^4.1.0", + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -10963,72 +12204,343 @@ "tslib": "2" } }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "license": "BSD-3-Clause", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "license": "BSD-3-Clause", + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glsl-inject-defines": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", + "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-inject-block": "^1.0.0", + "glsl-token-string": "^1.0.1", + "glsl-tokenizer": "^2.0.2" + } + }, + "node_modules/glsl-resolve": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", + "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "license": "MIT", + "peer": true, + "dependencies": { + "resolve": "^0.6.1", + "xtend": "^2.1.2" + } + }, + "node_modules/glsl-resolve/node_modules/resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-resolve/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/glsl-token-assignments": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-defines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", + "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-tokenizer": "^2.0.0" + } + }, + "node_modules/glsl-token-depth": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-descope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", + "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "license": "MIT", + "peer": true, + "dependencies": { + "glsl-token-assignments": "^2.0.0", + "glsl-token-depth": "^1.1.0", + "glsl-token-properties": "^1.0.0", + "glsl-token-scope": "^1.1.0" + } + }, + "node_modules/glsl-token-inject-block": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-properties": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-token-whitespace-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "license": "MIT", + "peer": true, "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" + "through2": "^0.6.3" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "node_modules/glsl-tokenizer/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "license": "MIT", + "peer": true, "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/glsl-tokenizer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT", + "peer": true + }, + "node_modules/glsl-tokenizer/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "license": "MIT", + "peer": true, "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/glslify": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", + "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^2.2.1", + "concat-stream": "^1.5.2", + "duplexify": "^3.4.5", + "falafel": "^2.1.0", + "from2": "^2.3.0", + "glsl-resolve": "0.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glslify-bundle": "^5.0.0", + "glslify-deps": "^1.2.5", + "minimist": "^1.2.5", + "resolve": "^1.1.5", + "stack-trace": "0.0.9", + "static-eval": "^2.0.5", + "through2": "^2.0.1", + "xtend": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "glslify": "bin.js" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/glslify-bundle": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", + "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", "license": "MIT", + "peer": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "glsl-inject-defines": "^1.0.1", + "glsl-token-defines": "^1.0.0", + "glsl-token-depth": "^1.1.1", + "glsl-token-descope": "^1.0.2", + "glsl-token-scope": "^1.1.1", + "glsl-token-string": "^1.0.1", + "glsl-token-whitespace-trim": "^1.0.0", + "glsl-tokenizer": "^2.0.2", + "murmurhash-js": "^1.0.0", + "shallow-copy": "0.0.1" + } + }, + "node_modules/glslify-deps": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", + "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "license": "ISC", + "peer": true, + "dependencies": { + "@choojs/findup": "^0.2.0", + "events": "^3.2.0", + "glsl-resolve": "0.0.1", + "glsl-tokenizer": "^2.0.0", + "graceful-fs": "^4.1.2", + "inherits": "^2.0.1", + "map-limit": "0.0.1", + "resolve": "^1.0.0" } }, "node_modules/gopd": { @@ -11129,6 +12641,13 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, + "node_modules/grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC", + "peer": true + }, "node_modules/guid-typescript": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", @@ -11165,6 +12684,26 @@ "node": ">=8" } }, + "node_modules/has-hover": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", + "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, + "node_modules/has-passive-events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", + "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-browser": "^2.0.1" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -11419,42 +12958,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -11514,9 +13017,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz", - "integrity": "sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==", + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -11533,7 +13036,7 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x || 2.x", + "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "peerDependenciesMeta": { @@ -11737,6 +13240,27 @@ "postcss": "^8.1.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -11817,12 +13341,13 @@ "license": "ISC" }, "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "license": "ISC", + "peer": true, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/inline-style-parser": { @@ -11841,9 +13366,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", - "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "license": "MIT", "engines": { "node": ">= 10" @@ -11891,6 +13416,13 @@ "node": ">=8" } }, + "node_modules/is-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==", + "license": "MIT", + "peer": true + }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -11961,6 +13493,29 @@ "node": ">=0.10.0" } }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-firefox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", + "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -12041,6 +13596,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-mobile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==", + "license": "MIT", + "peer": true + }, "node_modules/is-network-error": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", @@ -12093,15 +13655,13 @@ } }, "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "license": "MIT", + "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/is-plain-object": { @@ -12137,6 +13697,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string-blank": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", + "license": "MIT", + "peer": true + }, + "node_modules/is-svg-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==", + "license": "MIT", + "peer": true + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -12312,6 +13886,13 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT", + "peer": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -12342,6 +13923,13 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/kdbush": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.1.0.tgz", + "integrity": "sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==", + "license": "ISC", + "peer": true + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -12404,9 +13992,9 @@ } }, "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -12419,23 +14007,23 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" } }, "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ "arm64" ], @@ -12453,9 +14041,9 @@ } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" ], @@ -12473,9 +14061,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" ], @@ -12493,9 +14081,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" ], @@ -12513,9 +14101,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" ], @@ -12533,9 +14121,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], @@ -12556,9 +14144,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], @@ -12579,9 +14167,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], @@ -12602,9 +14190,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], @@ -12625,9 +14213,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" ], @@ -12645,9 +14233,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" ], @@ -12682,6 +14270,19 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, + "node_modules/loader-runner": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -12729,6 +14330,13 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT", + "peer": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -12790,9 +14398,164 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "license": "ISC", "dependencies": { - "yallist": "^3.0.2" + "yallist": "^3.0.2" + } + }, + "node_modules/map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/map-limit/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/mapbox-gl": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz", + "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==", + "license": "SEE LICENSE IN LICENSE.txt", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.1.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.2.0.tgz", + "integrity": "sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.2.3.tgz", + "integrity": "sha512-vnS4AVwp1KHAF13i1vp1/2D5evWy3k5u/iW/B81QVsUZtV8cv2tU0b2VNFlqvh4kYwrFMDdjPCfAmfyJW9y14Q==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/geojson-vt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.3.tgz", + "integrity": "sha512-jR1MwkLaZGa8Zftct9ZFruyWFrdl9ZyD2OliXNy9Qq5bBPeg5wHVpBQF9p5GjnicSDQqvBVpysxTPKmWdsfWMA==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/potpack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "kdbush": "^4.0.2" } }, + "node_modules/maplibre-gl/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC", + "peer": true + }, "node_modules/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -12836,6 +14599,16 @@ "node": ">= 0.4" } }, + "node_modules/math-log2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", + "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mdast-util-directive": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", @@ -13254,19 +15027,19 @@ } }, "node_modules/memfs": { - "version": "4.67.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.67.0.tgz", - "integrity": "sha512-yuwPWDAs2kfwpQFuFNQI2OkiJ4ZqkGvSFq2jbgC9pFPfgh1N1lPxJaBj5rHp9R1wfJlSzUQkFnSw6WYGPwBbRg==", + "version": "4.57.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.3.tgz", + "integrity": "sha512-dlvqataP1zUOlfj6pv9wgCSC5pRIooNntXgdLfR7FWlcKi1p8fMfJADtHp/+8Dhu5JFvMHNh7L0QVcuaaBKqqA==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.67.0", - "@jsonjoy.com/fs-fsa": "4.67.0", - "@jsonjoy.com/fs-node": "4.67.0", - "@jsonjoy.com/fs-node-builtins": "4.67.0", - "@jsonjoy.com/fs-node-to-fsa": "4.67.0", - "@jsonjoy.com/fs-node-utils": "4.67.0", - "@jsonjoy.com/fs-print": "4.67.0", - "@jsonjoy.com/fs-snapshot": "4.67.0", + "@jsonjoy.com/fs-core": "4.57.3", + "@jsonjoy.com/fs-fsa": "4.57.3", + "@jsonjoy.com/fs-node": "4.57.3", + "@jsonjoy.com/fs-node-builtins": "4.57.3", + "@jsonjoy.com/fs-node-to-fsa": "4.57.3", + "@jsonjoy.com/fs-node-utils": "4.57.3", + "@jsonjoy.com/fs-print": "4.57.3", + "@jsonjoy.com/fs-snapshot": "4.57.3", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -13277,6 +15050,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/merge-descriptors": { @@ -15210,94 +16986,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimizer-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "html-minifier-terser": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/mouse-event-offset": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } + "peer": true }, "node_modules/mrmime": { "version": "2.0.1", @@ -15327,10 +17021,17 @@ "multicast-dns": "cli.js" } }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT", + "peer": true + }, "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", @@ -15345,6 +17046,41 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "license": "MIT", + "peer": true + }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -15360,6 +17096,13 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC", + "peer": true + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -15386,9 +17129,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.52.tgz", - "integrity": "sha512-MRlTqhAfoMx/4mhEbPo3Hi02g9LJZaJkka69V6h67Cb1gjrAG0jsTE4CZX1eptNx+VCAwJmfpnDIF4P0Nh1A7A==", + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", "license": "MIT", "engines": { "node": ">=18" @@ -15403,6 +17146,13 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-svg-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==", + "license": "MIT", + "peer": true + }, "node_modules/normalize-url": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", @@ -15514,6 +17264,19 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/number-is-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", + "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-finite": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -15591,6 +17354,16 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -15823,6 +17596,13 @@ "node": ">=6" } }, + "node_modules/parenthesis": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", + "license": "MIT", + "peer": true + }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", @@ -15872,6 +17652,30 @@ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", "license": "ISC" }, + "node_modules/parse-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", + "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "license": "MIT", + "peer": true, + "dependencies": { + "pick-by-alias": "^1.2.0" + } + }, + "node_modules/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", + "license": "MIT", + "peer": true + }, + "node_modules/parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==", + "license": "MIT", + "peer": true + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -15976,6 +17780,34 @@ "node": ">=8" } }, + "node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "peer": true + }, + "node_modules/pick-by-alias": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==", + "license": "MIT", + "peer": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -16032,10 +17864,85 @@ "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "license": "MIT" }, + "node_modules/plotly.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-3.7.0.tgz", + "integrity": "sha512-r17/w3Ob/E+A1vqN382PV/6Dz+IAxAsxNCpWcnGfGFLqE0M6vPUa+ve7HPhivrl9LMicZg2Fy0U5GbpauHo32A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/d3": "3.8.2", + "@plotly/d3-sankey": "0.7.2", + "@plotly/d3-sankey-circular": "0.33.1", + "@plotly/mapbox-gl": "1.13.4", + "@plotly/regl": "^2.1.2", + "@turf/area": "^7.1.0", + "@turf/bbox": "^7.1.0", + "@turf/centroid": "^7.1.0", + "base64-arraybuffer": "^1.0.2", + "color-normalize": "1.5.0", + "color-rgba": "3.0.0", + "country-regex": "^1.1.0", + "d3-force": "^1.2.1", + "d3-format": "^1.4.5", + "d3-geo": "^1.12.1", + "d3-geo-projection": "^2.9.0", + "d3-hierarchy": "^1.1.9", + "d3-interpolate": "^3.0.1", + "d3-time": "^1.1.0", + "d3-time-format": "^2.2.3", + "fast-isnumeric": "^1.1.4", + "gl-mat4": "^1.2.0", + "gl-text": "^1.4.0", + "has-hover": "^1.0.1", + "has-passive-events": "^1.0.0", + "is-mobile": "^4.0.0", + "maplibre-gl": "^4.7.1", + "mouse-event-offset": "^3.0.2", + "native-promise-only": "^0.8.1", + "parse-svg-path": "^0.1.2", + "point-in-polygon": "^1.1.0", + "polybooljs": "^1.2.2", + "probe-image-size": "^7.2.3", + "regl-error2d": "^2.0.12", + "regl-line2d": "^3.1.3", + "regl-scatter2d": "^3.3.1", + "regl-splom": "^1.0.14", + "strongly-connected-components": "^1.0.1", + "svg-path-sdf": "^1.1.3", + "tinycolor2": "^1.4.2", + "topojson-client": "^3.1.0", + "webgl-context": "^2.2.0", + "world-calendars": "^1.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/plotly.js-dist-min": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/plotly.js-dist-min/-/plotly.js-dist-min-3.7.0.tgz", + "integrity": "sha512-IRWNnBJZmKss3URDnicBK2nvt/VTSi/MD1GnUscAYFjwSuN6g/CTde5R1UC0RYtblehj8rkT4BL8r05e/c8j5Q==", + "license": "MIT" + }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT", + "peer": true + }, + "node_modules/polybooljs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz", + "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==", + "license": "MIT", + "peer": true + }, "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "funding": [ { "type": "opencollective", @@ -16052,7 +17959,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.16", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -16086,9 +17993,9 @@ } }, "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16330,9 +18237,9 @@ } }, "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16368,9 +18275,9 @@ } }, "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16496,9 +18403,9 @@ } }, "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16534,9 +18441,9 @@ } }, "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16823,9 +18730,9 @@ } }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16851,9 +18758,9 @@ } }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16950,9 +18857,9 @@ } }, "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -17313,9 +19220,9 @@ } }, "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -17406,9 +19313,9 @@ } }, "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", - "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -17419,9 +19326,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -17495,6 +19402,13 @@ "postcss": "^8.4.31" } }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC", + "peer": true + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -17536,6 +19450,28 @@ "node": ">=6" } }, + "node_modules/probe-image-size": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.3.0.tgz", + "integrity": "sha512-7CaDeBwiAbh6ohXsvLbAZhO7wzsZAmaevfxe39qvCwRh8LyaZfDlBGGLU1CCTgrTLtCOdwBBhjOrIHaIIimHfQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -17567,9 +19503,9 @@ } }, "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", "funding": { "type": "github", @@ -17605,6 +19541,13 @@ "node": ">=12.0.0" } }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz", + "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", + "license": "MIT", + "peer": true + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -17670,13 +19613,12 @@ } }, "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -17717,6 +19659,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC", + "peer": true + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "peer": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -17790,24 +19749,24 @@ } }, "node_modules/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", - "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", - "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.8" + "react": "^19.2.6" } }, "node_modules/react-fast-compare": { @@ -17881,6 +19840,19 @@ "webpack": ">=4.41.1 || 5.x" } }, + "node_modules/react-plotly.js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-4.1.0.tgz", + "integrity": "sha512-+CJA9xOY4UjH1RnRqQnpBGoFSzsrB/e7CR4k8AMQ20RkBlXjqkiIVLdIA5N1hinEVdoTdhaS6krKEARyfSixXg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "plotly.js": ">=3.0.0", + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", @@ -17933,19 +19905,26 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -18100,9 +20079,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", - "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -18111,6 +20090,85 @@ "regjsparser": "bin/parser" } }, + "node_modules/regl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.1.tgz", + "integrity": "sha512-+IOGrxl3FZ8ZM9ixCWQZzFRiRn7Rzn9bu3iFHwg/yz4tlOUQgbO4PHLgG+1ZT60zcIV8tief6Qrmyl8qcoJP0g==", + "license": "MIT", + "peer": true + }, + "node_modules/regl-error2d": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", + "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-line2d": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz", + "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-find-index": "^1.0.2", + "array-normalize": "^1.1.4", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", + "object-assign": "^4.1.1", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0" + } + }, + "node_modules/regl-scatter2d": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.4.0.tgz", + "integrity": "sha512-DavKQlHsI+iHZuLgOL+yGkg+sPd94CS+7FCBWkcQ6s/TbaNfUsF9eN591fjjSWIoKrGNfb/SEGhsXR5lXjqZ2w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@plotly/point-cluster": "^3.1.9", + "array-bounds": "^1.0.1", + "color-id": "^1.1.0", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", + "glslify": "^7.0.0", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "to-float32": "^1.1.0", + "update-diff": "^1.1.0" + } + }, + "node_modules/regl-splom": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", + "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "license": "MIT", + "peer": true, + "dependencies": { + "array-bounds": "^1.0.1", + "array-range": "^1.0.1", + "color-alpha": "^1.0.4", + "flatten-vertex-data": "^1.0.2", + "parse-rect": "^1.2.0", + "pick-by-alias": "^1.2.0", + "raf": "^3.4.1", + "regl-scatter2d": "^3.2.3" + } + }, "node_modules/rehype-raw": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", @@ -18443,6 +20501,16 @@ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", "license": "MIT" }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -18547,24 +20615,17 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/safer-buffer": { @@ -18574,9 +20635,9 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" @@ -18653,9 +20714,9 @@ } }, "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18932,6 +20993,13 @@ "node": ">=8" } }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "license": "MIT", + "peer": true + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -19016,14 +21084,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -19266,6 +21334,20 @@ "wbuf": "^1.7.3" } }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -19284,6 +21366,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "escodegen": "^2.1.0" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -19299,13 +21400,57 @@ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "license": "MIT" }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT", + "peer": true + }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-split-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", + "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "~5.2.0" + "parenthesis": "^3.1.5" } }, "node_modules/string-width": { @@ -19422,6 +21567,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strongly-connected-components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==", + "license": "MIT", + "peer": true + }, "node_modules/style-to-js": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", @@ -19456,6 +21608,23 @@ "postcss": "^8.4.31" } }, + "node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", + "peer": true, + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/supercluster/node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC", + "peer": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19480,12 +21649,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", + "license": "ISC", + "peer": true + }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "license": "MIT" }, + "node_modules/svg-path-bounds": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", + "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "abs-svg-path": "^0.1.1", + "is-svg-path": "^1.0.1", + "normalize-svg-path": "^1.0.0", + "parse-svg-path": "^0.1.2" + } + }, + "node_modules/svg-path-bounds/node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "license": "MIT", + "peer": true, + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/svg-path-sdf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", + "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "bitmap-sdf": "^1.0.0", + "draw-svg-path": "^1.0.0", + "is-svg-path": "^1.0.1", + "parse-svg-path": "^0.1.2", + "svg-path-bounds": "^1.0.1" + } + }, "node_modules/svgo": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", @@ -19547,9 +21760,9 @@ } }, "node_modules/terser": { - "version": "5.49.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.49.1.tgz", - "integrity": "sha512-7A2xlQ5EnGT8KPA92dUh6RbRYTVw8hEaEN9L1K68l4UOXFuV511NnAqObGoRqGOQofQcMypisu1s3xawCEHrvA==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -19660,9 +21873,9 @@ "license": "MIT" }, "node_modules/thingies": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", - "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "license": "MIT", "engines": { "node": ">=10.18" @@ -19675,6 +21888,17 @@ "tslib": "^2" } }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -19693,6 +21917,13 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT", + "peer": true + }, "node_modules/tinypool": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", @@ -19702,6 +21933,30 @@ "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC", + "peer": true + }, + "node_modules/to-float32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==", + "license": "MIT", + "peer": true + }, + "node_modules/to-px": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.1.0.tgz", + "integrity": "sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==", + "license": "MIT", + "peer": true, + "dependencies": { + "parse-unit": "^1.0.1" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19723,6 +21978,28 @@ "node": ">=0.6" } }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", + "peer": true, + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, + "node_modules/topojson-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -19775,9 +22052,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.23.5", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.5.tgz", - "integrity": "sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==", + "version": "4.23.12", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz", + "integrity": "sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19811,6 +22088,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC", + "peer": true + }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -19857,6 +22141,24 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT", + "peer": true + }, + "node_modules/typedarray-pool": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", + "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "bit-twiddle": "^1.0.0", + "dup": "^1.0.0" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -19881,9 +22183,9 @@ } }, "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -19954,6 +22256,18 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -20068,6 +22382,13 @@ "node": ">= 0.8" } }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT", + "peer": true + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -20098,6 +22419,13 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==", + "license": "MIT", + "peer": true + }, "node_modules/update-notifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", @@ -20375,12 +22703,25 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "node_modules/watchpack": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", - "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "license": "MIT", "dependencies": { + "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -20396,6 +22737,13 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/weak-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -20406,10 +22754,20 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/webgl-context": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", + "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "get-canvas-context": "^1.0.1" + } + }, "node_modules/webpack": { - "version": "5.109.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.2.tgz", - "integrity": "sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==", + "version": "5.107.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz", + "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.8", @@ -20418,20 +22776,23 @@ "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.24.4", + "enhanced-resolve": "^5.22.0", "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", + "loader-runner": "^4.3.2", "mime-db": "^1.54.0", - "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "watchpack": "^2.5.2", - "webpack-sources": "^3.5.1" + "terser-webpack-plugin": "^5.5.0", + "watchpack": "^2.5.1", + "webpack-sources": "^3.5.0" }, "bin": { "webpack": "bin/webpack.js" @@ -20539,16 +22900,12 @@ } }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { @@ -20639,9 +22996,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.21.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.2.tgz", - "integrity": "sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -20674,9 +23031,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.0.tgz", + "integrity": "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==", "license": "MIT", "engines": { "node": ">=10.13.0" @@ -20777,6 +23134,16 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "license": "MIT" }, + "node_modules/world-calendars": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.4.tgz", + "integrity": "sha512-VGRnLJS+xJmGDPodgJRnGIDwGu0s+Cr9V2HB3EzlDZ5n0qb8h5SJtGUEkjrphZYAglEiXZ6kiXdmk0H/h/uu/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4.1.0" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -20833,6 +23200,13 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC", + "peer": true + }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -20846,9 +23220,9 @@ } }, "node_modules/ws": { - "version": "7.5.13", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", - "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -20920,6 +23294,16 @@ "xml-js": "bin/cli.js" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 4da819d..547a60d 100644 --- a/package.json +++ b/package.json @@ -28,15 +28,18 @@ "@mdx-js/react": "^3.0.0", "@orama/orama": "^3.1.18", "clsx": "^2.0.0", + "plotly.js-dist-min": "^3.7.0", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-plotly.js": "^4.1.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.10.1", "@docusaurus/tsconfig": "3.10.1", "@docusaurus/types": "3.10.1", "@types/react": "^19.0.0", + "@types/react-dom": "^19.2.4", "tsx": "^4.23.5", "typescript": "~6.0.2" }, diff --git a/src/components/DatasetMetadataModal.module.css b/src/components/DatasetMetadataModal.module.css index bed1eea..16dfeeb 100644 --- a/src/components/DatasetMetadataModal.module.css +++ b/src/components/DatasetMetadataModal.module.css @@ -19,6 +19,7 @@ box-shadow: var(--agml-shadow-strong); color: var(--agml-text); padding: 2rem; + perspective: 2400px; } .header { @@ -68,6 +69,11 @@ color: var(--agml-badge-segmentation-fg); } +.badgeVlm { + background: var(--agml-badge-vlm-bg); + color: var(--agml-badge-vlm-fg); +} + .badgeOther { background: var(--agml-badge-other-bg); color: var(--agml-badge-other-fg); @@ -107,6 +113,76 @@ outline: none; } +.headerActions { + flex: 0 0 auto; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: flex-end; + gap: 0.6rem; +} + +.benchmarkToggle { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + gap: 0.35rem; + border: 1px solid var(--ifm-color-primary); + border-radius: 999px; + background: var(--agml-accent-soft); + color: var(--ifm-color-primary); + padding: 0.5rem 1rem; + font-size: 0.78rem; + font-weight: 600; + cursor: pointer; + white-space: nowrap; + font-family: inherit; +} + +.benchmarkToggle:hover, +.benchmarkToggle:focus-visible { + border-color: var(--ifm-color-primary-dark); + outline: none; +} + +/* Card-flip mechanism: both faces stack in the same grid cell so the container's height + always matches the taller face, regardless of which one is currently shown. */ +.flipper { + position: relative; + display: grid; + transform-style: preserve-3d; + transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); + transform: rotateY(0deg); +} + +.flipperFlipped { + transform: rotateY(180deg); +} + +.face { + grid-area: 1 / 1; + width: 100%; + min-width: 0; + box-sizing: border-box; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; +} + +.faceBack { + transform: rotateY(180deg); +} + +.faceHidden { + visibility: hidden; + pointer-events: none; + /* Absolutely positioned grid items don't contribute to track sizing, so taking the hidden + face out of flow here means the flipper's height always matches whichever face is + actually showing — not the max of both, which left a dead gap under short front-face + content (e.g. an empty leaderboard) whenever the other face was taller. */ + position: absolute; + inset: 0; +} + .detailGrid { display: grid; gap: 0.85rem; @@ -590,18 +666,821 @@ text-decoration: underline; } -@media (max-width: 720px) { - .modal { - padding: 1.25rem; - border-radius: 10px; - } +.benchmarkRunNote { + margin: 0; + font-size: 0.78rem; + color: var(--agml-muted); +} - .header { - flex-direction: column; - } +.benchmarkDivider { + border: none; + border-top: 1px solid var(--agml-border); + margin: 0.85rem 0 1.25rem; +} - .detailGrid { - grid-template-columns: repeat(2, 1fr) !important; +.reproDetails { + margin: 0.6rem 0 0; +} + +.reproSummary { + cursor: pointer; + width: fit-content; + font-family: var(--ifm-code-font-family); + font-size: 0.66rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--agml-muted); +} + +.reproSummary:hover, +.reproSummary:focus-visible { + color: var(--agml-text); + outline: none; +} + +.reproGrid { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-top: 0.55rem; +} + +.reproTag { + flex: 0 0 auto; + display: flex; + flex-direction: column; + gap: 1px; + font-family: var(--ifm-code-font-family); + padding: 0.3rem 0.55rem; + border-radius: 5px; + background: var(--agml-tag-bg); +} + +.reproTagKey { + font-size: 0.58rem; + text-transform: uppercase; + letter-spacing: 0.03em; + color: var(--agml-muted); + white-space: nowrap; +} + +.reproTagValue { + font-size: 0.72rem; + color: var(--agml-text); + font-weight: 600; + white-space: nowrap; +} + +/* Overall + per-axis score gauge — the tier color comes from a --tier-color custom property + set per data-tier so the box border, value, and (reused below) proportion-bar segments and + confusion-cell heat all read off the same three-tier scale. */ +.scoreRow { + display: flex; + flex-wrap: nowrap; + gap: 0.6rem; + margin: 0.75rem 0 0; +} + +.methodologyLink { + flex: 0 0 auto; + border: none; + background: none; + padding: 0; + cursor: pointer; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + color: var(--agml-muted); + white-space: nowrap; +} + +.methodologyLink:hover, +.methodologyLink:focus-visible { + color: var(--ifm-color-primary); + outline: none; +} + +.scoreBox { + flex: 1 1 0; + min-width: 0; + border: 1px solid var(--agml-border); + border-top: 3px solid var(--tier-color); + border-radius: 8px; + padding: 0.65rem 0.8rem; + background: var(--agml-surface-soft); +} + +.scoreBox[data-tier='good'] { + --tier-color: var(--ifm-color-primary); +} + +.scoreBox[data-tier='mid'] { + --tier-color: var(--agml-caution-text); +} + +.scoreBox[data-tier='poor'] { + --tier-color: var(--agml-warning-text); +} + +.scoreBoxLabel { + margin: 0 0 0.3rem; + font-family: var(--ifm-code-font-family); + font-size: 0.58rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.03em; + line-height: 1.3; + color: var(--agml-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.scoreBoxValue { + margin: 0; + font-size: 1.15rem; + font-weight: 700; + color: var(--tier-color); +} + +.axisSection { + margin-bottom: 1.75rem; +} + +.axisTitle { + font-family: var(--ifm-code-font-family); + font-size: 0.66rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--ifm-color-primary); + margin: 0 0 0.75rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--agml-border); +} + +.proportionBar { + display: flex; + height: 14px; + border-radius: 999px; + overflow: hidden; + background: var(--agml-tag-bg); +} + +.proportionSegment { + height: 100%; +} + +.proportionSegment[data-tier='good'] { + background: var(--ifm-color-primary); +} + +.proportionSegment[data-tier='mid'] { + background: var(--agml-caution-text); +} + +.proportionSegment[data-tier='poor'] { + background: var(--agml-warning-text); +} + +.proportionTileGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(105px, 1fr)); + gap: 0.6rem; + margin-top: 0.6rem; +} + +.proportionTile { + border: 1px solid var(--agml-border); + border-top: 3px solid var(--tier-color); + border-radius: 8px; + padding: 0.65rem 0.8rem; + background: var(--agml-surface-soft); +} + +.proportionTile[data-tier='good'] { + --tier-color: var(--ifm-color-primary); +} + +.proportionTile[data-tier='mid'] { + --tier-color: var(--agml-caution-text); +} + +.proportionTile[data-tier='poor'] { + --tier-color: var(--agml-warning-text); +} + +.proportionDot { + display: inline-block; + width: 7px; + height: 7px; + border-radius: 50%; + margin-right: 0.35rem; + background: var(--tier-color); +} + +.proportionDot[data-tier='good'] { + --tier-color: var(--ifm-color-primary); +} + +.proportionDot[data-tier='mid'] { + --tier-color: var(--agml-caution-text); +} + +.proportionDot[data-tier='poor'] { + --tier-color: var(--agml-warning-text); +} + +.confusionWrap { + overflow-x: auto; + padding-bottom: 4px; +} + +.confusionGrid { + display: grid; + gap: 3px; + align-items: center; +} + +.confusionCorner { + visibility: hidden; +} + +.confusionColHeader { + font-family: var(--ifm-code-font-family); + font-size: 0.6rem; + color: var(--agml-muted); + text-align: center; + padding-bottom: 0.2rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.confusionRowHeader { + font-family: var(--ifm-code-font-family); + font-size: 0.6rem; + color: var(--agml-muted); + padding-right: 0.4rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.confusionCell { + aspect-ratio: 1; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + font-size: 0.62rem; + font-weight: 600; + color: var(--agml-text); +} + +.metricOverflowNote { + margin: 0.5rem 0 0; + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + color: var(--agml-muted); +} + +.confusionPairs { + margin-top: 0.2rem; + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +.confusionPairsHeader { + margin: 0 0 0.2rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--agml-muted); +} + +.confusionPairsList, +.confusionPairsListExpanded { + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +.confusionPairsListExpanded { + max-height: 168px; + overflow-y: auto; + padding-right: 4px; +} + +.confusionPairRow { + display: flex; + justify-content: space-between; + gap: 0.6rem; + font-size: 0.78rem; + color: var(--agml-text); +} + +.metricCardGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + /* Cards stretch to match the tallest card in their row (grid's default), so a row of + mixed content (e.g. a 4-stat card next to a bar-chart card) reads as one aligned row + instead of a ragged bottom edge. */ + align-items: stretch; + gap: 1rem; + margin: 0 0 1.75rem; + /* 1-column stat cards backfill the gaps left by 2-column bar cards instead of leaving a + hole and pushing everything after it down to the next row. */ + grid-auto-flow: dense; +} + +.metricCard { + padding: 1rem 1.1rem; + border-radius: 10px; + border: 1px solid var(--agml-border); + background: var(--agml-surface-soft); + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.metricCardSpan2 { + grid-column: span 2; +} + +.metricCardHeader { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.6rem; +} + +.metricCardTitle { + margin: 0; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--agml-muted); +} + +.metricCardTitleRow { + display: flex; + align-items: center; + gap: 0.35rem; + min-width: 0; +} + +.infoTooltip { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + width: 14px; + height: 14px; + flex-shrink: 0; + border-radius: 50%; + border: 1px solid var(--agml-border-strong); + color: var(--agml-muted); + font-family: var(--ifm-code-font-family); + font-size: 0.58rem; + font-weight: 700; + /* Keep the "i" glyph lowercase even when the icon sits inside an uppercased label. */ + text-transform: none; + letter-spacing: normal; + cursor: help; +} + +.infoTooltip:hover, +.infoTooltip:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + outline: none; +} + +.infoTooltipIcon { + pointer-events: none; +} + +.infoTooltipBubble { + position: absolute; + bottom: calc(100% + 8px); + left: 0; + width: max-content; + max-width: 240px; + padding: 0.5rem 0.65rem; + border-radius: 6px; + border: 1px solid var(--agml-border-strong); + background: var(--agml-tag-bg); + color: var(--agml-text); + font-size: 0.72rem; + font-weight: 400; + line-height: 1.45; + text-transform: none; + letter-spacing: normal; + white-space: normal; + /* `display: none` rather than `visibility: hidden`: a visibility-hidden box is still laid + out, and an absolutely positioned one still contributes to the modal's scrollable overflow + region. With a 240px bubble anchored to every stat-tile icon, the tiles near the modal's + right edge pushed that region ~200px wide and gave the benchmark face a permanent + horizontal scrollbar while nothing was even visible. */ + display: none; + opacity: 0; + pointer-events: none; + /* allow-discrete + @starting-style keep the fade across the display change on browsers that + support them; elsewhere the bubble simply appears instantly. */ + transition: opacity 0.12s ease; + transition-behavior: allow-discrete; + box-shadow: var(--agml-shadow-strong); + z-index: 20; +} + +.infoTooltip:hover .infoTooltipBubble, +.infoTooltip:focus-visible .infoTooltipBubble { + display: block; + opacity: 1; +} + +@starting-style { + .infoTooltip:hover .infoTooltipBubble, + .infoTooltip:focus-visible .infoTooltipBubble { + opacity: 0; + } +} + +.metricCardBadge { + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + padding: 0.2rem 0.55rem; + border-radius: 4px; + display: inline-block; + white-space: nowrap; + background: var(--agml-tag-bg); + color: var(--agml-tag-fg); +} + +.metricSkipped { + margin: 0; + font-size: 0.84rem; + font-style: italic; + color: var(--agml-muted); +} + +.metricBars { + display: flex; + flex-direction: column; + gap: var(--metric-bar-gap); + /* Single source of truth for row height and gap — referenced by .metricBarRow's flex-basis + and by .metricBarsExpanded's cap height below, so the two can't drift out of sync. */ + --metric-bar-row-height: 24px; + --metric-bar-gap: 0.3rem; +} + +.metricBarRow { + display: grid; + grid-template-columns: 112px 1fr 56px; + align-items: center; + gap: 0.6rem; + flex: 0 0 var(--metric-bar-row-height); + height: var(--metric-bar-row-height); + box-sizing: border-box; + overflow: hidden; +} + +/* Exactly 10 rows visible before scrolling — derived from the same row-height variable the + rows themselves use, so this can't drift from the actual rendered row height. */ +.metricBarsExpanded { + max-height: calc(10 * var(--metric-bar-row-height) + 9 * var(--metric-bar-gap)); + overflow-y: auto; + padding-right: 4px; +} + +.metricExpandLink { + align-self: flex-start; + border: none; + background: none; + padding: 0; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + font-weight: 600; + color: var(--ifm-color-primary); + cursor: pointer; +} + +.metricExpandLink:hover, +.metricExpandLink:focus-visible { + text-decoration: underline; + outline: none; +} + +.metricBarLabel { + font-size: 0.8rem; + color: var(--agml-text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.metricBarTrack { + height: 8px; + border-radius: 999px; + background: var(--agml-tag-bg); + overflow: hidden; +} + +.metricBarFill { + height: 100%; + border-radius: 999px; + background: var(--ifm-color-primary); + transition: width 0.3s ease; +} + +.metricBarValue { + font-size: 0.82rem; + font-weight: 600; + color: var(--agml-text); + text-align: right; + white-space: nowrap; +} + +.metricSignedTrack { + position: relative; + height: 8px; + border-radius: 999px; + background: var(--agml-tag-bg); + overflow: hidden; +} + +.metricSignedMidline { + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: 1px; + background: var(--agml-border-strong); +} + +.metricSignedFill { + position: absolute; + top: 0; + height: 100%; + border-radius: 999px; + transition: width 0.3s ease; +} + +.metricSignedPositive { + background: var(--ifm-color-primary); +} + +.metricSignedNegative { + background: var(--agml-warning-text); +} + +.statTileGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(105px, 1fr)); + gap: 0.6rem; +} + +.statTile { + min-width: 0; +} + +.statTileLabel { + /* Deliberately not flex: a flex row lays the icon out beside the *whole* (possibly + two-line) text box, wherever that box's edge lands — which is what put the icon in the + dead space toward the next column. Plain inline flow instead treats the icon as another + inline element and wraps it right after the label's own last word, like normal text. */ + margin: 0 0 0.3rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + font-weight: 600; + line-height: 1.3; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--agml-muted); + /* Reserves space for two lines even when a label only needs one, so neighboring stat tiles + in the same grid row keep their values aligned instead of the value's baseline shifting + down only under whichever label happens to wrap. */ + min-height: 2.6em; +} + +.statTileLabel .infoTooltip { + margin-left: 0.3rem; + vertical-align: middle; +} + +.statTileValue { + margin: 0; + font-size: 0.9rem; + font-weight: 600; + color: var(--agml-text); + overflow-wrap: anywhere; +} + +/* Interpretation line under a stat's value — smaller and muted so it reads as an explanation + of the number above it, not another value. */ +.statTileHint { + margin: 0.2rem 0 0; + font-size: 0.7rem; + font-weight: 400; + line-height: 1.35; + color: var(--agml-muted); + overflow-wrap: anywhere; +} + +.metricFooterStats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(105px, 1fr)); + gap: 0.6rem; + padding-top: 0.6rem; + border-top: 1px solid var(--agml-border); +} + +.metricStatSections { + display: flex; + flex-direction: column; + gap: 0.85rem; +} + +.metricStatSection { + display: flex; + flex-direction: column; + gap: 0.6rem; +} + +.metricStatSection + .metricStatSection { + padding-top: 0.85rem; + border-top: 1px solid var(--agml-border); +} + +.metricStatSectionTitle { + margin: 0; + font-family: var(--ifm-code-font-family); + font-size: 0.66rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--agml-text); +} + +.embedHeader { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + flex-wrap: wrap; + margin-bottom: 0; +} + +.embedToggle { + display: inline-flex; + border-radius: 999px; + background: var(--agml-tag-bg); + padding: 4px; + gap: 4px; +} + +.embedToggleButton { + border: none; + border-radius: 999px; + padding: 0.4rem 0.9rem; + font-size: 0.82rem; + font-weight: 600; + cursor: pointer; + font-family: inherit; + background: transparent; + color: var(--agml-muted); + transition: background 0.15s, color 0.15s; +} + +.embedToggleActive { + background: var(--ifm-color-primary); + color: var(--agml-page-bg); +} + +.embedViewport { + position: relative; + margin-top: 0.9rem; + height: 440px; + border-radius: 10px; + border: 1px solid var(--agml-border); + background-color: var(--agml-surface-soft); + overflow: hidden; +} + +.embedPlotFallback { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + color: var(--agml-muted); + font-size: 0.78rem; +} + +.embedResetButton { + position: absolute; + top: 10px; + right: 10px; + z-index: 5; + border: 1px solid var(--agml-border-strong); + border-radius: 999px; + background: var(--agml-tag-bg); + color: var(--agml-muted); + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + padding: 0.3rem 0.65rem; + cursor: pointer; +} + +.embedResetButton:hover, +.embedResetButton:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + outline: none; +} + +.embedLegend { + display: flex; + flex-wrap: wrap; + gap: 1rem; + margin-top: 0.9rem; +} + +.embedLegendItem { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-size: 0.8rem; + color: var(--agml-text); +} + +.embedLegendDot { + display: inline-block; + width: 9px; + height: 9px; + border-radius: 50%; + flex-shrink: 0; +} + +.embedLegendOverflow { + font-family: var(--ifm-code-font-family); + font-size: 0.74rem; + color: var(--agml-muted); +} + +.embedNote { + margin: 0.7rem 0 0; + font-size: 0.72rem; + font-style: italic; + color: var(--agml-muted); +} + +@media (max-width: 720px) { + .modal { + padding: 1.25rem; + border-radius: 10px; + } + + .header { + flex-direction: column; + } + + .detailGrid { + grid-template-columns: repeat(2, 1fr) !important; + } + + .metricCardGrid { + grid-template-columns: 1fr; + } + + .metricCardSpan2 { + grid-column: span 1; + } + + .metricBarRow { + grid-template-columns: 88px 1fr 48px; + } + + .embedViewport { + height: 260px; + } + + /* Five boxes side by side is too cramped under ~720px — wrap into rows of two instead of + forcing a horizontal scroll on what's meant to be a quick-glance score summary. */ + .scoreRow { + flex-wrap: wrap; + } + + .scoreBox { + flex: 1 1 calc(50% - 0.3rem); + } + + .reproGrid { + gap: 0.35rem; } .locationColumns { diff --git a/src/components/DatasetMetadataModal.tsx b/src/components/DatasetMetadataModal.tsx index a9be387..942d400 100644 --- a/src/components/DatasetMetadataModal.tsx +++ b/src/components/DatasetMetadataModal.tsx @@ -1,8 +1,21 @@ -import { Fragment, useEffect, useMemo, useState } from 'react'; +import { Fragment, useEffect, useMemo, useRef, useState } from 'react'; +import { useColorMode } from '@docusaurus/theme-common'; import type { Dataset } from '../lib/datasets'; -import { formatCoordinateList, formatDisplayLocation, formatLocationList } from '../lib/datasets'; +import { formatCoordinateList, formatDisplayLocation, formatLocationList, toTitleCase } from '../lib/datasets'; +import { toDisplayLabel } from '../lib/labelOverrides'; +import { + useBenchmark, + type BenchmarkData, + type EmbedPoint as RawEmbedPoint, + type ReproducibilityInfo, +} from '../lib/benchmarks'; +import { computeScores, type AxisScores } from '../lib/scoring'; import { METRIC_CATEGORY_LABELS, useDatasetPerformance } from '../lib/performance'; import type { MetricCategory, PerformanceEntry } from '../lib/performance'; +import { oklchToRgb } from '../lib/plotlyChrome'; +import { EmbeddingPlot2D } from './EmbeddingPlot2D'; +import { EmbeddingPlot3D } from './EmbeddingPlot3D'; +import { ScoringMethodologyModal } from './ScoringMethodologyModal'; import styles from './DatasetMetadataModal.module.css'; function formatImageCount(count: number | null) { @@ -17,8 +30,8 @@ function formatImageCount(count: number | null) { function formatValue(value: string | string[] | null | undefined) { if (value == null) return 'Unknown'; - if (Array.isArray(value)) return value.length ? value.join(', ') : 'Unknown'; - return value; + if (Array.isArray(value)) return value.length ? value.map(toTitleCase).join(', ') : 'Unknown'; + return toTitleCase(value); } function formatArray(value: number[] | null) { @@ -58,6 +71,7 @@ function formatResultType(entry: { variant: 'zero-shot' | 'fine-tuned' | null; o function taskBadgeClass(task: string | null): string { if (!task) return styles.badgeOther; + if (task.includes('image-text') || task.includes('text-to-text')) return styles.badgeVlm; if (task.includes('classif')) return styles.badgeClassification; if (task.includes('detect')) return styles.badgeDetection; if (task.includes('segment')) return styles.badgeSegmentation; @@ -92,6 +106,12 @@ function formatMetricScore(entry: { metrics: { key: string; label: string; value function formatLoaderInstructions(dataset: Dataset) { if (dataset.source === 'huggingface') { + if(dataset.dataset_type === 'vlm') { + return { + title: 'Load from Hugging Face', + code: `from datasets import load_dataset\nloader = load_dataset("Project-AgML/${dataset.name}")`, + }; + } return { title: 'Load from Hugging Face', code: `from agml.data.hf_loader import HuggingFaceDataLoader\nloader = HuggingFaceDataLoader("Project-AgML/${dataset.name}")`, @@ -104,6 +124,906 @@ function formatLoaderInstructions(dataset: Dataset) { }; } +function StatTile({ label, value, hint, info }: { label: string; value: string; hint?: string; info?: string }) { + return ( +
+

+ {label} + {info && } +

+

{value}

+ {hint &&

{hint}

} +
+ ); +} + +type MetricBar = { label: string; value: string; pct: number; positive?: boolean }; +type MetricStat = { label: string; value: string; hint?: string; info?: string }; +type MetricStatSection = { title: string; description: string; badge?: string; stats: MetricStat[] }; +// 'good' / 'mid' / 'poor' key into the same three-tier color scale used by the score boxes +// (--ifm-color-primary / --agml-caution-text / --agml-warning-text) so a cartography split and +// an axis score read as the same kind of judgment. +type ScoreTier = 'good' | 'mid' | 'poor'; +type MetricSegment = { label: string; value: string; pct: number; tier: ScoreTier }; +type ConfusionCell = { value: string; title: string; intensity: number; diagonal: boolean }; +type ConfusionRow = { name: string; cells: ConfusionCell[] }; +type MetricPair = { label: string; value: string }; +type MetricCardVM = + | { kind: 'bars'; title: string; description: string; badge?: string; bars: MetricBar[]; footerStats?: MetricStat[] } + | { kind: 'signed'; title: string; description: string; badge?: string; bars: MetricBar[]; footerStats?: MetricStat[] } + | { kind: 'stats'; title: string; description: string; badge?: string; wide?: boolean; stats: MetricStat[] } + | { kind: 'stat-sections'; title: string; sections: MetricStatSection[] } + | { kind: 'skipped'; title: string; message: string } + | { kind: 'proportion'; title: string; description: string; badge?: string; segments: MetricSegment[]; footerStats?: MetricStat[] } + | { + kind: 'confusion'; + title: string; + description: string; + badge?: string; + classNames: string[]; + rows: ConfusionRow[]; + overflowNote?: string; + pairs: MetricPair[]; + footerStats?: MetricStat[]; + }; + +function buildMetricCards(benchmark: BenchmarkData): MetricCardVM[] { + const m = benchmark.metrics; + const cards: MetricCardVM[] = []; + + if (m.class_imbalance) { + const d = m.class_imbalance; + const max = Math.max(...Object.values(d.counts)); + cards.push({ + kind: 'bars', + title: 'Class Imbalance', + description: + 'How evenly the classes are represented. Imbalance ratio is the most-frequent class’s count divided by the least-frequent’s (1.0 = perfectly balanced, higher = more skewed). Normalized entropy ranges 0–1, where 1 means every class has an equal share.', + badge: `${d.total_train_examples} train examples`, + bars: Object.entries(d.counts) + .map(([label, value]) => ({ label: toTitleCase(label), value: value.toLocaleString(), pct: (value / max) * 100 })) + .sort((a, b) => b.pct - a.pct), + footerStats: [ + { + label: 'Imbalance ratio', + value: d.imbalance_ratio.toFixed(2), + info: 'Most-frequent class count ÷ least-frequent. 1.0 = perfectly balanced; higher = more skewed.', + }, + { + label: 'Norm. entropy', + value: d.normalized_entropy.toFixed(2), + info: 'Normalized entropy, 0–1. 1 = every class has an equal share; lower = more concentrated.', + }, + { label: 'Most frequent', value: toTitleCase(d.most_frequent_class), info: 'Class with the most training examples.' }, + { label: 'Least frequent', value: toTitleCase(d.least_frequent_class), info: 'Class with the fewest training examples.' }, + ], + }); + } + + if (m.exact_duplicate || m.near_duplicate) { + const sections: MetricStatSection[] = []; + + if (m.exact_duplicate) { + const d = m.exact_duplicate; + sections.push({ + title: 'Exact', + description: + 'Images that are byte-for-byte identical to another image in the dataset. A high duplicate rate inflates the apparent dataset size and can leak the same example across train/test splits, making evaluation look better than it is.', + badge: `${d.total_images} images`, + stats: [ + { label: 'Duplicate count', value: String(d.exact_duplicate_count), info: 'Images that are byte-for-byte identical to another image in the dataset.' }, + { + label: 'Duplicate rate', + value: `${(d.exact_duplicate_rate * 100).toFixed(1)}%`, + info: 'Share of images that are exact duplicates. A higher rate inflates the apparent dataset size.', + }, + { label: 'Groups', value: String(d.duplicate_groups), info: 'Number of distinct sets of identical images.' }, + { + label: 'Cross-split', + value: String(d.cross_split_duplicates), + info: 'Duplicates that appear across train/test splits — a direct source of evaluation leakage.', + }, + ], + }); + } + + if (m.near_duplicate) { + const d = m.near_duplicate; + sections.push({ + title: 'Near', + description: + 'Images that are nearly identical (crops, recompressions, small edits) based on embedding similarity above a threshold — not exact byte matches. High near-duplicate rates risk train/test leakage even when the exact-duplicate count is zero.', + badge: d.embed_model, + stats: [ + { + label: 'Near-dup count', + value: String(d.near_duplicate_count), + info: 'Images that are nearly identical (crops, recompressions, small edits) by embedding similarity — not exact byte matches.', + }, + { label: 'Near-dup rate', value: `${(d.near_duplicate_rate * 100).toFixed(1)}%`, info: 'Share of images that are near-duplicates.' }, + { label: 'Groups', value: String(d.near_duplicate_groups), info: 'Number of distinct near-duplicate clusters.' }, + { + label: 'Cross-split', + value: String(d.cross_split_near_duplicates), + info: 'Near-duplicates spanning train/test splits — risks leakage even when the exact-duplicate count is zero.', + }, + { label: 'Threshold', value: String(d.threshold), info: 'Cosine-similarity cutoff above which two images count as near-duplicates.' }, + { label: 'Index type', value: d.faiss_index_type, info: 'FAISS index type used for the similarity search.' }, + ], + }); + } + + cards.push({ kind: 'stat-sections', title: 'Duplicate Detection', sections }); + } + + if (m.resolution_consistency) { + const d = m.resolution_consistency; + cards.push({ + kind: 'stats', + title: 'Resolution Consistency', + wide: true, + description: + 'How uniform image dimensions and aspect ratios are across the dataset. Area CV (coefficient of variation) near 0 means sizes barely vary; higher values mean preprocessing has to handle a wide range of source resolutions.', + badge: `${d.total_images} images`, + stats: [ + { label: 'Width (mean)', value: `${d.width.mean}px`, info: 'Average image width in pixels.' }, + { label: 'Height (μ±σ)', value: `${d.height.mean.toFixed(0)}±${d.height.std.toFixed(1)}`, info: 'Average image height ± standard deviation, in pixels.' }, + { + label: 'Aspect ratio', + value: `${d.aspect_ratio.mean.toFixed(2)} (${d.aspect_ratio.min.toFixed(2)}–${d.aspect_ratio.max.toFixed(2)})`, + info: 'Mean aspect ratio, with the min–max range across the dataset in parentheses.', + }, + { + label: 'Area CV', + value: d.area_cv.toFixed(3), + info: 'Coefficient of variation of image area. Near 0 = uniform sizes; higher = a wide range of source resolutions.', + }, + { label: 'Color mode', value: Object.keys(d.mode_distribution).join(', '), info: 'Image color modes present in the dataset (e.g. RGB, L).' }, + ], + }); + } + + if (m.feature_separability) { + const d = m.feature_separability; + cards.push({ + kind: 'signed', + title: 'Feature Separability', + description: + 'How distinctly the classes cluster in embedding space. Silhouette score ranges −1 to 1 (higher = better-separated clusters, near 0 = overlapping, negative = points closer to another class than their own — often mislabeled or genuinely ambiguous). Davies-Bouldin index is ≥0 and unbounded, where lower means better separation.', + badge: d.embed_model, + bars: Object.entries(d.per_class_silhouette) + .map(([label, value]) => ({ + label: toTitleCase(label), + value: value.toFixed(2), + pct: Math.abs(value) * 50, + positive: value >= 0, + })) + .sort((a, b) => b.pct - a.pct), + footerStats: [ + { + label: 'Silhouette', + value: d.silhouette_score.toFixed(2), + hint: d.silhouette_interpretation, + info: 'Ranges −1 to 1. Higher = better-separated clusters; near 0 = overlapping; negative = points closer to another class than their own.', + }, + { + label: 'Davies-Bouldin', + value: d.davies_bouldin_index.toFixed(2), + hint: d.davies_bouldin_interpretation, + info: 'Index ≥ 0 and unbounded. Lower means better separation between classes.', + }, + ], + }); + } + + if (m.intra_class_diversity) { + const d = m.intra_class_diversity; + const max = Math.max(...Object.values(d.per_class_diversity)); + cards.push({ + kind: 'bars', + title: 'Intra-class Diversity', + description: + 'How visually varied the images within each class are, based on average embedding distance between same-class examples. Higher values mean more diverse, less redundant examples per class; a very low value can mean that class is dominated by near-duplicates.', + badge: d.embed_model, + bars: Object.entries(d.per_class_diversity) + .map(([label, value]) => ({ label: toTitleCase(label), value: value.toFixed(2), pct: (value / max) * 100 })) + .sort((a, b) => b.pct - a.pct), + footerStats: [ + { + label: 'Mean diversity', + value: d.mean_diversity.toFixed(2), + info: 'Average embedding distance between same-class images, averaged over classes. Higher = more varied, less redundant.', + }, + { label: 'Min class', value: toTitleCase(d.min_diversity_class), info: 'Class with the least visual variety — possibly dominated by near-duplicates.' }, + { label: 'Max class', value: toTitleCase(d.max_diversity_class), info: 'Class with the most visual variety.' }, + ], + }); + } + + if (m.metadata_coverage?.skipped) { + cards.push({ kind: 'skipped', title: 'Metadata Coverage', message: m.metadata_coverage.reason || 'Skipped for this run.' }); + } + + const backbone = benchmark.reproducibility?.backbone; + + if (m.dataset_cartography) { + const d = m.dataset_cartography; + cards.push({ + kind: 'proportion', + title: 'Dataset Cartography', + description: + 'Prediction confidence and variability across training epochs from a reference model, sorting examples into easy, ambiguous, or hard-to-learn based on how consistently the model got them right.', + badge: backbone ? `${backbone} · ${d.n_epochs} epochs` : `${d.n_epochs} epochs`, + segments: [ + { label: 'Easy', pct: d.pct_easy, value: `${d.n_easy.toLocaleString()} (${d.pct_easy.toFixed(1)}%)`, tier: 'good' }, + { label: 'Ambiguous', pct: d.pct_ambiguous, value: `${d.n_ambiguous.toLocaleString()} (${d.pct_ambiguous.toFixed(1)}%)`, tier: 'mid' }, + { label: 'Hard', pct: d.pct_hard, value: `${d.n_hard.toLocaleString()} (${d.pct_hard.toFixed(1)}%)`, tier: 'poor' }, + ], + footerStats: [ + { + label: 'Mean confidence', + value: d.mean_confidence.toFixed(2), + info: 'Average model confidence on its predicted class across training epochs.', + }, + { + label: 'Mean variability', + value: d.mean_variability.toFixed(2), + info: 'Average variance of that confidence across epochs — high variability means the model flip-flops on that example.', + }, + ], + }); + } + + if (m.class_confusability) { + const d = m.class_confusability; + const allNames = Object.keys(d.per_class_accuracy); + let keepIdx = allNames.map((_, i) => i); + if (allNames.length > CONFUSION_CAP) { + keepIdx = allNames + .map((name, i): [number, number] => [i, d.per_class_accuracy[name]]) + .sort((a, b) => a[1] - b[1]) + .slice(0, CONFUSION_CAP) + .map(([i]) => i) + .sort((a, b) => a - b); + } + const classNames = keepIdx.map((i) => toTitleCase(allNames[i])); + const rows: ConfusionRow[] = keepIdx.map((ri, rowPos) => ({ + name: classNames[rowPos], + cells: keepIdx.map((ci) => { + const value = d.confusion_matrix[ri][ci]; + return { + value: (value * 100).toFixed(0), + title: `${toTitleCase(allNames[ri])} → ${toTitleCase(allNames[ci])}: ${(value * 100).toFixed(1)}%`, + intensity: Math.max(0.06, value), + diagonal: ri === ci, + }; + }), + })); + const overflowNote = + allNames.length > CONFUSION_CAP + ? `Showing ${CONFUSION_CAP} of ${allNames.length} classes (lowest accuracy) — hover cells for exact values` + : undefined; + cards.push({ + kind: 'confusion', + title: 'Class Confusability', + description: 'Confusion matrix from a reference model on held-out data, highlighting class pairs that are visually hard to tell apart.', + badge: backbone ? `${backbone} · ${(d.accuracy * 100).toFixed(1)}% acc.` : `${(d.accuracy * 100).toFixed(1)}% acc.`, + classNames, + rows, + overflowNote, + pairs: d.top_confused_pairs.map((p) => ({ + label: `${toTitleCase(p.true_class)} → ${toTitleCase(p.predicted_as)}`, + value: `${(p.confusion_rate * 100).toFixed(1)}%`, + })), + footerStats: [ + { label: 'Overall accuracy', value: `${(d.accuracy * 100).toFixed(1)}%`, info: 'Accuracy of the reference model on held-out test data.' }, + { label: 'Test samples', value: String(d.n_test_samples), info: 'Number of held-out samples used to compute this confusion matrix.' }, + ], + }); + } + + if (m.label_noise) { + const d = m.label_noise; + const max = Math.max(...Object.values(d.per_class_noise_counts)); + cards.push({ + kind: 'bars', + title: 'Label Noise', + description: + 'Out-of-fold predictions from k-fold cross-validation, flagged via confident-learning (cleanlab-style) methods to estimate the mislabeled rate per class.', + badge: backbone + ? `${backbone} · ${(d.estimated_noise_rate * 100).toFixed(1)}% est. rate` + : `${(d.estimated_noise_rate * 100).toFixed(1)}% est. rate`, + bars: Object.entries(d.per_class_noise_counts) + .map(([label, value]) => ({ label: toTitleCase(label), value: String(value), pct: max ? (value / max) * 100 : 0 })) + .sort((a, b) => b.pct - a.pct), + footerStats: [ + { label: 'Noisy samples', value: `${d.n_noisy_samples} / ${d.n_total_samples}`, info: 'Samples flagged as likely mislabeled, out of the total evaluated.' }, + { label: 'CV folds', value: String(d.cv_folds), info: 'Number of cross-validation folds used to generate out-of-fold predictions.' }, + ], + }); + } + + return cards; +} + +// A plain ascending-bars glyph in currentColor — matches the rest of the header's monochrome +// icon language (×, ←) instead of a colorful emoji that clashes with it. +function BenchmarkIcon() { + return ( + + ); +} + +function BackIcon() { + return ( + + ); +} + +// Breathing room between a clamped tooltip and the modal's content edge. +const TOOLTIP_EDGE_GAP = 4; + +function InfoTooltip({ text }: { text: string }) { + const bubbleRef = useRef(null); + + // The bubble is absolutely positioned against its own 14px icon, so `position: absolute` + // alone can't also keep it inside the modal — one containing block resolves both axes, and + // re-anchoring it to something wider would detach it vertically from the icon. Measure it + // once it's laid out and translate it back inside instead. + const clamp = () => { + const bubble = bubbleRef.current; + if (!bubble) return; + // Reset first: measuring an already-shifted bubble would compound the offset on + // every subsequent hover. + bubble.style.transform = ''; + const boundary = bubble.closest(`.${styles.modal}`); + if (!boundary) return; + // The modal's *border-box* right edge sits outside both its vertical scrollbar and its + // 2rem padding, so clamping to it still let the bubble overflow. Walk in to the content + // edge instead: clientLeft skips the border, clientWidth stops before the scrollbar, and + // paddingRight takes off the rest. + const bounds = boundary.getBoundingClientRect(); + const paddingRight = parseFloat(getComputedStyle(boundary).paddingRight) || 0; + const contentRight = bounds.left + boundary.clientLeft + boundary.clientWidth - paddingRight; + const overflow = bubble.getBoundingClientRect().right - (contentRight - TOOLTIP_EDGE_GAP); + if (overflow > 0) bubble.style.transform = `translateX(${-overflow}px)`; + }; + + // Deferred a frame so the :hover rule has flipped the bubble to `display: block` — a + // display:none element measures as a zero-size rect. The fade starts from opacity 0, so + // the one-frame delay isn't visible. + const scheduleClamp = () => { + requestAnimationFrame(clamp); + }; + + return ( + + + + {text} + + + ); +} + +// Above this many bars, a card shows only the top BAR_CAP (already sorted descending in +// buildMetricCards) with a "Show all N →" link instead of every class at once. +const BAR_CAP = 8; + +// Above this many classes, the confusion matrix shows only the CONFUSION_CAP lowest-accuracy +// classes (the ones most worth looking at) instead of a matrix too wide to read. +const CONFUSION_CAP = 12; + +// Above this many confused pairs, only the top 3 show before a "Show all N →" link. +const PAIR_CAP = 3; + +// Bar-chart, signed-diverging, and confusion-matrix cards read better wider (long class lists, +// wide grids), so they span 2 grid columns while stat-only cards stay at 1 — paired with +// grid-auto-flow: dense on .metricCardGrid so 1-column cards backfill the gaps. +function isWideCard(card: MetricCardVM): boolean { + return card.kind === 'bars' || card.kind === 'signed' || card.kind === 'confusion' || (card.kind === 'stats' && !!card.wide); +} + +const METRIC_AXES = ['Structural Quality', 'Content Difficulty', 'Diversity & Coverage', 'Annotation Reliability'] as const; +const METRIC_AXIS_MAP: Record = { + 'Class Imbalance': 'Structural Quality', + 'Duplicate Detection': 'Structural Quality', + 'Resolution Consistency': 'Structural Quality', + 'Dataset Cartography': 'Content Difficulty', + 'Class Confusability': 'Content Difficulty', + 'Feature Separability': 'Content Difficulty', + 'Intra-class Diversity': 'Diversity & Coverage', + 'Metadata Coverage': 'Diversity & Coverage', + 'Label Noise': 'Annotation Reliability', +}; + +function MetricCard({ card }: { card: MetricCardVM }) { + const [expanded, setExpanded] = useState(false); + const [pairsExpanded, setPairsExpanded] = useState(false); + const badge = card.kind !== 'skipped' && card.kind !== 'stat-sections' ? card.badge : undefined; + const allBars = card.kind === 'bars' || card.kind === 'signed' ? card.bars : undefined; + const hasMoreBars = Boolean(allBars && allBars.length > BAR_CAP); + const visibleBars = allBars ? (expanded || !hasMoreBars ? allBars : allBars.slice(0, BAR_CAP)) : undefined; + const hasMorePairs = card.kind === 'confusion' && card.pairs.length > PAIR_CAP; + const visiblePairs = card.kind === 'confusion' ? (pairsExpanded || !hasMorePairs ? card.pairs : card.pairs.slice(0, PAIR_CAP)) : undefined; + + return ( +
+
+
+

{card.title}

+ {card.kind !== 'skipped' && card.kind !== 'stat-sections' && } +
+ {badge && {badge}} +
+ + {card.kind === 'skipped' &&

Skipped — {card.message}

} + + {card.kind === 'stat-sections' && ( +
+ {card.sections.map((section) => ( +
+
+
+
{section.title}
+ +
+ {section.badge && {section.badge}} +
+
+ {section.stats.map((stat) => ( + + ))} +
+
+ ))} +
+ )} + + {visibleBars && ( +
+ {visibleBars.map((bar) => ( +
+ {bar.label} + {card.kind === 'signed' ? ( +
+
+
+
+ ) : ( +
+
+
+ )} + {bar.value} +
+ ))} +
+ )} + + {hasMoreBars && allBars && ( + + )} + + {card.kind === 'stats' && ( +
+ {card.stats.map((stat) => ( + + ))} +
+ )} + + {card.kind === 'proportion' && ( + <> +
+ {card.segments.map((seg) => ( +
+ ))} +
+
+ {card.segments.map((seg) => ( +
+

+

+

{seg.value}

+
+ ))} +
+ + )} + + {card.kind === 'confusion' && ( + <> +
+
+
+
+ {card.overflowNote &&

{card.overflowNote}

} + {card.pairs.length > 0 ? ( +
+

Top confused pairs

+
+ {visiblePairs?.map((pair) => ( +
+ {pair.label} + {pair.value} +
+ ))} +
+ {hasMorePairs && ( + + )} +
+ ) : ( +

No confused pairs — every class was classified perfectly.

+ )} + + )} + + {'footerStats' in card && card.footerStats && card.footerStats.length > 0 && ( +
+ {card.footerStats.map((stat) => ( + + ))} +
+ )} +
+ ); +} + +// A fixed palette repeats (or blurs together) past a handful of classes, so class colors are +// generated procedurally instead: step the hue by 47° per class (coprime-ish with 360, so +// hues don't cluster or repeat for a long time) at a lightness/chroma tuned per theme. +function classColor(index: number, isDark: boolean): string { + const hue = (index * 47) % 360; + const lightness = isDark ? 0.72 : 0.5; + const chroma = isDark ? 0.13 : 0.12; + return oklchToRgb(lightness, chroma, hue); +} + +const EMBED_CLUSTER_CENTERS: [number, number, number][] = [ + [-0.6, 0.5, 0.3], + [0.55, 0.55, -0.4], + [-0.5, -0.55, -0.2], + [0.6, -0.5, 0.45], +]; + +function mulberry32(seed: number) { + return function random() { + seed |= 0; + seed = (seed + 0x6d2b79f5) | 0; + let t = Math.imul(seed ^ (seed >>> 15), 1 | seed); + t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; +} + +export interface EmbedPoint { + id: string; + cls: string; + split: string; + index: number; + x: number; + y: number; + z: number; +} + +function embedPointsFromReal(embeddings: RawEmbedPoint[]): EmbedPoint[] { + return embeddings.map((p, i) => ({ + id: `${p.label}-${p.index ?? i}`, + cls: p.label, + split: p.split ?? 'train', + index: p.index ?? i, + x: p.x, + y: p.y, + z: p.z ?? 0, + })); +} + +function buildEmbeddingPoints(benchmark: BenchmarkData): EmbedPoint[] { + const counts = benchmark.metrics.class_imbalance?.counts ?? {}; + const sep = benchmark.metrics.feature_separability?.per_class_silhouette ?? {}; + const classes = Object.keys(counts); + const rand = mulberry32(42); + const splits = ['train', 'val', 'test']; + const points: EmbedPoint[] = []; + let globalIndex = 0; + classes.forEach((cls, i) => { + const center = EMBED_CLUSTER_CENTERS[i % EMBED_CLUSTER_CENTERS.length]; + const sil = sep[cls] ?? 0.3; + const spread = 0.22 + Math.max(0, 0.65 - sil) * 0.55; + const n = Math.max(6, Math.round((counts[cls] || 30) / 8)); + for (let k = 0; k < n; k += 1) { + const jitter = () => (((rand() + rand() + rand()) - 1.5) / 1.5) * spread; + points.push({ + id: `${cls}-${k}`, + cls, + split: splits[globalIndex % splits.length], + index: globalIndex, + x: center[0] + jitter(), + y: center[1] + jitter(), + z: center[2] + jitter(), + }); + globalIndex += 1; + } + }); + return points; +} + +function buildClassColorMap(points: EmbedPoint[], isDark: boolean): Record { + const labels = Array.from(new Set(points.map((p) => p.cls))).sort(); + return Object.fromEntries(labels.map((label, i) => [label, classColor(i, isDark)])); +} + +// Beyond this many classes, the legend switches from listing every one to a "+N more" note — +// past ~10 swatches a legend stops being scannable anyway. +const LEGEND_CAP = 10; + +function EmbeddingScatter({ + benchmark, + embeddings2d, + embeddings3d, +}: { + benchmark: BenchmarkData; + embeddings2d: RawEmbedPoint[] | null; + embeddings3d: RawEmbedPoint[] | null; +}) { + const [view, setView] = useState<'2d' | '3d'>('2d'); + const { colorMode } = useColorMode(); + + // 2D and 3D UMAP projections are independently fit, so they're separate point sets — + // not the same points with one axis dropped. + const activeRaw = view === '2d' ? embeddings2d : embeddings3d; + const hasRealEmbeddings = Boolean(activeRaw && activeRaw.length > 0); + const points = useMemo(() => { + if (activeRaw && activeRaw.length > 0) return embedPointsFromReal(activeRaw); + return buildEmbeddingPoints(benchmark); + }, [activeRaw, benchmark]); + + const colorMap = useMemo(() => buildClassColorMap(points, colorMode === 'dark'), [points, colorMode]); + + const embedModel = benchmark.metrics.feature_separability?.embed_model ?? 'dinov2-base'; + + return ( +
+
+
+

Embedding Space — UMAP

+ {embedModel} +
+
+ + +
+
+ + {view === '2d' ? ( + + ) : ( + + )} + +
+ {Object.entries(colorMap) + .slice(0, LEGEND_CAP) + .map(([key, color]) => ( + + + {toTitleCase(key)} + + ))} + {Object.keys(colorMap).length > LEGEND_CAP && ( + + +{Object.keys(colorMap).length - LEGEND_CAP} more (hover points for class) + + )} +
+

+ {hasRealEmbeddings + ? `projected from real ${view.toUpperCase()} UMAP embeddings` + : `no ${view.toUpperCase()} UMAP embeddings found for this dataset · showing a seeded demo scatter around class clusters`} +

+
+ ); +} + +function formatBenchmarkDate(dateStr: string): string { + const match = /^(\d{4})-(\d{2})-(\d{2})/.exec(dateStr); + if (!match) return dateStr; + const [, year, month, day] = match; + return `${month}/${day}/${year}`; +} + +// Same three-tier thresholds as the axis-score gauge below, on the doc's 0–10 scale. +function scoreTier(value: number): ScoreTier { + if (value >= 7.5) return 'good'; + if (value >= 5) return 'mid'; + return 'poor'; +} + +type ScoreBoxVM = { label: string; value: string; tier: ScoreTier }; + +function buildScoreBoxes(scores: AxisScores): ScoreBoxVM[] { + const entries: { label: string; value: number | null }[] = [ + { label: 'Overall', value: scores.overall }, + { label: 'Structural Quality', value: scores.structural }, + { label: 'Content Difficulty', value: scores.difficulty }, + { label: 'Diversity & Coverage', value: scores.diversity }, + { label: 'Annotation Reliability', value: scores.annotation }, + ]; + return entries + .filter((entry): entry is { label: string; value: number } => entry.value != null && !Number.isNaN(entry.value)) + .map((entry) => ({ label: entry.label, value: entry.value.toFixed(1), tier: scoreTier(entry.value) })); +} + +type ReproRowVM = { label: string; value: string }; + +function buildReproRows(info: ReproducibilityInfo | undefined): ReproRowVM[] { + if (!info) return []; + const rows: ReproRowVM[] = []; + if (info.split_seed != null) rows.push({ label: 'Split seed', value: String(info.split_seed) }); + if (info.train_ratio != null && info.val_ratio != null && info.test_ratio != null) { + rows.push({ + label: 'Train / val / test', + value: `${Math.round(info.train_ratio * 100)} / ${Math.round(info.val_ratio * 100)} / ${Math.round(info.test_ratio * 100)}`, + }); + } + if (info.embed_model) rows.push({ label: 'Embed model', value: info.embed_model }); + if (info.near_dup_threshold != null) rows.push({ label: 'Near-dup threshold', value: String(info.near_dup_threshold) }); + if (info.backbone) rows.push({ label: 'Reference backbone', value: info.backbone }); + if (info.cartography_epochs != null) { + rows.push({ + label: 'Cartography epochs', + value: info.cartography_lr != null ? `${info.cartography_epochs} (lr ${info.cartography_lr})` : String(info.cartography_epochs), + }); + } + if (info.cv_folds != null) rows.push({ label: 'CV folds', value: String(info.cv_folds) }); + return rows; +} + +function BenchmarkView({ + benchmark, + embeddings2d, + embeddings3d, +}: { + benchmark: BenchmarkData; + embeddings2d: RawEmbedPoint[] | null; + embeddings3d: RawEmbedPoint[] | null; +}) { + const cards = useMemo(() => buildMetricCards(benchmark), [benchmark]); + const scores = useMemo(() => computeScores(benchmark), [benchmark]); + const scoreBoxes = useMemo(() => buildScoreBoxes(scores), [scores]); + const reproRows = useMemo(() => buildReproRows(benchmark.reproducibility), [benchmark.reproducibility]); + const axisGroups = useMemo( + () => + METRIC_AXES.map((axis) => ({ axis, cards: cards.filter((card) => METRIC_AXIS_MAP[card.title] === axis) })).filter( + (group) => group.cards.length > 0, + ), + [cards], + ); + + return ( +
+

Last benchmarking check run: {formatBenchmarkDate(benchmark.date)}

+ + {reproRows.length > 0 && ( +
+ Reproducibility details +
+ {reproRows.map((row) => ( + + {row.label} + + {row.value} + + + ))} +
+
+ )} + + {scoreBoxes.length > 0 && ( +
+ {scoreBoxes.map((box) => ( +
+

+ {box.label} +

+

{box.value}

+
+ ))} +
+ )} + +
+ + {axisGroups.map((group) => ( +
+

{group.axis}

+
+ {group.cards.map((card) => ( + + ))} +
+
+ ))} + +
+

Visualization

+ +
+
+ ); +} + function InlineFilterGroup({ label, options, @@ -146,14 +1066,21 @@ export function DatasetMetadataModal({ open: boolean; onClose: () => void; }) { + // Declared above the Escape effect below, which has to read it — the methodology sheet + // layers on top of this modal and owns Escape while it's open. + const [showMethodology, setShowMethodology] = useState(false); + useEffect(() => { if (!open) return; const previousOverflow = document.body.style.overflow; document.body.style.overflow = 'hidden'; + // Both modals listen on `window`, so stopPropagation from the methodology sheet wouldn't + // suppress this one (same event target). Skip closing here instead, so one Escape dismisses + // only the topmost layer rather than collapsing the whole stack. const onKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') onClose(); + if (event.key === 'Escape' && !showMethodology) onClose(); }; window.addEventListener('keydown', onKeyDown); @@ -161,9 +1088,12 @@ export function DatasetMetadataModal({ document.body.style.overflow = previousOverflow; window.removeEventListener('keydown', onKeyDown); }; - }, [open, onClose]); + }, [open, onClose, showMethodology]); const datasetPerformance = useDatasetPerformance(open ? (dataset?.name ?? null) : null); + const { data: benchmark, embeddings2d, embeddings3d } = useBenchmark(open ? (dataset?.name ?? null) : null); + const [showBenchmarks, setShowBenchmarks] = useState(false); + useEffect(() => setShowBenchmarks(false), [dataset?.name, open]); const [metricTypeFilter, setMetricTypeFilter] = useState([]); const [tunedFilter, setTunedFilter] = useState([]); @@ -249,10 +1179,17 @@ export function DatasetMetadataModal({ if (!open || dataset == null) return null; + const isVlm = dataset.dataset_type === 'vlm'; + const metadataRows = [ - ['Sensor modality', formatValue(dataset.sensor_modality)], + ['Sensor modality', dataset.sensor_modality == null || dataset.sensor_modality === '' ? 'Unknown' : toDisplayLabel(dataset.sensor_modality)], ['Platform', formatValue(dataset.platform)], - ['Number of images', formatImageCount(dataset.num_images)], + ...(isVlm + ? ([ + ['Conversation format', formatValue(dataset.conversation_format)], + ['Num of samples', formatImageCount(dataset.num_rows)], + ] as const) + : ([['Number of images', formatImageCount(dataset.num_images)]] as const)), ['Size', formatBytesDecimal(dataset.zip_size_bytes)], ...(dataset.augmented_num_images != null ? ([['Augmented images', formatImageCount(dataset.augmented_num_images)]] as const) @@ -295,14 +1232,39 @@ export function DatasetMetadataModal({ )} {dataset.agricultural_task && {formatValue(dataset.agricultural_task)}} {dataset.real_or_synthetic && {formatValue(dataset.real_or_synthetic)}} - {dataset.license && {formatValue(dataset.license)}} + {dataset.license && {dataset.license}}
- +
+ {benchmark && showBenchmarks && ( + + )} + {benchmark && ( + + )} + +
+
+
{metadataRows.map(([label, value]) => (
@@ -331,7 +1293,7 @@ export function DatasetMetadataModal({
    {siteRows.map((site, index) => (
  • - {site.location && {site.location}} + {site.location && {toTitleCase(site.location)}} {site.coordinate && {site.coordinate}}
  • ))} @@ -361,6 +1323,39 @@ export function DatasetMetadataModal({ )} + {isVlm && dataset.qa_type && dataset.qa_type.length > 0 && ( +
    +

    QA Types

    +
    + {dataset.qa_type.map((value) => ( + {toTitleCase(value)} + ))} +
    +
    + )} + + {isVlm && dataset.task_dimensions && dataset.task_dimensions.length > 0 && ( +
    +

    Task Dimensions

    +
    + {dataset.task_dimensions.map((value) => ( + {toTitleCase(value)} + ))} +
    +
    + )} + + {isVlm && dataset.source_datasets && dataset.source_datasets.length > 0 && ( +
    +

    Source Datasets

    +
    + {dataset.source_datasets.map((sourceDataset) => ( + {sourceDataset} + ))} +
    +
    + )} + {cropList.length > 0 && (

    Crops

    @@ -446,6 +1441,10 @@ export function DatasetMetadataModal({ View on Hugging Face )} + {/* "View Original Dataset" is hidden for now: VLM records carry `parent_dataset` + as a bare Hugging Face repo slug (e.g. "AgroMind/AgroMind"), not a URL, so + linking it directly resolved as a relative site link and 404'd. Restore this + once the field is normalized to an absolute URL upstream. */}
)} @@ -610,7 +1609,24 @@ export function DatasetMetadataModal({
)} +
+ + {benchmark && ( +
+ +
+ )} +
+ + setShowMethodology(false)} + /> ); } diff --git a/src/components/DatasetTable.module.css b/src/components/DatasetTable.module.css index 7dca769..679329f 100644 --- a/src/components/DatasetTable.module.css +++ b/src/components/DatasetTable.module.css @@ -1,119 +1,865 @@ +.backdrop { + position: fixed; + inset: 0; + z-index: 999; + display: grid; + place-items: center; + padding: 1.25rem; + background: var(--agml-modal-overlay); + backdrop-filter: blur(10px); +} + +.modal { + width: min(1140px, 95vw); + max-height: min(88vh, 920px); + overflow: auto; + border-radius: 12px; + border: 1px solid var(--agml-border-strong); + background: var(--agml-surface-strong); + box-shadow: var(--agml-shadow-strong); + color: var(--agml-text); + padding: 2rem; + perspective: 2000px; +} + +.header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + margin-bottom: 1.1rem; +} + +.title { + font-family: var(--ifm-code-font-family); + font-weight: 700; + font-size: 1.25rem; + margin: 0 0 0.5rem; + line-height: 1.2; + overflow-wrap: anywhere; +} + +.headerBadges { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} + +.taskBadge { + font-family: var(--ifm-code-font-family); + font-size: 0.65rem; + padding: 0.15rem 0.5rem; + border-radius: 4px; + display: inline-block; + white-space: nowrap; +} + +.badgeClassification { + background: var(--agml-badge-classification-bg); + color: var(--agml-badge-classification-fg); +} + +.badgeDetection { + background: var(--agml-badge-detection-bg); + color: var(--agml-badge-detection-fg); +} + +.badgeSegmentation { + background: var(--agml-badge-segmentation-bg); + color: var(--agml-badge-segmentation-fg); +} + +.badgeOther { + background: var(--agml-badge-other-bg); + color: var(--agml-badge-other-fg); +} + +.tag { + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + padding: 0.2rem 0.55rem; + border-radius: 4px; + display: inline-block; + white-space: nowrap; + background: var(--agml-tag-bg); + color: var(--agml-tag-fg); +} + +.closeButton { + flex: 0 0 auto; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid var(--agml-border-strong); + border-radius: 6px; + background: var(--agml-surface-soft); + color: var(--agml-text); + padding: 0; + font-size: 15px; + line-height: 1; + cursor: pointer; +} + +.closeButton:hover, +.closeButton:focus-visible { + background: var(--agml-border); + outline: none; +} + +.headerActions { + flex: 0 0 auto; + display: flex; + align-items: center; + gap: 0.6rem; +} + +.benchmarkToggle { + flex: 0 0 auto; + border: 1px solid var(--ifm-color-primary); + border-radius: 999px; + background: var(--agml-accent-soft); + color: var(--ifm-color-primary); + padding: 0.5rem 1rem; + font-size: 0.78rem; + font-weight: 600; + cursor: pointer; + white-space: nowrap; +} + +.benchmarkToggle:hover, +.benchmarkToggle:focus-visible { + background: var(--ifm-color-primary); + color: var(--agml-surface-strong); + outline: none; +} + +.flipper { + position: relative; + transform-style: preserve-3d; + transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); +} + +.flipperFlipped { + transform: rotateY(180deg); +} + +.face { + backface-visibility: hidden; +} + +.faceHidden { + visibility: hidden; + pointer-events: none; +} + +.faceBack { + position: absolute; + inset: 0; + transform: rotateY(180deg); +} + +.metricCardGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: 1rem; + margin: 1rem 0 1.5rem; +} + +.metricCard { + padding: 1rem 1.1rem; + border-radius: 10px; + border: 1px solid var(--agml-border); + background: var(--agml-surface-soft); + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.metricCardHeader { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.6rem; +} + +.metricCardTitle { + margin: 0; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--agml-muted); +} + +.metricCardBadge { + font-family: var(--ifm-code-font-family); + font-size: 0.66rem; + color: var(--agml-muted); + background: var(--agml-tag-bg); + border-radius: 999px; + padding: 0.2rem 0.55rem; + white-space: nowrap; +} + +.metricSkipped { + margin: 0; + font-size: 0.84rem; + font-style: italic; + color: var(--agml-muted); +} + +.metricBars { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.metricBarRow { + display: grid; + grid-template-columns: 112px 1fr 56px; + align-items: center; + gap: 0.6rem; +} + +.metricBarLabel { + font-size: 0.8rem; + color: var(--agml-text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.metricBarTrack { + height: 8px; + border-radius: 999px; + background: var(--agml-tag-bg); + overflow: hidden; +} + +.metricBarFill { + height: 100%; + border-radius: 999px; + background: var(--ifm-color-primary); +} + +.metricSignedTrack { + position: relative; + height: 8px; + border-radius: 999px; + background: var(--agml-tag-bg); + overflow: hidden; +} + +.metricSignedMidline { + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: 1px; + background: var(--agml-border-strong); +} + +.metricSignedFill { + position: absolute; + top: 0; + height: 100%; + border-radius: 999px; +} + +.metricBarValue { + font-size: 0.82rem; + font-weight: 600; + color: var(--agml-text); + text-align: right; + white-space: nowrap; +} + +.metricFooterStats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); + gap: 0.6rem; + padding-top: 0.6rem; + border-top: 1px solid var(--agml-border); +} + +.statTileGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); + gap: 0.6rem; +} + +.statTile { + border: 1px solid var(--agml-border); + border-radius: 8px; + padding: 0.65rem 0.8rem; + background: var(--agml-surface-soft); +} + +.statTileLabel { + margin: 0 0 0.3rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--agml-muted); +} + +.statTileValue { + margin: 0; + font-size: 0.95rem; + font-weight: 600; + color: var(--agml-text); +} + +.embedHeader { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + flex-wrap: wrap; +} + +.embedSubtitle { + margin: 0.2rem 0 0; + font-size: 0.82rem; + color: var(--agml-muted); +} + +.embedToggle { + display: inline-flex; + border-radius: 999px; + background: var(--agml-tag-bg); + padding: 4px; + gap: 4px; +} + +.embedToggleButton { + border: none; + border-radius: 999px; + padding: 0.4rem 0.9rem; + font-size: 0.82rem; + font-weight: 600; + cursor: pointer; + font-family: inherit; + background: transparent; + color: var(--agml-muted); +} + +.embedToggleActive { + background: var(--ifm-color-primary); + color: var(--agml-surface-strong); +} + +.embedViewport { + position: relative; + margin-top: 0.9rem; + height: 340px; + border-radius: 12px; + border: 1px solid var(--agml-border); + background-color: var(--agml-surface-soft); + background-image: + linear-gradient(var(--agml-border) 1px, transparent 1px), + linear-gradient(90deg, var(--agml-border) 1px, transparent 1px); + background-size: 34px 34px; + background-position: center; + overflow: hidden; +} + +.embedDragHint { + position: absolute; + left: 14px; + bottom: 12px; + margin: 0; + font-size: 0.7rem; + color: var(--agml-muted); + font-family: var(--ifm-code-font-family); +} + +.embedAxisTickX { + position: absolute; + bottom: 4px; + transform: translateX(-50%); + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + color: var(--agml-muted); + pointer-events: none; +} + +.embedAxisTickY { + position: absolute; + left: 4px; + transform: translateY(-50%); + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + color: var(--agml-muted); + pointer-events: none; +} + +.embedLegend { + display: flex; + flex-wrap: wrap; + gap: 1rem; + margin-top: 0.9rem; +} + +.embedLegendItem { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-size: 0.8rem; + color: var(--agml-text); +} + +.embedLegendDot { + display: inline-block; + width: 9px; + height: 9px; + border-radius: 50%; +} + +.embedNote { + margin: 0.9rem 0 0; + font-size: 0.74rem; + color: var(--agml-muted); + font-family: var(--ifm-code-font-family); +} + +.detailGrid { + display: grid; + gap: 0.85rem; + margin: 1.25rem 0 1.75rem; +} + +.detailItem { + min-width: 0; +} + +.detailLabel { + margin: 0 0 0.3rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + letter-spacing: 0.05em; + text-transform: uppercase; + color: var(--agml-muted); +} + +.detailValue { + margin: 0; + font-size: 0.82rem; + line-height: 1.4; + color: var(--agml-text); + overflow-wrap: anywhere; +} + .section { - margin-top: 1.5rem; - padding: 1.5rem; - border-radius: 20px; - background: var(--agml-surface); - border: 1px solid var(--agml-border); - box-shadow: var(--agml-shadow); - color: var(--agml-text); + margin-bottom: 1.75rem; +} + +.sectionTitle { + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--agml-muted); + margin: 0 0 0.65rem; +} + +.bodyText { + margin: 0; + color: var(--agml-text); + line-height: 1.5; + overflow-wrap: anywhere; +} + +.bodyText + .bodyText { + margin-top: 0.5rem; +} + +.inlineLabel { + color: var(--agml-muted); + font-weight: 600; +} + +.badgeWrap { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} + +.expandButton { + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + padding: 0.2rem 0.55rem; + border-radius: 4px; + background: transparent; + border: 1px dashed var(--agml-border-strong); + color: var(--agml-muted); + cursor: pointer; +} + +.expandButton:hover, +.expandButton:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--agml-text); + outline: none; +} + +.figure { + margin: 0; +} + +.exampleImage { + display: block; + width: 100%; + max-height: 65vh; + object-fit: contain; + border-radius: 8px; + background: var(--agml-surface-soft); +} + +.snippetRow { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 0.75rem; + background: var(--agml-page-bg); + border: 1px solid var(--agml-border); + border-radius: 6px; + padding: 0.6rem 0.85rem; + margin-top: 0.6rem; +} + +.snippetCode { + font-family: var(--ifm-code-font-family); + font-size: 0.78rem; + line-height: 1.6; + color: var(--agml-text); + overflow-x: auto; + white-space: pre; +} + +.snippetCopyButton { + flex-shrink: 0; + align-self: center; + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + padding: 0.3rem 0.65rem; + border-radius: 5px; + border: 1px solid var(--agml-border-strong); + background: transparent; + color: var(--agml-muted); + cursor: pointer; } -.controls { - display: flex; - flex-wrap: wrap; - align-items: flex-end; - gap: 1rem; - justify-content: space-between; - margin-bottom: 1rem; +.snippetCopyButton:hover, +.snippetCopyButton:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--agml-text); + outline: none; } -.count { - font-weight: 600; - margin: 0; - color: var(--agml-text); +.linkRow { + display: flex; + flex-wrap: wrap; + gap: 0.6rem; + margin-bottom: 1.75rem; } -.helper { - margin: 0.35rem 0 0; - color: var(--agml-muted); - font-size: 0.9rem; +.externalLink, +.hfLink { + display: inline-flex; + width: fit-content; + border-radius: 6px; + padding: 0.5rem 1rem; + border: 1px solid var(--agml-border-strong); + background: var(--agml-tag-bg); + color: var(--agml-tag-fg); + text-decoration: none; + font-size: 0.82rem; + cursor: pointer; } -.searchLabel { - display: flex; - flex-direction: column; - gap: 0.35rem; - font-size: 0.8rem; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--agml-muted); +.externalLink:hover, +.externalLink:focus-visible, +.hfLink:hover, +.hfLink:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + outline: none; } -.searchInput { - min-width: 220px; - border-radius: 999px; - border: 1px solid var(--agml-border-strong); - padding: 0.6rem 0.9rem; - font-size: 0.9rem; - background: var(--agml-surface-strong); - color: var(--agml-text); +.leaderboardWrap { + overflow-x: auto; } -.searchInput:focus { - outline: none; - border-color: var(--ifm-color-primary); - box-shadow: 0 0 0 3px var(--agml-accent-soft); +.filterBar { + display: flex; + flex-wrap: wrap; + align-items: flex-end; + gap: 1rem; + margin-bottom: 0.9rem; + padding: 0.75rem; + border-radius: 8px; + border: 1px solid var(--agml-border); + background: var(--agml-surface-soft); +} + +.filterGroup { + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.filterGroupLabel { + margin: 0; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--agml-muted); +} + +.filterGroupOptions { + display: flex; + flex-wrap: wrap; + gap: 0.65rem; +} + +.filterCheckboxRow { + display: flex; + align-items: center; + gap: 0.35rem; + font-size: 0.75rem; + cursor: pointer; + color: var(--agml-text); + white-space: nowrap; +} + +.checkbox { + appearance: none; + -webkit-appearance: none; + width: 15px; + height: 15px; + flex-shrink: 0; + border-radius: 4px; + border: 1.5px solid var(--agml-border-strong); + background: var(--agml-page-bg); + position: relative; + cursor: pointer; + transition: background 0.12s, border-color 0.12s; +} + +.checkbox:hover { + border-color: var(--agml-muted); +} + +.checkbox:checked { + background: var(--ifm-color-primary); + border-color: var(--ifm-color-primary); +} + +.checkbox::after { + content: ''; + position: absolute; + left: 3.5px; + top: 0.5px; + width: 4px; + height: 7px; + border-style: solid; + border-width: 0 2px 2px 0; + border-color: var(--agml-page-bg); + transform: rotate(45deg); + opacity: 0; +} + +.checkbox:checked::after { + opacity: 1; +} + +.filterRange { + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.filterRangeLabel { + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--agml-muted); +} + +.filterRangeInput { + width: 96px; + border-radius: 5px; + border: 1px solid var(--agml-border-strong); + padding: 0.4rem 0.55rem; + background: var(--agml-surface-strong); + color: var(--agml-text); + font-family: var(--ifm-code-font-family); + font-size: 0.75rem; +} + +.clearFiltersButton { + border: 1px solid var(--agml-border-strong); + background: transparent; + border-radius: 999px; + padding: 0.45rem 0.9rem; + font-size: 0.78rem; + color: var(--agml-text); + cursor: pointer; + white-space: nowrap; } .tableWrap { - overflow-x: auto; - border-radius: 16px; - background: var(--agml-surface-strong); - border: 1px solid var(--agml-border); + border: 1px solid var(--agml-border); + border-radius: 8px; + overflow-x: auto; +} + +.leaderboardTable { + width: 100%; + min-width: 960px; + font-size: 0.78rem; +} + +.tableRow { + display: grid; + grid-template-columns: 42px minmax(150px, 1fr) 120px 70px 125px 130px 120px 65px; + gap: 0.5rem; + align-items: start; +} + +.tableRow[role='row']:first-child { + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--agml-muted); + background: var(--agml-tag-bg); + padding: 0.5rem 0.75rem; + align-items: center; } -.table { - width: 100%; - border-collapse: collapse; - font-size: 0.95rem; +.tableRow:not(:first-child) { + padding: 0.55rem 0.75rem; + border-top: 1px solid var(--agml-border); } -.table th, -.table td { - padding: 0.8rem 1rem; - border-bottom: 1px solid var(--agml-border); - text-align: left; +.tableRow > [role='columnheader'] { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -.datasetButton { - appearance: none; - border: none; - background: transparent; - color: var(--ifm-color-primary); - padding: 0; - font: inherit; - cursor: pointer; - text-align: left; +.simpleCell { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: block; } -.datasetButton:hover, -.datasetButton:focus-visible { - text-decoration: underline; +.rankCell { + font-family: var(--ifm-code-font-family); + color: var(--agml-muted); } -.datasetButton:focus-visible { - outline: 2px solid var(--ifm-color-primary); - outline-offset: 3px; - border-radius: 4px; +.modelButton { + background: none; + border: none; + padding: 0; + max-width: 100%; + font-family: var(--ifm-code-font-family); + font-weight: 500; + color: var(--agml-text); + text-decoration: underline dashed var(--agml-muted); + text-decoration-thickness: 1px; + text-underline-offset: 3px; + cursor: pointer; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: block; } -.table th { - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--agml-muted); - background: var(--agml-surface-soft); +.scoresCell { + display: flex; + flex-direction: column; + gap: 0.15rem; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + color: var(--ifm-color-primary); } -.num { - text-align: right; - font-variant-numeric: tabular-nums; +.scoresCell span { + white-space: nowrap; } -.status { - color: var(--agml-muted); +.stackCell { + display: flex; + flex-direction: column; + gap: 0.15rem; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + color: var(--agml-muted); } -:global(html[data-theme='dark']) .tableWrap { - background: var(--agml-surface-strong); +.stackCell span { + white-space: nowrap; +} + +.notesRow { + padding: 0.5rem 0.75rem 0.75rem 2.6rem; + background: var(--agml-surface-soft); + border-top: 1px dashed var(--agml-border); + font-size: 0.75rem; + line-height: 1.5; +} + +.notesLabel { + margin: 0 0 0.2rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--agml-muted); +} + +.notesText { + margin: 0; + color: var(--agml-text); + line-height: 1.5; + overflow-wrap: anywhere; +} + +.leaderboardTable a { + color: var(--ifm-color-primary); + font-weight: 600; + text-decoration: none; +} + +.leaderboardTable a:hover, +.leaderboardTable a:focus-visible { + text-decoration: underline; +} + +@media (max-width: 720px) { + .modal { + padding: 1.25rem; + border-radius: 10px; + } + + .header { + flex-direction: column; + } + + .detailGrid { + grid-template-columns: repeat(2, 1fr) !important; + } } diff --git a/src/components/EmbeddingPlot2D.tsx b/src/components/EmbeddingPlot2D.tsx new file mode 100644 index 0000000..4ea9299 --- /dev/null +++ b/src/components/EmbeddingPlot2D.tsx @@ -0,0 +1,145 @@ +import { useMemo, useRef } from 'react'; +import BrowserOnly from '@docusaurus/BrowserOnly'; +import { toTitleCase } from '../lib/datasets'; +import { usePlotlyChrome } from '../lib/plotlyChrome'; +import type { EmbedPoint } from './DatasetMetadataModal'; +import styles from './DatasetMetadataModal.module.css'; + +// scattergl (WebGL) instead of the SVG scatter trace — SVG puts one DOM node per point and +// bogs down well before real dataset sizes. See EmbeddingPlot3D for the SSR/bundle notes; +// both views share the same plotly.js-dist-min instance. +function buildTraces( + points: EmbedPoint[], + colorMap: Record, + hoverlabel: { bgcolor: string; bordercolor: string; font: { color: string } }, + markerRing: string, +) { + return Object.keys(colorMap).map((group) => { + const subset = points.filter((p) => p.cls === group); + return { + type: 'scattergl', + mode: 'markers', + name: toTitleCase(group), + x: subset.map((p) => p.x), + y: subset.map((p) => p.y), + // A thin ring in the panel's own surface color separates overlapping points instead + // of them just fusing into a blob at the edges. + marker: { size: 7, color: colorMap[group], opacity: 0.85, line: { width: 1, color: markerRing } }, + text: subset.map((p) => `${toTitleCase(p.cls)} · ${p.split} · #${p.index}`), + hovertemplate: '%{text}', + // Set per-trace, not just at the layout level — Plotly's hoverlabel.bgcolor + // default is "auto" (derived from the trace/marker color), which otherwise wins. + hoverlabel, + }; + }); +} + +export function EmbeddingPlot2D({ + points, + colorMap, +}: { + points: EmbedPoint[]; + colorMap: Record; +}) { + const chrome = usePlotlyChrome(); + const hoverlabel = useMemo( + () => ({ + bgcolor: chrome.tooltipBg, + bordercolor: chrome.tooltipBorder, + font: { color: chrome.tooltipText }, + }), + [chrome], + ); + const traces = useMemo( + () => buildTraces(points, colorMap, hoverlabel, chrome.markerRing), + [points, colorMap, hoverlabel, chrome.markerRing], + ); + + // Captured once the plot mounts, so the "Reset view" button can relayout it directly. + const plotlyRef = useRef(null); + const graphDivRef = useRef(null); + const handleResetView = () => { + if (!plotlyRef.current || !graphDivRef.current) return; + plotlyRef.current.relayout(graphDivRef.current, { 'xaxis.autorange': true, 'yaxis.autorange': true }); + }; + + // Recessive hairline grid with numeric ticks — gives the cloud a spatial reference frame + // instead of floating in a void. A *fresh* object per axis — Plotly's internal axis + // bookkeeping got confused when xaxis/yaxis pointed at the literal same object (identical + // autoranged x/y spans regardless of actual data, and scroll-zoom anchoring at the wrong + // point), so this is a factory, not a shared constant. + const makeAxis = () => ({ + showgrid: true, + gridcolor: chrome.grid, + zeroline: false, + showticklabels: true, + linecolor: chrome.grid, + tickfont: { color: chrome.text, family: chrome.fontFamily, size: 10 }, + }); + + return ( +
+ Loading 2D view…
}> + {() => { + const Plotly = require('plotly.js-dist-min'); + plotlyRef.current = Plotly; + const createPlotlyComponent = require('react-plotly.js/factory').default; + const Plot = createPlotlyComponent(Plotly); + return ( + { + graphDivRef.current = graphDiv; + }} + onUpdate={(_figure: unknown, graphDiv: HTMLElement) => { + graphDivRef.current = graphDiv; + }} + layout={{ + autosize: true, + margin: { l: 35, r: 15, t: 15, b: 30 }, + paper_bgcolor: 'transparent', + plot_bgcolor: 'transparent', + // x/y autorange independently (no scaleanchor) so the plot fills the panel's + // actual aspect ratio instead of leaving gutters to preserve a 1:1 scale. + xaxis: makeAxis(), + yaxis: makeAxis(), + showlegend: false, + hoverlabel: { + bgcolor: chrome.tooltipBg, + bordercolor: chrome.tooltipBorder, + font: { color: chrome.tooltipText }, + }, + // Drag disabled outright — Plotly's default 'zoom' draws a rubber-band select + // box, and 'pan' has a rendering-pipeline quirk where the SVG grid/tick layer + // only catches up to the WebGL point layer at drag-end instead of tracking it + // live, which reads as the grid "jumping" mid-drag. Scroll-zoom (below) has + // neither problem since each wheel tick is a discrete, fully-committed relayout. + dragmode: false, + // A constant uirevision tells Plotly to keep whatever zoom/pan the user set + // across re-renders. Without it, any re-render (e.g. a theme toggle recomputing + // chrome colors) passes a "fresh" layout with only autorange requested, and + // Plotly.react() reads that as "reset the view" — the zoom snapping back you saw. + uirevision: 'embedding-2d', + }} + // Plotly's cartesian plots default scrollZoom to false (only mapbox/geo get it + // for free) — this adds the scroll-wheel zoom people expect from a scatter plot. + config={{ displayModeBar: false, responsive: true, scrollZoom: true }} + style={{ width: '100%', height: '100%' }} + useResizeHandler + /> + ); + }} + + + + ); +} + +export default EmbeddingPlot2D; diff --git a/src/components/EmbeddingPlot3D.tsx b/src/components/EmbeddingPlot3D.tsx new file mode 100644 index 0000000..b28fd34 --- /dev/null +++ b/src/components/EmbeddingPlot3D.tsx @@ -0,0 +1,165 @@ +import { useMemo, useRef } from 'react'; +import BrowserOnly from '@docusaurus/BrowserOnly'; +import { toTitleCase } from '../lib/datasets'; +import { usePlotlyChrome } from '../lib/plotlyChrome'; +import type { EmbedPoint } from './DatasetMetadataModal'; +import styles from './DatasetMetadataModal.module.css'; + +// Plotly's default eye distance (1.25 on each axis) leaves a lot of headroom around the +// cube — this pulls the camera in so it fills the panel. Shared with the reset handler below +// so "Reset view" restores exactly this framing, not Plotly's own (more zoomed-out) default. +const DEFAULT_CAMERA_EYE = { x: 0.85, y: 0.85, z: 0.85 }; + +// chrome.markerRing is a solid "rgb(r, g, b)" string (no alpha channel) — wrapping it as a +// translucent rgba() lets the 3D ring fade in gradually as points stack, instead of a solid +// stroke that saturates to a flat black smear after only a few overlaps. +function withAlpha(rgb: string, alpha: number): string { + const match = /rgb\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)\s*\)/.exec(rgb); + if (!match) return rgb; + const [, r, g, b] = match; + return `rgba(${r}, ${g}, ${b}, ${alpha})`; +} + +// plotly.js touches `window` at import time, which breaks Docusaurus's build-time SSR pass — +// the require() calls for it must stay inside a children function so they're +// never evaluated outside the browser. This uses the full plotly.js-dist-min bundle (shared +// with EmbeddingPlot2D's scattergl trace) since 2D and 3D need different partial-bundle trace +// families (gl2d vs gl3d) that no single partial bundle covers together. +function buildTraces( + points: EmbedPoint[], + colorMap: Record, + hoverlabel: { bgcolor: string; bordercolor: string; font: { color: string } }, + markerRing: string, +) { + return Object.keys(colorMap).map((group) => { + const subset = points.filter((p) => p.cls === group); + return { + type: 'scatter3d', + mode: 'markers', + name: toTitleCase(group), + x: subset.map((p) => p.x), + y: subset.map((p) => p.y), + z: subset.map((p) => p.z), + // A full-opacity fill would flatten a dense cluster into one hard-edged silhouette — + // dropping opacity lets overlapping points layer into a soft density gradient instead, + // which reads as a point cloud rather than a sticker. The ring is real but very faint + // (low alpha), so a couple of overlapping points still get a crisp edge without + // hundreds of them compounding back into the solid dark smear this replaced. + marker: { size: 4, color: colorMap[group], opacity: 0.72, line: { width: 0.5, color: withAlpha(markerRing, 0.22) } }, + text: subset.map((p) => `${toTitleCase(p.cls)} · ${p.split} · #${p.index}`), + hovertemplate: '%{text}', + // Set per-trace, not just at the layout level — Plotly's hoverlabel.bgcolor + // default is "auto" (derived from the trace/marker color), which otherwise wins. + hoverlabel, + }; + }); +} + +export function EmbeddingPlot3D({ + points, + colorMap, +}: { + points: EmbedPoint[]; + colorMap: Record; +}) { + const chrome = usePlotlyChrome(); + const hoverlabel = useMemo( + () => ({ + bgcolor: chrome.tooltipBg, + bordercolor: chrome.tooltipBorder, + font: { color: chrome.tooltipText }, + }), + [chrome], + ); + const traces = useMemo( + () => buildTraces(points, colorMap, hoverlabel, chrome.markerRing), + [points, colorMap, hoverlabel, chrome.markerRing], + ); + + // Captured once the plot mounts, so the "Reset view" button can relayout it directly. + // Double-click (Plotly's usual reset gesture) resets 2D axis ranges but does *not* reset + // the 3D camera, so an explicit control is the only reliable way to get back here. + const plotlyRef = useRef(null); + const graphDivRef = useRef(null); + const handleResetView = () => { + if (!plotlyRef.current || !graphDivRef.current) return; + plotlyRef.current.relayout(graphDivRef.current, { + 'scene.camera.eye': DEFAULT_CAMERA_EYE, + 'scene.xaxis.autorange': true, + 'scene.yaxis.autorange': true, + 'scene.zaxis.autorange': true, + }); + }; + + // Recessive hairline wireframe (one step off the panel surface) with numeric ticks — + // gives the cloud a spatial reference frame instead of floating in a void. A *fresh* + // object per axis, not a shared constant — see EmbeddingPlot2D for why (Plotly's internal + // axis bookkeeping gets confused when multiple axes point at the literal same object). + const makeAxis = () => ({ + showgrid: true, + gridcolor: chrome.grid, + zeroline: false, + showticklabels: true, + linecolor: chrome.grid, + tickfont: { color: chrome.text, family: chrome.fontFamily, size: 10 }, + }); + + return ( +
+ Loading 3D view…
}> + {() => { + const Plotly = require('plotly.js-dist-min'); + plotlyRef.current = Plotly; + const createPlotlyComponent = require('react-plotly.js/factory').default; + const Plot = createPlotlyComponent(Plotly); + return ( + { + graphDivRef.current = graphDiv; + }} + onUpdate={(_figure: unknown, graphDiv: HTMLElement) => { + graphDivRef.current = graphDiv; + }} + layout={{ + autosize: true, + margin: { l: 20, r: 20, t: 15, b: 35 }, + paper_bgcolor: 'transparent', + plot_bgcolor: 'transparent', + scene: { + aspectmode: 'cube', + xaxis: makeAxis(), + yaxis: makeAxis(), + zaxis: makeAxis(), + camera: { eye: DEFAULT_CAMERA_EYE }, + }, + showlegend: false, + hoverlabel: { + bgcolor: chrome.tooltipBg, + bordercolor: chrome.tooltipBorder, + font: { color: chrome.tooltipText }, + }, + // Keeps whatever camera orbit/zoom the user set across re-renders instead of + // snapping back to the default eye position — see EmbeddingPlot2D for why. + uirevision: 'embedding-3d', + }} + config={{ displayModeBar: false, responsive: true }} + style={{ width: '100%', height: '100%' }} + useResizeHandler + /> + ); + }} +
+ + + ); +} + +export default EmbeddingPlot3D; diff --git a/src/components/ScoringMethodologyModal.module.css b/src/components/ScoringMethodologyModal.module.css new file mode 100644 index 0000000..854d503 --- /dev/null +++ b/src/components/ScoringMethodologyModal.module.css @@ -0,0 +1,546 @@ +.backdrop { + position: fixed; + inset: 0; + z-index: 1050; + display: grid; + place-items: center; + padding: 1.25rem; + background: var(--agml-modal-overlay); + backdrop-filter: blur(10px); +} + +.panel { + width: min(980px, 100%); + max-height: min(90vh, 960px); + overflow-y: auto; + border-radius: 14px; + border: 1px solid var(--agml-border-strong); + background: var(--agml-surface-strong); + box-shadow: var(--agml-shadow-strong); + color: var(--agml-text); + padding: 2rem; + box-sizing: border-box; +} + +.header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + padding-bottom: 1.2rem; + margin-bottom: 1.2rem; + border-bottom: 1px solid var(--agml-border); +} + +.eyebrow { + margin: 0 0 0.3rem; + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--ifm-color-primary); +} + +.title { + margin: 0 0 0.4rem; + font-size: 1.4rem; + font-weight: 700; + color: var(--agml-text); +} + +.subtitle { + margin: 0; + font-size: 0.85rem; + color: var(--agml-muted); + max-width: 560px; + line-height: 1.5; + text-align: justify; +} + +.closeButton { + flex: 0 0 auto; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid var(--agml-border-strong); + border-radius: 8px; + background: var(--agml-surface-soft); + color: var(--agml-text); + padding: 0; + font-size: 16px; + line-height: 1; + cursor: pointer; +} + +.closeButton:hover, +.closeButton:focus-visible { + background: var(--agml-border); + outline: none; +} + +.tabRow { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; + margin-bottom: 1.75rem; +} + +.tab { + border: 1px solid var(--agml-border); + border-radius: 999px; + padding: 0.4rem 0.9rem; + font-size: 0.78rem; + font-weight: 600; + font-family: var(--ifm-code-font-family); + cursor: pointer; + background: transparent; + color: var(--agml-muted); +} + +.tab:hover, +.tab:focus-visible { + border-color: var(--ifm-color-primary); + color: var(--agml-text); + outline: none; +} + +.tabActive, +.tabActive:hover { + border-color: var(--ifm-color-primary); + background: var(--ifm-color-primary); + color: var(--agml-page-bg); +} + +.sectionTitle { + font-family: var(--ifm-code-font-family); + font-size: 0.85rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--agml-text); + margin: 0 0 0.6rem; +} + +.bodyText { + font-size: 0.88rem; + color: var(--agml-muted); + line-height: 1.55; + margin: 0 0 0.7rem; + text-align: justify; +} + +.bodyText:last-child { + margin-bottom: 0; +} + +.overallSection { + margin-bottom: 2rem; + padding: 1.2rem 1.3rem; + border-radius: 10px; + border: 1px solid var(--agml-border); + background: var(--agml-surface-soft); +} + +.weightRow { + display: flex; + gap: 0.6rem; + flex-wrap: wrap; + margin: 0.9rem 0 1rem; +} + +.weightTile { + flex: 1 1 0; + min-width: 140px; + border-radius: 8px; + border: 1px solid var(--agml-border); + border-top: 6px solid var(--axis-accent); + padding: 0.7rem 0.8rem; + background: var(--agml-surface-strong); + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.weightPct { + font-size: 1.1rem; + font-weight: 700; + color: var(--agml-text); +} + +.weightLabel { + font-family: var(--ifm-code-font-family); + font-size: 0.66rem; + color: var(--agml-muted); + line-height: 1.3; +} + +.formulaBox { + font-family: var(--ifm-code-font-family); + font-size: 0.8rem; + color: var(--agml-text); + background: var(--agml-tag-bg); + border: 1px solid var(--agml-border); + border-radius: 8px; + padding: 0.65rem 0.85rem; + line-height: 1.5; + white-space: pre-wrap; + overflow-wrap: anywhere; + margin: 0 0 0.7rem; +} + +.thresholdLegend { + display: flex; + gap: 1.1rem; + flex-wrap: wrap; + margin-top: 0.9rem; +} + +.thresholdItem { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-size: 0.78rem; + color: var(--agml-text); +} + +.thresholdDot { + display: inline-block; + width: 9px; + height: 9px; + border-radius: 50%; + flex-shrink: 0; +} + +.thresholdGood { + background: var(--ifm-color-primary); +} + +.thresholdFair { + background: var(--agml-caution-text); +} + +.thresholdPoor { + background: var(--agml-warning-text); +} + +.scaleNote { + margin: 0.9rem 0 0; + font-size: 0.74rem; + color: var(--agml-muted); + font-style: italic; + line-height: 1.5; + text-align: justify; +} + +.axisSection { + margin-bottom: 2rem; +} + +.axisTitle { + margin: 0 0 0.4rem; + font-size: 1.05rem; + font-weight: 700; + color: var(--agml-text); + padding-left: 0.7rem; + border-left: 4px solid var(--axis-accent); +} + +/* 4 tracks with every card spanning 2 (so 2 cards per row) instead of auto-fit — matches the + wide-card pattern already used for the bar-chart cards on the main benchmark view, and gives + each card enough width that its paragraphs stop wrapping into a narrow ladder. */ +.metricGrid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1rem; + margin-top: 0.9rem; +} + +.metricCard { + grid-column: span 2; + padding: 1rem 1.1rem; + border-radius: 10px; + border: 1px solid var(--agml-border); + border-top: 5px solid var(--axis-accent); + background: var(--agml-surface-soft); + display: flex; + flex-direction: column; + gap: 0.7rem; + /* Grid items default to min-width: auto, which lets long unwrapped content (the weight tag + below) force the card wider than its grid track instead of wrapping inside it. */ + min-width: 0; +} + +.metricCardPenalty { + grid-column: span 2; + padding: 1rem 1.1rem; + border-radius: 10px; + border: 1px solid var(--agml-border); + border-top: 5px solid var(--agml-warning-text); + background: var(--agml-surface-soft); + display: flex; + flex-direction: column; + gap: 0.7rem; + /* Grid items default to min-width: auto, which lets long unwrapped content (the weight tag + below) force the card wider than its grid track instead of wrapping inside it. */ + min-width: 0; +} + +.metricCardHeader { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 0.6rem; + /* The badge group can be wider than the title's remaining space (e.g. "Subtracted, up to 2 + points" next to "Cross Split Contamination Penalty") — wrapping it to its own line below + the title keeps it inside the card instead of overflowing past the right edge. */ + flex-wrap: wrap; +} + +.metricName { + margin: 0; + font-size: 0.95rem; + font-weight: 700; + color: var(--agml-text); +} + +.badgeGroup { + display: flex; + gap: 0.35rem; + flex-wrap: wrap; + justify-content: flex-end; + flex: 0 0 auto; + max-width: 100%; +} + +.penaltyBadge { + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + padding: 0.18rem 0.5rem; + border-radius: 4px; + background: var(--agml-warning-soft); + color: var(--agml-warning-text); + text-transform: uppercase; + letter-spacing: 0.04em; + white-space: nowrap; +} + +.weightTag { + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + padding: 0.18rem 0.5rem; + border-radius: 4px; + background: var(--agml-tag-bg); + color: var(--agml-muted); + white-space: nowrap; +} + +.fieldLabel { + margin: 0 0 0.2rem; + font-family: var(--ifm-code-font-family); + font-size: 0.62rem; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--agml-muted); +} + +.fieldText { + margin: 0; + font-size: 0.83rem; + color: var(--agml-text); + line-height: 1.55; + text-align: justify; + overflow-wrap: anywhere; +} + +.pendingNote { + margin: 0; + font-size: 0.78rem; + color: var(--agml-muted); + font-style: italic; + padding: 0.5rem 0.7rem; + background: var(--agml-tag-bg); + border-radius: 6px; + text-align: justify; +} + +.placeholderCard { + margin-top: 0.9rem; + padding: 1.4rem; + border-radius: 10px; + border: 1px dashed var(--agml-border-strong); + background: var(--agml-surface-soft); + text-align: center; +} + +.placeholderText { + margin: 0; + font-size: 0.85rem; + color: var(--agml-muted); + font-style: italic; + text-align: justify; +} + +.axisFormulaFooter { + margin-top: 1rem; + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.axisFormulaFooter .formulaBox { + margin: 0; +} + +.axisFormulaBox { + border-color: var(--axis-accent); + font-weight: 600; +} + +/* Structural Quality reuses the site's primary green (their hues already match) and Annotation + Reliability reuses the caution amber — only Content Difficulty and Diversity & Coverage need + their own tokens. Defined once here and consumed via var(--axis-accent) by every element that + needs this axis's accent color, instead of four near-duplicate rule sets. */ +.axisStructural { + --axis-accent: var(--ifm-color-primary); +} + +.axisDifficulty { + --axis-accent: var(--agml-axis-difficulty); +} + +.axisDiversity { + --axis-accent: var(--agml-axis-diversity); +} + +.axisAnnotation { + --axis-accent: var(--agml-caution-text); +} + +.footerSection { + margin-top: 0.5rem; +} + +.antiGamingList { + margin: 0 0 1.2rem; + display: flex; + flex-direction: column; + gap: 0.55rem; +} + +.antiGamingItem { + display: flex; + gap: 0.55rem; + align-items: flex-start; +} + +.antiGamingMarker { + flex: 0 0 auto; + color: var(--ifm-color-primary); + font-size: 0.8rem; + line-height: 1.5; +} + +.antiGamingText { + margin: 0; + font-size: 0.82rem; + color: var(--agml-muted); + line-height: 1.5; + text-align: justify; +} + +.fieldRefDetails { + border: 1px solid var(--agml-border); + border-radius: 8px; + padding: 0.7rem 0.9rem; + background: var(--agml-surface-soft); +} + +.fieldRefSummary { + cursor: pointer; + font-family: var(--ifm-code-font-family); + font-size: 0.74rem; + font-weight: 600; + color: var(--agml-text); +} + +.fieldRefSummary:hover, +.fieldRefSummary:focus-visible { + color: var(--ifm-color-primary); + outline: none; +} + +.fieldRefGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 0.4rem; + margin-top: 0.7rem; +} + +.fieldRefRow { + display: flex; + justify-content: space-between; + gap: 0.6rem; + font-family: var(--ifm-code-font-family); + font-size: 0.72rem; + padding: 0.25rem 0.1rem; + border-bottom: 1px solid var(--agml-border); +} + +.fieldRefSymbol { + color: var(--ifm-color-primary); + font-weight: 600; + white-space: nowrap; +} + +.fieldRefPath { + color: var(--agml-muted); + overflow-wrap: anywhere; + text-align: right; +} + +/* Between mobile and the panel's own max width, 2-cards-per-row (each half of a ~980px panel) + gets tight enough that the formula boxes start cramping — drop to one full-width card per row + a bit before the general mobile breakpoint below. This block must come before the 720px block + so that, once both conditions are true on a narrow phone, the more specific 720px rules below + (later in source order, equal selector specificity) are the ones that win. */ +@media (max-width: 900px) { + .metricGrid { + grid-template-columns: repeat(2, 1fr); + } + + .metricCard, + .metricCardPenalty { + grid-column: span 2; + } +} + +@media (max-width: 720px) { + .panel { + padding: 1.25rem; + border-radius: 10px; + } + + .title { + font-size: 1.2rem; + } + + .weightTile { + min-width: 120px; + } + + .header { + flex-direction: column; + } + + .metricGrid { + grid-template-columns: 1fr; + } + + .metricCard, + .metricCardPenalty { + grid-column: span 1; + } +} diff --git a/src/components/ScoringMethodologyModal.tsx b/src/components/ScoringMethodologyModal.tsx new file mode 100644 index 0000000..401e0c5 --- /dev/null +++ b/src/components/ScoringMethodologyModal.tsx @@ -0,0 +1,425 @@ +// Static reference modal explaining how dataset quality scores are computed. Unlike the rest +// of the benchmarking UI, nothing here is driven by a specific dataset's data — it's the same +// content for every dataset, documenting the formulas in SCORING_FORMULAS.md in plain language. +import { useEffect, useState } from 'react'; +import { createPortal } from 'react-dom'; +import styles from './ScoringMethodologyModal.module.css'; + +type MetricDoc = { + name: string; + weight?: string; + badge?: string; + how: string; + formula?: string; + meaning: string; + interpretation: string; + isPenalty?: boolean; + isPending?: boolean; +}; + +type AxisKey = 'structural' | 'difficulty' | 'diversity' | 'annotation'; + +type AxisDoc = { + key: AxisKey; + name: string; + description: string; + metrics: MetricDoc[]; + axisFormula: string; +}; + +const TASK_TYPES = ['Image Classification', 'Object Detection', 'Image Segmentation', 'Image Text To Text'] as const; +type TaskType = (typeof TASK_TYPES)[number]; + +const AXIS_WEIGHTS: { label: string; pct: string; key: AxisKey }[] = [ + { label: 'Structural Quality', pct: '30%', key: 'structural' }, + { label: 'Content Difficulty', pct: '25%', key: 'difficulty' }, + { label: 'Diversity & Coverage', pct: '25%', key: 'diversity' }, + { label: 'Annotation Reliability', pct: '20%', key: 'annotation' }, +]; + +const AXIS_META: { key: AxisKey; name: string; description: string }[] = [ + { key: 'structural', name: 'Structural Quality', description: 'Basic health of the dataset: size, balance, redundancy, and format consistency.' }, + { + key: 'difficulty', + name: 'Content Difficulty', + description: 'How hard the task genuinely is on this data, and whether that difficulty is meaningful or just noise.', + }, + { + key: 'diversity', + name: 'Diversity & Coverage', + description: 'How much of the real world variation the dataset captures, versus narrow or repetitive samples.', + }, + { key: 'annotation', name: 'Annotation Reliability', description: 'How trustworthy the ground truth labels are.' }, +]; + +const IMAGE_CLASSIFICATION_AXES: Record = { + structural: { + metrics: [ + { + name: 'Class Balance', + weight: '40% of axis score', + how: 'We count examples per class and take the ratio of the largest class to the smallest. We also compute the normalized entropy of the class distribution, which gives a smoother read than a single ratio.', + meaning: 'Highly imbalanced datasets are easy to get high accuracy on and hard to trust for the rare classes.', + formula: 'S_balance = clamp(entropy × 10, 0, 10)', + interpretation: + 'A score close to 0 means one or two classes dominate and the rest are barely represented. A score close to 10 means classes are close to equal size. Higher is better.', + }, + { + name: 'Redundancy', + weight: '35% of axis score', + how: "We hash every image to catch exact duplicates. For near duplicates, we embed images with a general purpose model and flag pairs with very high cosine similarity. Exact and near rates are added together so cleaning only one type can't inflate the score.", + meaning: 'High duplication means the dataset is smaller and less varied than its file count suggests.', + formula: 'S_redundancy = clamp(10 × (1 − (exact_rate + near_rate) / 0.20), 0, 10)', + interpretation: + 'A score close to 10 means almost no duplicate images. A score close to 0 means a fifth or more of the dataset is duplicated. Higher is better.', + }, + { + name: 'Cross Split Contamination Penalty', + badge: 'penalty', + weight: 'Subtracted, up to 2 points', + how: 'Same duplicate detection as above, but restricted to pairs where one copy lands in the train set and the other in validation or test.', + meaning: + 'Samples that appear in more than one split let a model see the test answers during training, which inflates test accuracy without the model actually being better.', + formula: 'P_cross = clamp((cross_dups + cross_near) × 100 / total_images, 0, 2)', + interpretation: + "This is a penalty, so lower is better and 0 is best. It grows as more images leak across splits and maxes out at 2 points once 2% or more of the dataset is contaminated this way. It's subtracted from the structural score rather than blended in, so it can't be hidden by a strong balance or resolution score.", + isPenalty: true, + }, + { + name: 'Resolution Consistency', + weight: '25% of axis score', + how: 'We look at the spread of image width, height, aspect ratio, and file size across the whole dataset.', + meaning: 'Tells us whether images come from a single clean source or a mix of cameras and phones.', + formula: 'S_resolution = clamp(10 × (1 − area_cv), 0, 10)', + interpretation: + 'A score close to 10 means images are highly uniform, usually a sign they came from one collection pipeline. A score close to 0 means resolutions vary wildly. Higher is generally better, though very low variation can also mean the images were all captured under one narrow setup.', + }, + ], + axisFormula: 'Q_structural = clamp(0.40·S_balance + 0.35·S_redundancy + 0.25·S_resolution − P_cross, 0, 10)', + }, + difficulty: { + metrics: [ + { + name: 'Feature Space Separability', + weight: '40% of axis score', + how: 'We embed images with a frozen, general purpose backbone that was never trained on this data, then score how well the ground truth labels separate into clusters in that embedding space.', + meaning: + 'A model independent read on how separable the classes are. Low separability can mean the classes are genuinely hard to tell apart, or that some labels are wrong.', + formula: 'S_separability = (clamp(silhouette × 10, 0, 10) + clamp(10 − davies_bouldin × 3, 0, 10)) / 2', + interpretation: + 'A score close to 10 means the classes form tight, well separated clusters even to a model that has never seen this data. A score close to 0 means the classes overlap heavily. Higher is better.', + }, + { + name: 'Training Difficulty Balance', + weight: '30% of axis score', + how: "We train a reference model and track each example's prediction confidence and how much that confidence swings across training epochs. Plotting those two values sorts examples into easy, ambiguous, or hard to learn.", + meaning: 'Shows whether a dataset is mostly trivial for a model to learn or has a genuine hard tail worth benchmarking against.', + formula: 'S_cartography = clamp(10 × (1 − pct_hard / 50), 0, 10)', + interpretation: + 'A score close to 0 means over half the dataset is hard for the reference model to learn confidently. A score close to 10 means almost everything is easy, which sounds good but can also mean the dataset is too trivial to be a useful benchmark. A mid to high score is usually the healthiest place to be, not a perfect 10.', + }, + { + name: 'Class Confusability', + weight: '30% of axis score', + how: 'Using the same reference model, we build a confusion matrix on held out data and pull out the class pairs the model mixes up most.', + meaning: 'Shows which classes are visually hard to tell apart in this data, which helps prioritize where more examples are needed.', + formula: 'S_confusability = clamp(accuracy × 10, 0, 10)', + interpretation: + "A score close to 10 means the reference model rarely confuses classes on held out data. A score close to 0 means it mixes them up constantly. Higher is better. The split seed is fixed and published, so this can't be inflated by choosing an easy test set.", + }, + ], + axisFormula: 'Q_difficulty = 0.40·S_separability + 0.30·S_cartography + 0.30·S_confusability', + }, + diversity: { + metrics: [ + { + name: 'Intra Class Visual Diversity', + weight: '100% of axis score', + how: "For each class, we embed every image and measure how far each one sits from that class's average embedding.", + meaning: + 'Low diversity means a class is really just many near copies of the same shot, which can lead a model to memorize a narrow template instead of learning the real features.', + formula: 'S_diversity = clamp(mean_diversity / 0.4 × 10, 0, 10)', + interpretation: + 'A score close to 0 means images in a class barely differ from each other. A score close to 10 means wide visual variety within each class. Higher is better.', + }, + { + name: 'Metadata Coverage', + weight: 'Not yet weighted', + isPending: true, + how: 'Where metadata exists, such as location, lighting, growth stage, or sensor type, we build frequency tables per class.', + meaning: + 'Shows whether a class was only ever captured under one condition, which limits how well a model trained on it will generalize.', + interpretation: + "This metric doesn't produce a numeric score yet. It shows up as frequency tables on the benchmark card so it can be reviewed by eye.", + }, + ], + axisFormula: 'Q_diversity = S_diversity', + }, + annotation: { + metrics: [ + { + name: 'Label Noise Rate', + weight: '100% of axis score', + how: 'We train with k-fold cross validation to get an out of fold prediction for every example, then use confident learning methods (like cleanlab) to flag examples where the model consistently disagrees with the assigned label.', + meaning: 'Gives an estimated share of mislabeled examples, plus a ranked list of the most likely mislabels for someone to review by hand.', + formula: 'S_noise = clamp(10 × (1 − noise_rate / 0.10)^1.5, 0, 10)', + interpretation: + 'A score close to 10 means very few labels are likely wrong. A score close to 0 means a large share are. The curve is steep near the bottom, so even a little estimated noise pulls the score down fast, and it hits 0 once estimated noise reaches 10%.', + }, + ], + axisFormula: 'Q_annotation = S_noise', + }, +}; + +const PLACEHOLDER_NOTE = "Metric formulas for this task type are still being worked out. The four axes above apply, but the per metric scoring isn't published yet."; + +const ANTI_GAMING_NOTES = [ + "Exact and near duplicate rates are added together for the redundancy score, so removing only exact duplicates while keeping near duplicates doesn't improve the score.", + "Cross split contamination is penalized on its own and subtracted at the end, so it can't be masked by a strong balance or resolution score.", + 'Removing images to lower the duplicate rate also tends to lower diversity, since the removed images were adding variation. The two scores pull against each other.', + 'Separability uses both silhouette and Davies-Bouldin. Optimizing for one alone tends to push the other in the wrong direction.', + "The label noise formula uses an exponent of 1.5, so small amounts of noise near the 10% cutoff barely move the score. There's little to gain from cleaning just enough to cross a boundary.", + "The train and test split is drawn with a fixed, published seed, so confusability accuracy can't be inflated by choosing which examples land in the test set.", +]; + +const FIELD_REFS: { symbol: string; path: string }[] = [ + { symbol: 'entropy', path: 'metrics.class_imbalance.normalized_entropy' }, + { symbol: 'exact_rate', path: 'metrics.exact_duplicate.exact_duplicate_rate' }, + { symbol: 'near_rate', path: 'metrics.near_duplicate.near_duplicate_rate' }, + { symbol: 'cross_split_dups', path: 'metrics.exact_duplicate.cross_split_duplicates' }, + { symbol: 'cross_split_near', path: 'metrics.near_duplicate.cross_split_near_duplicates' }, + { symbol: 'total_images', path: 'metrics.exact_duplicate.total_images' }, + { symbol: 'area_cv', path: 'metrics.resolution_consistency.area_cv' }, + { symbol: 'silhouette', path: 'metrics.feature_separability.silhouette_score' }, + { symbol: 'davies_bouldin', path: 'metrics.feature_separability.davies_bouldin_index' }, + { symbol: 'mean_diversity', path: 'metrics.intra_class_diversity.mean_diversity' }, + { symbol: 'pct_hard', path: 'metrics.dataset_cartography.pct_hard' }, + { symbol: 'accuracy', path: 'metrics.class_confusability.accuracy' }, + { symbol: 'noise_rate', path: 'metrics.label_noise.estimated_noise_rate' }, +]; + +function buildAxisGroups(taskType: TaskType): AxisDoc[] { + const data = taskType === 'Image Classification' ? IMAGE_CLASSIFICATION_AXES : null; + return AXIS_META.map((meta) => ({ + ...meta, + metrics: data ? data[meta.key].metrics : [], + axisFormula: data ? data[meta.key].axisFormula : '', + })); +} + +function MetricCard({ metric, axisClass }: { metric: MetricDoc; axisClass: string }) { + return ( +
+
+

{metric.name}

+
+ {metric.badge && {metric.badge}} + {metric.weight && {metric.weight}} +
+
+ +
+

How it’s calculated

+

{metric.how}

+
+ + {metric.formula &&
{metric.formula}
} + +
+

What it means

+

{metric.meaning}

+
+ + {metric.isPending ? ( +

{metric.interpretation}

+ ) : ( +
+

Reading the score

+

{metric.interpretation}

+
+ )} +
+ ); +} + +const AXIS_CLASS: Record = { + structural: 'axisStructural', + difficulty: 'axisDifficulty', + diversity: 'axisDiversity', + annotation: 'axisAnnotation', +}; + +export function ScoringMethodologyModal({ + open, + taskType = 'Image Classification', + onClose, +}: { + open: boolean; + taskType?: TaskType; + onClose: () => void; +}) { + const [activeTab, setActiveTab] = useState(taskType); + + useEffect(() => { + if (open) setActiveTab(taskType); + }, [open, taskType]); + + useEffect(() => { + if (!open) return; + const onKeyDown = (event: KeyboardEvent) => { + if (event.key === 'Escape') onClose(); + }; + window.addEventListener('keydown', onKeyDown); + return () => window.removeEventListener('keydown', onKeyDown); + }, [open, onClose]); + + if (!open) return null; + + const axisGroups = buildAxisGroups(activeTab); + + // Portaled to the document body — this modal can be opened from inside the dataset modal's + // flip-card face, and that face's `transform`/`perspective` (for the 3D flip) creates a new + // containing block for any `position: fixed` descendant, which would otherwise center this + // backdrop inside that tall transformed box instead of the actual viewport. + return createPortal( +
+
event.stopPropagation()} + > +
+
+

Reference

+

+ Scoring Methodology +

+

+ How overall and per axis quality scores are computed from each run’s report.json. This is a static + reference, not live data. +

+
+ +
+ +
+ {TASK_TYPES.map((label) => ( + + ))} +
+ +
+

Overall score

+

The overall score is a weighted average of the four axis scores below.

+
+ {AXIS_WEIGHTS.map((w) => ( +
+ {w.pct} + {w.label} +
+ ))} +
+
+ Q_overall = 0.30·Q_structural + 0.25·Q_difficulty + 0.25·Q_diversity + 0.20·Q_annotation +
+

+ If an entire axis can’t be computed for a dataset, it is dropped and the remaining axes are + renormalized against their own weights, so the overall score is always a full weighted average of + whatever was available rather than being dragged down by a missing axis. +

+

+ An axis needs every one of its metrics to be scored. If any single metric inside an axis is missing, + the whole axis is dropped and its weight is redistributed as above. The one exception is Content + Difficulty, which falls back to the separability score on its own when a run hasn’t completed + the phase 3 cartography and confusability metrics. +

+
+ + + 7.5 and up is good + + + + 5.0 to 7.5 is fair + + + + below 5.0 needs attention + +
+

+ Every formula below computes on a 0 to 10 scale, and that is the same scale the dataset card displays, + rounded to one decimal place. The thresholds above are in those units. +

+
+ + {axisGroups.map((axis) => ( +
+

{axis.name}

+

{axis.description}

+ + {axis.metrics.length > 0 ? ( +
+ {axis.metrics.map((metric) => ( + + ))} +
+ ) : ( +
+

{PLACEHOLDER_NOTE}

+
+ )} + + {axis.axisFormula && ( +
+

Axis score

+
+ {axis.axisFormula} +
+
+ )} +
+ ))} + +
+

How the formulas resist gaming

+
+ {ANTI_GAMING_NOTES.map((note) => ( +
+ +

{note}

+
+ ))} +
+
+ JSON field reference +
+ {FIELD_REFS.map((f) => ( +
+ {f.symbol} + {f.path} +
+ ))} +
+
+
+
+
, + document.body, + ); +} + +export default ScoringMethodologyModal; diff --git a/src/css/custom.css b/src/css/custom.css index 62cf4a0..85b2ea1 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,4 +1,4 @@ -@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Inter:wght@400;500;600;700&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=Inter:wght@400;500;600;700&display=swap"); /** * Any CSS included here will be global. The classic template @@ -8,104 +8,127 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: oklch(0.5 0.14 150); - --ifm-color-primary-dark: oklch(0.45 0.14 150); - --ifm-color-primary-darker: oklch(0.42 0.14 150); - --ifm-color-primary-darkest: oklch(0.35 0.13 150); - --ifm-color-primary-light: oklch(0.55 0.14 150); - --ifm-color-primary-lighter: oklch(0.6 0.14 150); - --ifm-color-primary-lightest: oklch(0.7 0.13 150); - --ifm-font-family-base: 'Inter', 'Noto Sans', sans-serif; - --ifm-heading-font-family: 'Inter', 'Noto Sans', sans-serif; - --ifm-code-font-family: 'IBM Plex Mono', 'Fira Code', monospace; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: oklch(0.16 0.01 145 / 0.08); - --agml-page-bg: oklch(0.985 0.006 145); - --agml-surface: oklch(0.97 0.01 145); - --agml-surface-strong: oklch(1 0.002 145); - --agml-surface-soft: oklch(0.965 0.008 145); - --agml-border: oklch(0.85 0.012 145); - --agml-border-strong: oklch(0.78 0.014 145); - --agml-shadow: 0 16px 32px oklch(0 0 0 / 0.06); - --agml-shadow-strong: 0 24px 48px oklch(0 0 0 / 0.09); - --agml-text: oklch(0.2 0.012 145); - --agml-muted: oklch(0.45 0.012 145); - --agml-accent-soft: oklch(0.92 0.06 150); - --agml-accent-border: color-mix(in oklch, var(--ifm-color-primary) 35%, var(--agml-border)); - --agml-warning-soft: rgba(189, 139, 76, 0.12); - --agml-warning-text: #7a4e2a; - --agml-modal-overlay: oklch(0 0 0 / 0.3); - --agml-badge-classification-bg: oklch(0.89 0.10 145); - --agml-badge-classification-fg: oklch(0.34 0.13 145); - --agml-badge-detection-bg: oklch(0.89 0.08 175); - --agml-badge-detection-fg: oklch(0.36 0.12 175); - --agml-badge-segmentation-bg: oklch(0.89 0.07 110); - --agml-badge-segmentation-fg: oklch(0.36 0.11 110); - --agml-badge-other-bg: oklch(0.91 0.01 145); - --agml-badge-other-fg: oklch(0.4 0.01 145); - --agml-tag-bg: oklch(0.91 0.02 145); - --agml-tag-fg: oklch(0.36 0.03 145); - --ifm-background-color: transparent; - --ifm-navbar-background-color: var(--agml-surface); - --ifm-footer-background-color: var(--agml-surface); - --ifm-card-background-color: var(--agml-surface-strong); - --ifm-toc-background-color: var(--agml-surface); - --ifm-toc-border-color: var(--agml-border); + --ifm-color-primary: oklch(0.5 0.14 150); + --ifm-color-primary-dark: oklch(0.45 0.14 150); + --ifm-color-primary-darker: oklch(0.42 0.14 150); + --ifm-color-primary-darkest: oklch(0.35 0.13 150); + --ifm-color-primary-light: oklch(0.55 0.14 150); + --ifm-color-primary-lighter: oklch(0.6 0.14 150); + --ifm-color-primary-lightest: oklch(0.7 0.13 150); + --ifm-font-family-base: "Inter", "Noto Sans", sans-serif; + --ifm-heading-font-family: "Inter", "Noto Sans", sans-serif; + --ifm-code-font-family: "IBM Plex Mono", "Fira Code", monospace; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: oklch(0.16 0.01 145 / 0.08); + --agml-page-bg: oklch(0.985 0.006 145); + --agml-surface: oklch(0.97 0.01 145); + --agml-surface-strong: oklch(1 0.002 145); + --agml-surface-soft: oklch(0.965 0.008 145); + --agml-border: oklch(0.85 0.012 145); + --agml-border-strong: oklch(0.78 0.014 145); + --agml-shadow: 0 16px 32px oklch(0 0 0 / 0.06); + --agml-shadow-strong: 0 24px 48px oklch(0 0 0 / 0.09); + --agml-text: oklch(0.2 0.012 145); + --agml-muted: oklch(0.45 0.012 145); + --agml-accent-soft: oklch(0.92 0.06 150); + --agml-accent-border: color-mix( + in oklch, + var(--ifm-color-primary) 35%, + var(--agml-border) + ); + --agml-warning-soft: rgba(199, 60, 41, 0.12); + --agml-warning-text: oklch(0.55 0.19 27); + --agml-caution-text: oklch(0.65 0.18 97); + /* Per-axis accent hues for the scoring methodology reference (Structural Quality reuses + --ifm-color-primary and Annotation Reliability reuses --agml-caution-text — both already + sit at a matching hue, so only blue/pink need their own tokens). */ + --agml-axis-difficulty: oklch(0.5 0.15 250); + --agml-axis-diversity: oklch(0.55 0.17 340); + --agml-modal-overlay: oklch(0 0 0 / 0.3); + --agml-badge-classification-bg: oklch(0.89 0.1 145); + --agml-badge-classification-fg: oklch(0.34 0.13 145); + --agml-badge-detection-bg: oklch(0.89 0.08 175); + --agml-badge-detection-fg: oklch(0.36 0.12 175); + --agml-badge-segmentation-bg: oklch(0.89 0.07 110); + --agml-badge-segmentation-fg: oklch(0.36 0.11 110); + --agml-badge-other-bg: oklch(0.91 0.01 145); + --agml-badge-other-fg: oklch(0.4 0.01 145); + --agml-badge-vlm-bg: oklch(0.89 0.08 300); + --agml-badge-vlm-fg: oklch(0.36 0.13 300); + --agml-tag-bg: oklch(0.91 0.02 145); + --agml-tag-fg: oklch(0.36 0.03 145); + --ifm-background-color: transparent; + --ifm-navbar-background-color: var(--agml-surface); + --ifm-footer-background-color: var(--agml-surface); + --ifm-card-background-color: var(--agml-surface-strong); + --ifm-toc-background-color: var(--agml-surface); + --ifm-toc-border-color: var(--agml-border); } /* For readability concerns, you should choose a lighter palette in dark mode. */ -html[data-theme='dark'] { - --ifm-color-primary: oklch(0.72 0.15 150); - --ifm-color-primary-dark: oklch(0.65 0.15 150); - --ifm-color-primary-darker: oklch(0.6 0.15 150); - --ifm-color-primary-darkest: oklch(0.5 0.14 150); - --ifm-color-primary-light: oklch(0.78 0.14 150); - --ifm-color-primary-lighter: oklch(0.83 0.13 150); - --ifm-color-primary-lightest: oklch(0.88 0.11 150); - --docusaurus-highlighted-code-line-bg: oklch(0 0 0 / 0.35); - --agml-page-bg: oklch(0.16 0.01 145); - --agml-surface: oklch(0.18 0.012 145); - --agml-surface-strong: oklch(0.19 0.012 145); - --agml-surface-soft: oklch(0.17 0.01 145); - --agml-border: oklch(0.28 0.014 145); - --agml-border-strong: oklch(0.3 0.014 145); - --agml-shadow: 0 16px 32px oklch(0 0 0 / 0.28); - --agml-shadow-strong: 0 24px 48px oklch(0 0 0 / 0.34); - --agml-text: oklch(0.92 0.006 145); - --agml-muted: oklch(0.65 0.01 145); - --agml-accent-soft: oklch(0.22 0.05 150); - --agml-accent-border: color-mix(in oklch, var(--ifm-color-primary) 30%, var(--agml-border)); - --agml-warning-soft: rgba(189, 139, 76, 0.18); - --agml-warning-text: #d9b084; - --agml-modal-overlay: oklch(0 0 0 / 0.62); - --agml-badge-classification-bg: oklch(0.30 0.10 145); - --agml-badge-classification-fg: oklch(0.88 0.15 145); - --agml-badge-detection-bg: oklch(0.30 0.09 175); - --agml-badge-detection-fg: oklch(0.86 0.13 175); - --agml-badge-segmentation-bg: oklch(0.30 0.07 110); - --agml-badge-segmentation-fg: oklch(0.86 0.12 110); - --agml-badge-other-bg: oklch(0.30 0.02 145); - --agml-badge-other-fg: oklch(0.8 0.02 145); - --agml-tag-bg: oklch(0.24 0.014 145); - --agml-tag-fg: oklch(0.75 0.012 145); - --ifm-background-color: transparent; - --ifm-navbar-background-color: var(--agml-surface); - --ifm-footer-background-color: var(--agml-surface); - --ifm-card-background-color: var(--agml-surface-strong); - --ifm-toc-background-color: var(--agml-surface); - --ifm-toc-border-color: var(--agml-border); +html[data-theme="dark"] { + --ifm-color-primary: oklch(0.72 0.15 150); + --ifm-color-primary-dark: oklch(0.65 0.15 150); + --ifm-color-primary-darker: oklch(0.6 0.15 150); + --ifm-color-primary-darkest: oklch(0.5 0.14 150); + --ifm-color-primary-light: oklch(0.78 0.14 150); + --ifm-color-primary-lighter: oklch(0.83 0.13 150); + --ifm-color-primary-lightest: oklch(0.88 0.11 150); + --docusaurus-highlighted-code-line-bg: oklch(0 0 0 / 0.35); + --agml-page-bg: oklch(0.16 0.01 145); + --agml-surface: oklch(0.18 0.012 145); + --agml-surface-strong: oklch(0.19 0.012 145); + --agml-surface-soft: oklch(0.17 0.01 145); + --agml-border: oklch(0.28 0.014 145); + --agml-border-strong: oklch(0.3 0.014 145); + --agml-shadow: 0 16px 32px oklch(0 0 0 / 0.28); + --agml-shadow-strong: 0 24px 48px oklch(0 0 0 / 0.34); + --agml-text: oklch(0.92 0.006 145); + --agml-muted: oklch(0.65 0.01 145); + --agml-accent-soft: oklch(0.22 0.05 150); + --agml-accent-border: color-mix( + in oklch, + var(--ifm-color-primary) 30%, + var(--agml-border) + ); + --agml-warning-soft: rgba(224, 90, 70, 0.18); + --agml-warning-text: oklch(0.7 0.18 27); + --agml-caution-text: oklch(0.78 0.14 80); + --agml-axis-difficulty: oklch(0.72 0.15 250); + --agml-axis-diversity: oklch(0.74 0.15 340); + --agml-modal-overlay: oklch(0 0 0 / 0.62); + --agml-badge-classification-bg: oklch(0.3 0.1 145); + --agml-badge-classification-fg: oklch(0.88 0.15 145); + --agml-badge-detection-bg: oklch(0.3 0.09 175); + --agml-badge-detection-fg: oklch(0.86 0.13 175); + --agml-badge-segmentation-bg: oklch(0.3 0.07 110); + --agml-badge-segmentation-fg: oklch(0.86 0.12 110); + --agml-badge-other-bg: oklch(0.3 0.02 145); + --agml-badge-other-fg: oklch(0.8 0.02 145); + --agml-badge-vlm-bg: oklch(0.3 0.09 300); + --agml-badge-vlm-fg: oklch(0.86 0.13 300); + --agml-tag-bg: oklch(0.24 0.014 145); + --agml-tag-fg: oklch(0.75 0.012 145); + --ifm-background-color: transparent; + --ifm-navbar-background-color: var(--agml-surface); + --ifm-footer-background-color: var(--agml-surface); + --ifm-card-background-color: var(--agml-surface-strong); + --ifm-toc-background-color: var(--agml-surface); + --ifm-toc-border-color: var(--agml-border); } html, body, #__docusaurus { - background: var(--agml-page-bg); - color: var(--agml-text); - overflow-x: hidden; + background: var(--agml-page-bg); + color: var(--agml-text); + overflow-x: hidden; } body { - transition: background-color 0.2s ease, color 0.2s ease; + transition: + background-color 0.2s ease, + color 0.2s ease; } .navbar, @@ -120,7 +143,7 @@ body { .theme-admonition, .theme-code-block, .table-of-contents__link { - color: var(--agml-text); + color: var(--agml-text); } .navbar, @@ -133,172 +156,172 @@ body { .card, .theme-admonition, .theme-code-block { - background: var(--agml-surface); - border-color: var(--agml-border); - box-shadow: var(--agml-shadow); + background: var(--agml-surface); + border-color: var(--agml-border); + box-shadow: var(--agml-shadow); } .navbar, .footer { - backdrop-filter: blur(14px); + backdrop-filter: blur(14px); } .navbar { - border-bottom: 1px solid var(--agml-border); - --ifm-navbar-height: 64px; - --ifm-navbar-padding-horizontal: 24px; - --ifm-navbar-item-padding-horizontal: 0; - --ifm-navbar-item-padding-vertical: 0; + border-bottom: 1px solid var(--agml-border); + --ifm-navbar-height: 64px; + --ifm-navbar-padding-horizontal: 24px; + --ifm-navbar-item-padding-horizontal: 0; + --ifm-navbar-item-padding-vertical: 0; } .navbar__brand { - margin-right: 20px; + margin-right: 20px; } .navbar__brand::before { - content: ''; - display: inline-block; - width: 10px; - height: 10px; - margin-right: 10px; - border-radius: 2px; - background: var(--ifm-color-primary); - flex-shrink: 0; + content: ""; + display: inline-block; + width: 10px; + height: 10px; + margin-right: 10px; + border-radius: 2px; + background: var(--ifm-color-primary); + flex-shrink: 0; } .navbar__title { - font-family: var(--ifm-code-font-family); - font-weight: 600; - font-size: 15px; - letter-spacing: -0.2px; + font-family: var(--ifm-code-font-family); + font-weight: 600; + font-size: 15px; + letter-spacing: -0.2px; } .navbar__item { - padding: 4px; + padding: 4px; } .navbar__link { - font-family: var(--ifm-code-font-family); - font-size: 12.5px; - font-weight: 400; - padding: 8px 12px; - border-radius: 6px; - color: var(--agml-muted); + font-family: var(--ifm-code-font-family); + font-size: 12.5px; + font-weight: 400; + padding: 8px 12px; + border-radius: 6px; + color: var(--agml-muted); } .navbar__link:hover, .navbar__link--active { - background: var(--agml-tag-bg); - color: var(--agml-text); + background: var(--agml-tag-bg); + color: var(--agml-text); } .navbar__github-button .navbar__link { - color: var(--ifm-navbar-background-color); - background: var(--ifm-color-primary); - font-weight: 600; + color: var(--ifm-navbar-background-color); + background: var(--ifm-color-primary); + font-weight: 600; } .navbar__github-button .navbar__link:hover { - background: var(--ifm-color-primary-dark); - color: var(--ifm-navbar-background-color); + background: var(--ifm-color-primary-dark); + color: var(--ifm-navbar-background-color); } .theme-doc-markdown { - border-radius: 0; - padding: 0; - background: transparent; - border: none; - box-shadow: none; - max-width: 760px; + border-radius: 0; + padding: 0; + background: transparent; + border: none; + box-shadow: none; + max-width: 760px; } .theme-doc-markdown.markdown h1 { - font-size: 1.875rem; - font-weight: 600; - letter-spacing: -0.01em; - margin-bottom: 0.5rem; + font-size: 1.875rem; + font-weight: 600; + letter-spacing: -0.01em; + margin-bottom: 0.5rem; } .theme-doc-markdown.markdown h2 { - font-size: 1.1875rem; - font-weight: 600; - scroll-margin-top: 1.25rem; + font-size: 1.1875rem; + font-weight: 600; + scroll-margin-top: 1.25rem; } .theme-doc-markdown.markdown h3 { - font-size: 1rem; - font-weight: 600; - scroll-margin-top: 1.25rem; + font-size: 1rem; + font-weight: 600; + scroll-margin-top: 1.25rem; } .theme-doc-markdown.markdown p, .theme-doc-markdown.markdown li { - font-size: 0.906rem; - line-height: 1.65; + font-size: 0.906rem; + line-height: 1.65; } .main-wrapper { - padding-top: 1.5rem; - padding-bottom: 2rem; + padding-top: 1.5rem; + padding-bottom: 2rem; } .theme-doc-sidebar-container { - border-right: 1px solid var(--agml-border); - background: var(--agml-surface-soft); - box-shadow: none; + border-right: 1px solid var(--agml-border); + background: var(--agml-surface-soft); + box-shadow: none; } .theme-doc-sidebar-menu { - --ifm-menu-color: var(--agml-muted); - --ifm-menu-color-active: var(--agml-text); - --ifm-menu-color-background-hover: var(--agml-tag-bg); - --ifm-menu-color-background-active: var(--agml-tag-bg); - --ifm-menu-link-padding-vertical: 0.5rem; - --ifm-menu-link-padding-horizontal: 0.5rem; - padding: 1.5rem 1rem; + --ifm-menu-color: var(--agml-muted); + --ifm-menu-color-active: var(--agml-text); + --ifm-menu-color-background-hover: var(--agml-tag-bg); + --ifm-menu-color-background-active: var(--agml-tag-bg); + --ifm-menu-link-padding-vertical: 0.5rem; + --ifm-menu-link-padding-horizontal: 0.5rem; + padding: 1.5rem 1rem; } .menu__link { - font-size: 0.82rem; - font-weight: 400; + font-size: 0.82rem; + font-weight: 400; } .sidebarCategoryLabel > .menu__list-item-collapsible { - background: transparent !important; + background: transparent !important; } .sidebarCategoryLabel > .menu__list-item-collapsible > .menu__link { - font-family: var(--ifm-code-font-family); - font-size: 0.68rem; - font-weight: 600; - letter-spacing: 0.06em; - text-transform: uppercase; - color: var(--agml-muted); - padding: 0.4rem 0.5rem; - pointer-events: none; + font-family: var(--ifm-code-font-family); + font-size: 0.68rem; + font-weight: 600; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--agml-muted); + padding: 0.4rem 0.5rem; + pointer-events: none; } .sidebarCategoryLabel + .sidebarCategoryLabel { - margin-top: 1.25rem; + margin-top: 1.25rem; } .theme-doc-sidebar-item-link, .table-of-contents__link, .footer__link-item { - color: var(--agml-text); + color: var(--agml-text); } .theme-doc-sidebar-item-link--active { - color: var(--ifm-color-primary); + color: var(--ifm-color-primary); } .theme-code-block { - border: 1px solid var(--agml-border); - border-radius: 8px; - box-shadow: none; + border: 1px solid var(--agml-border); + border-radius: 8px; + box-shadow: none; } .theme-code-block pre, .prism-code { - background: var(--agml-surface-strong) !important; + background: var(--agml-surface-strong) !important; } diff --git a/src/lib/benchmarks.ts b/src/lib/benchmarks.ts new file mode 100644 index 0000000..195cbc9 --- /dev/null +++ b/src/lib/benchmarks.ts @@ -0,0 +1,241 @@ +// Dataset benchmarking metrics, loaded on demand from the shared +// static/data/dataset-benchmarking/results.json (keyed by dataset name), plus optional +// per-dataset UMAP embedding files under static/data/dataset-benchmarking/embeddings/ +// (_umap_2d.json / _umap_3d.json). One task type's metric shape is defined +// below; other task types will get their own shape as their benchmarking pipelines ship. +import { useEffect, useState } from "react"; +import useBaseUrl from "@docusaurus/useBaseUrl"; + +export interface ClassImbalanceMetrics { + counts: Record; + imbalance_ratio: number; + normalized_entropy: number; + most_frequent_class: string; + least_frequent_class: string; + total_train_examples: number; +} + +export interface ExactDuplicateMetrics { + total_images: number; + exact_duplicate_count: number; + exact_duplicate_rate: number; + duplicate_groups: number; + cross_split_duplicates: number; +} + +export interface ResolutionStat { + mean: number; + std: number; + min: number; + max: number; +} + +export interface ResolutionConsistencyMetrics { + total_images: number; + width: ResolutionStat; + height: ResolutionStat; + aspect_ratio: ResolutionStat; + area_cv: number; + mode_distribution: Record; +} + +export interface NearDuplicateMetrics { + total_images: number; + embed_model: string; + threshold: number; + near_duplicate_count: number; + near_duplicate_rate: number; + near_duplicate_groups: number; + cross_split_near_duplicates: number; + faiss_index_type: string; +} + +export interface FeatureSeparabilityMetrics { + embed_model: string; + n_total: number; + n_silhouette_samples: number; + silhouette_score: number; + silhouette_interpretation: string; + davies_bouldin_index: number; + davies_bouldin_interpretation: string; + per_class_silhouette: Record; +} + +export interface IntraClassDiversityMetrics { + embed_model: string; + per_class_diversity: Record; + mean_diversity: number; + min_diversity_class: string; + max_diversity_class: string; +} + +export interface DatasetCartographyMetrics { + n_easy: number; + n_ambiguous: number; + n_hard: number; + pct_easy: number; + pct_ambiguous: number; + pct_hard: number; + mean_confidence: number; + mean_variability: number; + easy_threshold: number; + hard_threshold: number; + variability_threshold: number; + n_epochs: number; +} + +export interface ConfusedPair { + true_class: string; + predicted_as: string; + confusion_rate: number; +} + +export interface ClassConfusabilityMetrics { + accuracy: number; + per_class_accuracy: Record; + confusion_matrix: number[][]; + top_confused_pairs: ConfusedPair[]; + n_top_pairs: number; + n_test_samples: number; +} + +export interface LabelNoiseMetrics { + estimated_noise_rate: number; + n_noisy_samples: number; + n_total_samples: number; + flagged_orig_indices?: number[]; + per_class_noise_counts: Record; + cv_folds: number; +} + +export interface ReproducibilityInfo { + split_seed?: number; + train_ratio?: number; + val_ratio?: number; + test_ratio?: number; + embed_model?: string; + near_dup_threshold?: number; + backbone?: string; + cartography_epochs?: number; + cartography_lr?: number; + cv_folds?: number; +} + +export interface ImageClassificationBenchmark { + dataset: string; + date: string; + reproducibility?: ReproducibilityInfo; + phases_completed?: number[]; + metrics: { + class_imbalance?: ClassImbalanceMetrics; + exact_duplicate?: ExactDuplicateMetrics; + resolution_consistency?: ResolutionConsistencyMetrics; + metadata_coverage?: { skipped: boolean; reason?: string; metadata_columns?: string[]; normalized_entropy?: Record> }; + near_duplicate?: NearDuplicateMetrics; + feature_separability?: FeatureSeparabilityMetrics; + intra_class_diversity?: IntraClassDiversityMetrics; + dataset_cartography?: DatasetCartographyMetrics; + class_confusability?: ClassConfusabilityMetrics; + label_noise?: LabelNoiseMetrics; + }; +} + +// Only image-classification benchmarks exist today; other task types will get their own +// metric shapes later. +export type BenchmarkData = ImageClassificationBenchmark; + +type BenchmarkResults = Record; + +// One row per sample from a UMAP projection. 2D files omit `z`. +export interface EmbedPoint { + x: number; + y: number; + z?: number; + label: string; + split?: string; + index?: number; +} + +interface BenchmarkState { + data: BenchmarkData | null; + embeddings2d: EmbedPoint[] | null; + embeddings3d: EmbedPoint[] | null; + loading: boolean; +} + +const EMPTY_STATE: BenchmarkState = { + data: null, + embeddings2d: null, + embeddings3d: null, + loading: false, +}; + +async function fetchJson(url: string): Promise { + try { + const response = await fetch(url); + if (!response.ok) return null; + return (await response.json()) as T; + } catch { + return null; + } +} + +// results.json is one shared file covering every dataset, so it only needs to be +// fetched once per page load rather than once per dataset looked up. +let resultsPromise: Promise | null = null; +function loadResults(url: string): Promise { + if (!resultsPromise) { + resultsPromise = fetchJson(url).then((data) => data ?? {}); + } + return resultsPromise; +} + +// Looks up `datasetName` in the shared results.json and, if found, fetches that dataset's +// 2D and 3D UMAP embedding files. Returns null data when the dataset has no benchmark entry +// (a missing key, not an error state) or when the fetch itself fails. +export function useBenchmark(datasetName: string | null): BenchmarkState { + const resultsUrl = useBaseUrl("/data/dataset-benchmarking/results.json"); + const embeddings2dUrl = useBaseUrl( + `/data/dataset-benchmarking/embeddings/${datasetName ?? "_none"}_umap_2d.json`, + ); + const embeddings3dUrl = useBaseUrl( + `/data/dataset-benchmarking/embeddings/${datasetName ?? "_none"}_umap_3d.json`, + ); + const [state, setState] = useState(EMPTY_STATE); + + useEffect(() => { + if (!datasetName) { + setState(EMPTY_STATE); + return; + } + let cancelled = false; + setState({ data: null, embeddings2d: null, embeddings3d: null, loading: true }); + + loadResults(resultsUrl).then((results) => { + if (cancelled) return; + const data = results[datasetName] ?? null; + if (!data) { + setState({ data: null, embeddings2d: null, embeddings3d: null, loading: false }); + return; + } + Promise.all([ + fetchJson(embeddings2dUrl), + fetchJson(embeddings3dUrl), + ]).then(([embeddings2d, embeddings3d]) => { + if (cancelled) return; + setState({ + data, + embeddings2d: embeddings2d ?? null, + embeddings3d: embeddings3d ?? null, + loading: false, + }); + }); + }); + + return () => { + cancelled = true; + }; + }, [datasetName, resultsUrl, embeddings2dUrl, embeddings3dUrl]); + + return state; +} diff --git a/src/lib/datasets.ts b/src/lib/datasets.ts index 9a21a2a..fc5e244 100644 --- a/src/lib/datasets.ts +++ b/src/lib/datasets.ts @@ -1,372 +1,581 @@ -import { useEffect, useMemo, useState } from 'react'; -import useBaseUrl from '@docusaurus/useBaseUrl'; +import { useEffect, useMemo, useState } from "react"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import { toDisplayLabel } from "./labelOverrides"; export interface Dataset { - name: string; - source: 'agml' | 'huggingface' | string | null; - machine_learning_task: string | null; - agricultural_task: string | null; - location: string | string[] | null; - country: string | string[] | null; - // Derived: `country`, falling back to `location` when country wasn't extracted. Used for the - // search page's location filter/display so it groups by country instead of full addresses. - display_location: string | string[] | null; - lat_lon: string | string[] | null; - imaging_equipment: string | string[] | null; - collection_period: string | string[] | null; - environment: string | null; - augmented_counterpart: string | null; - crop_types: string[] | null; - sensor_modality: string | null; - real_or_synthetic: string | null; - platform: string | null; - input_data_format: string | null; - annotation_format: string | null; - num_images: number | null; - augmented_num_images: number | null; - augmented_zip_size_bytes: number | null; - documentation: string | null; - classes: string | null; - stats_mean: number[] | null; - stats_std: number[] | null; - examples_image_url: string | null; - license: string | null; - citation: string | null; - parent_dataset?: string | null; - zip_size_bytes?: number | null; - hf_link?: string | null; + name: string; + source: "agml" | "huggingface" | string | null; + machine_learning_task: string | null; + agricultural_task: string | null; + location: string | string[] | null; + country: string | string[] | null; + // Derived: `country`, falling back to `location` when country wasn't extracted. Used for the + // search page's location filter/display so it groups by country instead of full addresses. + display_location: string | string[] | null; + lat_lon: string | string[] | null; + imaging_equipment: string | string[] | null; + collection_period: string | string[] | null; + environment: string | null; + augmented_counterpart: string | null; + crop_types: string[] | null; + sensor_modality: string | null; + real_or_synthetic: string | null; + platform: string[] | null; + input_data_format: string | null; + annotation_format: string | null; + num_images: number | null; + augmented_num_images: number | null; + augmented_zip_size_bytes: number | null; + documentation: string | null; + classes: string | null; + stats_mean: number[] | null; + stats_std: number[] | null; + examples_image_url: string | null; + license: string | null; + citation: string | null; + parent_dataset?: string | null; + zip_size_bytes?: number | null; + hf_link?: string | null; + // VLM (vision-language) dataset fields — absent/null on plain vision datasets. + dataset_type: "vision" | "vlm"; + qa_type: string[] | null; + task_dimensions: string[] | null; + num_task_types: number | null; + conversation_format: string | null; + num_rows: number | null; + source_datasets: string[] | null; } type DatasetRecord = Record; export type DatasetFieldFilter = { - field: keyof Dataset; - values?: string[]; - mode?: 'exact' | 'containsAny'; + field: keyof Dataset; + values?: string[]; + mode?: "exact" | "containsAny"; }; -const DATASET_MANIFESTS = ['/data/datasets.json', '/data/hf_datasets.json'] as const; +const DATASET_MANIFESTS = [ + "/data/datasets.json", + "/data/hf_datasets.json", +] as const; function isRecord(value: unknown): value is DatasetRecord { - return typeof value === 'object' && value !== null && !Array.isArray(value); + return typeof value === "object" && value !== null && !Array.isArray(value); } function firstString(...values: unknown[]): string | null { - for (const value of values) { - if (typeof value === 'string') { - const trimmed = value.trim(); - if (trimmed) return trimmed; + for (const value of values) { + if (typeof value === "string") { + const trimmed = value.trim(); + if (trimmed) return trimmed; + } } - } - return null; + return null; } function toNumber(value: unknown): number | null { - if (typeof value === 'number' && Number.isFinite(value)) return value; - if (typeof value === 'string' && value.trim()) { - const parsed = Number(value.replace(/,/g, '')); - return Number.isFinite(parsed) ? parsed : null; - } - return null; + if (typeof value === "number" && Number.isFinite(value)) return value; + if (typeof value === "string" && value.trim()) { + const parsed = Number(value.replace(/,/g, "")); + return Number.isFinite(parsed) ? parsed : null; + } + return null; } function toNumberArray(value: unknown): number[] | null { - if (!Array.isArray(value)) return null; - const numbers = value.map((entry) => toNumber(entry)); - return numbers.every((entry) => entry != null) ? (numbers as number[]) : null; + if (!Array.isArray(value)) return null; + const numbers = value.map((entry) => toNumber(entry)); + return numbers.every((entry) => entry != null) + ? (numbers as number[]) + : null; } function toText(value: unknown): string | null { - if (typeof value === 'string') { - const trimmed = value.trim(); - return trimmed ? trimmed : null; - } - if (typeof value === 'number' || typeof value === 'boolean') return String(value); - if (Array.isArray(value)) { - const parts = value.map((entry) => toText(entry)).filter((entry): entry is string => entry != null); - return parts.length ? parts.join(', ') : null; - } - if (isRecord(value)) { - const parts = Object.entries(value) - .map(([key, entry]) => { - const text = toText(entry); - return text ? `${key}: ${text}` : null; - }) - .filter((entry): entry is string => entry != null); - return parts.length ? parts.join('; ') : null; - } - return null; + if (typeof value === "string") { + const trimmed = value.trim(); + return trimmed ? trimmed : null; + } + if (typeof value === "number" || typeof value === "boolean") + return String(value); + if (Array.isArray(value)) { + const parts = value + .map((entry) => toText(entry)) + .filter((entry): entry is string => entry != null); + return parts.length ? parts.join(", ") : null; + } + if (isRecord(value)) { + const parts = Object.entries(value) + .map(([key, entry]) => { + const text = toText(entry); + return text ? `${key}: ${text}` : null; + }) + .filter((entry): entry is string => entry != null); + return parts.length ? parts.join("; ") : null; + } + return null; } function toStringArray(value: unknown): string[] | null { - if (!Array.isArray(value)) return null; - const parts = value - .map((entry) => firstString(entry)) - .filter((entry): entry is string => entry != null); - return parts.length ? parts : null; + if (!Array.isArray(value)) return null; + const parts = value + .map((entry) => firstString(entry)) + .filter((entry): entry is string => entry != null); + return parts.length ? parts : null; } function normalizeLocation(value: unknown): string | string[] | null { - if (Array.isArray(value)) return toStringArray(value); - return firstString(value); + if (Array.isArray(value)) return toStringArray(value); + return firstString(value); } function normalizeDataset(raw: unknown): Dataset | null { - if (!isRecord(raw)) return null; - - const stats = isRecord(raw.stats) ? raw.stats : null; - const name = firstString(raw.name, raw.dataset, raw.slug, raw.id, raw.key); - if (!name) return null; - - const augmentedNumImages = toNumber(raw.augmented_num_images ?? raw.augmented_n_images ?? raw.augmented_image_count); - const augmentedCounterpart = - firstString(raw.augmented_counterpart) ?? (augmentedNumImages != null ? 'yes' : 'no'); - - const location = normalizeLocation(raw.location); - const country = normalizeLocation(raw.country); - - return { - name, - machine_learning_task: firstString(raw.machine_learning_task, raw.ml_task, raw.task), - source: firstString(raw.source), - agricultural_task: firstString(raw.agricultural_task, raw.ag_task), - location, - country, - display_location: country ?? location, - lat_lon: normalizeLocation(raw.lat_lon), - imaging_equipment: normalizeLocation(raw.imaging_equipment), - collection_period: normalizeLocation(raw.collection_period), - environment: firstString(raw.environment, raw.env, raw.image_environment)?.toLowerCase() ?? null, - augmented_counterpart: augmentedCounterpart, - crop_types: toStringArray(raw.crop_types ?? raw.cropType ?? raw.crop_type)?.map((c) => c.toLowerCase()) ?? null, - sensor_modality: firstString(raw.sensor_modality, raw.sensor, raw.modality), - real_or_synthetic: firstString(raw.real_or_synthetic, raw.real_synthetic), - platform: firstString(raw.platform), - input_data_format: firstString(raw.input_data_format, raw.input_format), - annotation_format: firstString(raw.annotation_format), - num_images: toNumber(raw.num_images ?? raw.n_images ?? raw.image_count), - augmented_num_images: augmentedNumImages, - augmented_zip_size_bytes: toNumber(raw.augmented_zip_size_bytes ?? raw.augmentedZipSizeBytes), - documentation: firstString(raw.documentation, raw.docs_url, raw.doc_url, raw.url), - classes: toText(raw.classes), - stats_mean: toNumberArray(raw.stats_mean ?? stats?.mean), - stats_std: toNumberArray(raw.stats_std ?? stats?.std), - examples_image_url: firstString(raw.examples_image_url, raw.example_image_url, raw.examples_url, raw.image_url), - license: firstString(raw.license), - citation: firstString(raw.citation), - parent_dataset: firstString(raw.parent_dataset, raw.parentDataset), - zip_size_bytes: toNumber(raw.zip_size_bytes ?? raw.zipSizeBytes), - hf_link: firstString(raw.hf_link, raw.huggingface_link, raw.hf_url), - }; + if (!isRecord(raw)) return null; + + const stats = isRecord(raw.stats) ? raw.stats : null; + const name = firstString(raw.name, raw.dataset, raw.slug, raw.id, raw.key); + if (!name) return null; + + const augmentedNumImages = toNumber( + raw.augmented_num_images ?? + raw.augmented_n_images ?? + raw.augmented_image_count, + ); + const augmentedCounterpart = + firstString(raw.augmented_counterpart) ?? + (augmentedNumImages != null ? "yes" : "no"); + + const location = normalizeLocation(raw.location); + const country = normalizeLocation(raw.country); + + const mlTask = firstString( + raw.machine_learning_task, + raw.ml_task, + raw.task, + ); + const qaType = toStringArray(raw.qa_type); + const taskDimensions = toStringArray(raw.task_dimensions); + const isVlm = + mlTask === "image-text-to-text" || + Boolean(qaType?.length) || + Boolean(taskDimensions?.length); + + return { + name, + machine_learning_task: mlTask, + source: firstString(raw.source), + agricultural_task: firstString(raw.agricultural_task, raw.ag_task), + location, + country, + display_location: country ?? location, + lat_lon: normalizeLocation(raw.lat_lon), + imaging_equipment: normalizeLocation(raw.imaging_equipment), + collection_period: normalizeLocation(raw.collection_period), + environment: + firstString( + raw.environment, + raw.env, + raw.image_environment, + )?.toLowerCase() ?? null, + augmented_counterpart: augmentedCounterpart, + crop_types: + toStringArray(raw.crop_types ?? raw.cropType ?? raw.crop_type) + ?.map((c) => c.trim().toLowerCase()) + .filter((c) => c && !/^\+.*\b(more|others?)\b/i.test(c)) ?? + null, + sensor_modality: + firstString(raw.sensor_modality, raw.sensor, raw.modality) ?? + toStringArray(raw.sensor_modality)?.join(", ") ?? + null, + real_or_synthetic: firstString( + raw.real_or_synthetic, + raw.real_synthetic, + ), + platform: parsePlatform(raw.platform), + input_data_format: firstString(raw.input_data_format, raw.input_format), + annotation_format: firstString(raw.annotation_format), + num_images: toNumber(raw.num_images ?? raw.n_images ?? raw.image_count), + augmented_num_images: augmentedNumImages, + augmented_zip_size_bytes: toNumber( + raw.augmented_zip_size_bytes ?? raw.augmentedZipSizeBytes, + ), + documentation: firstString( + raw.documentation, + raw.docs_url, + raw.doc_url, + raw.url, + ), + classes: toText(raw.classes), + stats_mean: toNumberArray(raw.stats_mean ?? stats?.mean), + stats_std: toNumberArray(raw.stats_std ?? stats?.std), + examples_image_url: firstString( + raw.examples_image_url, + raw.example_image_url, + raw.examples_url, + raw.image_url, + ), + license: firstString(raw.license), + citation: firstString(raw.citation), + parent_dataset: firstString(raw.parent_dataset, raw.parentDataset), + zip_size_bytes: toNumber(raw.zip_size_bytes ?? raw.zipSizeBytes), + hf_link: firstString(raw.hf_link, raw.huggingface_link, raw.hf_url), + dataset_type: isVlm ? "vlm" : "vision", + qa_type: qaType, + task_dimensions: taskDimensions, + num_task_types: toNumber(raw.num_task_types), + conversation_format: firstString(raw.conversation_format), + num_rows: toNumber(raw.num_rows), + source_datasets: toStringArray( + (raw.composition as Record | undefined) + ?.source_datasets, + ), + }; } function mergeDataset(current: Dataset, incoming: Dataset): Dataset { - return { - name: current.name, - machine_learning_task: current.machine_learning_task ?? incoming.machine_learning_task, - source: current.source ?? incoming.source, - agricultural_task: current.agricultural_task ?? incoming.agricultural_task, - location: current.location ?? incoming.location, - country: current.country ?? incoming.country, - display_location: current.display_location ?? incoming.display_location, - lat_lon: current.lat_lon ?? incoming.lat_lon, - imaging_equipment: current.imaging_equipment ?? incoming.imaging_equipment, - collection_period: current.collection_period ?? incoming.collection_period, - environment: current.environment ?? incoming.environment, - augmented_counterpart: current.augmented_counterpart ?? incoming.augmented_counterpart, - crop_types: current.crop_types ?? incoming.crop_types, - sensor_modality: current.sensor_modality ?? incoming.sensor_modality, - real_or_synthetic: current.real_or_synthetic ?? incoming.real_or_synthetic, - platform: current.platform ?? incoming.platform, - input_data_format: current.input_data_format ?? incoming.input_data_format, - annotation_format: current.annotation_format ?? incoming.annotation_format, - num_images: current.num_images ?? incoming.num_images, - augmented_num_images: current.augmented_num_images ?? incoming.augmented_num_images, - augmented_zip_size_bytes: current.augmented_zip_size_bytes ?? incoming.augmented_zip_size_bytes, - documentation: current.documentation ?? incoming.documentation, - classes: current.classes ?? incoming.classes, - stats_mean: current.stats_mean ?? incoming.stats_mean, - stats_std: current.stats_std ?? incoming.stats_std, - examples_image_url: current.examples_image_url ?? incoming.examples_image_url, - license: current.license ?? incoming.license, - citation: current.citation ?? incoming.citation, - parent_dataset: current.parent_dataset ?? incoming.parent_dataset, - zip_size_bytes: current.zip_size_bytes ?? incoming.zip_size_bytes, - hf_link: current.hf_link ?? incoming.hf_link, - }; + return { + name: current.name, + machine_learning_task: + current.machine_learning_task ?? incoming.machine_learning_task, + source: current.source ?? incoming.source, + agricultural_task: + current.agricultural_task ?? incoming.agricultural_task, + location: current.location ?? incoming.location, + country: current.country ?? incoming.country, + display_location: current.display_location ?? incoming.display_location, + lat_lon: current.lat_lon ?? incoming.lat_lon, + imaging_equipment: current.imaging_equipment ?? incoming.imaging_equipment, + collection_period: current.collection_period ?? incoming.collection_period, + environment: current.environment ?? incoming.environment, + augmented_counterpart: + current.augmented_counterpart ?? incoming.augmented_counterpart, + crop_types: current.crop_types ?? incoming.crop_types, + sensor_modality: current.sensor_modality ?? incoming.sensor_modality, + real_or_synthetic: + current.real_or_synthetic ?? incoming.real_or_synthetic, + platform: + current.platform || incoming.platform + ? Array.from( + new Set([ + ...(current.platform ?? []), + ...(incoming.platform ?? []), + ]), + ) + : null, + input_data_format: + current.input_data_format ?? incoming.input_data_format, + annotation_format: + current.annotation_format ?? incoming.annotation_format, + num_images: current.num_images ?? incoming.num_images, + augmented_num_images: + current.augmented_num_images ?? incoming.augmented_num_images, + augmented_zip_size_bytes: + current.augmented_zip_size_bytes ?? + incoming.augmented_zip_size_bytes, + documentation: current.documentation ?? incoming.documentation, + classes: current.classes ?? incoming.classes, + stats_mean: current.stats_mean ?? incoming.stats_mean, + stats_std: current.stats_std ?? incoming.stats_std, + examples_image_url: + current.examples_image_url ?? incoming.examples_image_url, + license: current.license ?? incoming.license, + citation: current.citation ?? incoming.citation, + parent_dataset: current.parent_dataset ?? incoming.parent_dataset, + zip_size_bytes: current.zip_size_bytes ?? incoming.zip_size_bytes, + hf_link: current.hf_link ?? incoming.hf_link, + dataset_type: + current.dataset_type === "vlm" || incoming.dataset_type === "vlm" + ? "vlm" + : "vision", + qa_type: current.qa_type ?? incoming.qa_type, + task_dimensions: current.task_dimensions ?? incoming.task_dimensions, + num_task_types: current.num_task_types ?? incoming.num_task_types, + conversation_format: + current.conversation_format ?? incoming.conversation_format, + num_rows: current.num_rows ?? incoming.num_rows, + source_datasets: current.source_datasets ?? incoming.source_datasets, + }; } function normalizeManifest(json: unknown): Dataset[] { - const records = Array.isArray(json) ? json : isRecord(json) ? Object.values(json) : []; - return records.map(normalizeDataset).filter((entry): entry is Dataset => entry != null); + const records = Array.isArray(json) + ? json + : isRecord(json) + ? Object.values(json) + : []; + return records + .map(normalizeDataset) + .filter((entry): entry is Dataset => entry != null); } async function fetchManifest(manifestUrl: string): Promise { - const response = await fetch(manifestUrl); - if (!response.ok) { - throw new Error(`Failed to load ${manifestUrl}`); - } - return normalizeManifest(await response.json()); + const response = await fetch(manifestUrl); + if (!response.ok) { + throw new Error(`Failed to load ${manifestUrl}`); + } + return normalizeManifest(await response.json()); } export async function loadDatasets(manifestUrls: string[]): Promise { - const results = await Promise.allSettled(manifestUrls.map((manifestUrl) => fetchManifest(manifestUrl))); - const merged = new Map(); - let loadedAny = false; - - for (const result of results) { - if (result.status !== 'fulfilled') continue; - loadedAny = true; - for (const entry of result.value) { - const existing = merged.get(entry.name); - merged.set(entry.name, existing ? mergeDataset(existing, entry) : entry); + const results = await Promise.allSettled( + manifestUrls.map((manifestUrl) => fetchManifest(manifestUrl)), + ); + const merged = new Map(); + let loadedAny = false; + + for (const result of results) { + if (result.status !== "fulfilled") continue; + loadedAny = true; + for (const entry of result.value) { + const existing = merged.get(entry.name); + merged.set( + entry.name, + existing ? mergeDataset(existing, entry) : entry, + ); + } } - } - if (loadedAny) { - return Array.from(merged.values()).sort((a, b) => a.name.localeCompare(b.name)); - } + if (loadedAny) { + return Array.from(merged.values()).sort((a, b) => + a.name.localeCompare(b.name), + ); + } - const firstError = results.find((result): result is PromiseRejectedResult => result.status === 'rejected'); - throw firstError?.reason instanceof Error ? firstError.reason : new Error('Failed to load datasets'); -} - -export function useDatasets(): { data: Dataset[]; loading: boolean; error: Error | null } { - const [data, setData] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const resolvedManifestUrls = DATASET_MANIFESTS.map((manifest) => useBaseUrl(manifest)); - // Memoized off the individual (stable) resolved URLs rather than reusing the array - // from .map() above, which is a new reference every render and would otherwise - // retrigger the effect below on every single render — an infinite fetch loop. - const manifestUrls = useMemo(() => resolvedManifestUrls, resolvedManifestUrls); - - useEffect(() => { - let active = true; - loadDatasets(manifestUrls) - .then((next) => { - if (!active) return; - setData(next); - }) - .catch((err) => { - if (!active) return; - setError(err instanceof Error ? err : new Error('Failed to load datasets')); - }) - .finally(() => { - if (!active) return; - setLoading(false); - }); - - return () => { - active = false; - }; - }, [manifestUrls]); + const firstError = results.find( + (result): result is PromiseRejectedResult => + result.status === "rejected", + ); + throw firstError?.reason instanceof Error + ? firstError.reason + : new Error("Failed to load datasets"); +} - return { data, loading, error }; +export function useDatasets(): { + data: Dataset[]; + loading: boolean; + error: Error | null; +} { + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const resolvedManifestUrls = DATASET_MANIFESTS.map((manifest) => + useBaseUrl(manifest), + ); + // Memoized off the individual (stable) resolved URLs rather than reusing the array + // from .map() above, which is a new reference every render and would otherwise + // retrigger the effect below on every single render — an infinite fetch loop. + const manifestUrls = useMemo( + () => resolvedManifestUrls, + resolvedManifestUrls, + ); + + useEffect(() => { + let active = true; + loadDatasets(manifestUrls) + .then((next) => { + if (!active) return; + setData(next); + }) + .catch((err) => { + if (!active) return; + setError( + err instanceof Error + ? err + : new Error("Failed to load datasets"), + ); + }) + .finally(() => { + if (!active) return; + setLoading(false); + }); + + return () => { + active = false; + }; + }, [manifestUrls]); + + return { data, loading, error }; } -function matchesFieldValue(value: string | string[] | null | undefined, values: string[], mode: 'exact' | 'containsAny') { - if (value == null || values.length === 0) return false; - if (Array.isArray(value)) { - return mode === 'containsAny' - ? value.some((entry) => values.includes(entry)) - : value.some((entry) => values.includes(entry)); - } - if (mode === 'containsAny') { - return values.some((entry) => value.toLowerCase().includes(entry.toLowerCase())); - } - return values.includes(value); +function matchesFieldValue( + value: string | string[] | null | undefined, + values: string[], + mode: "exact" | "containsAny", +) { + if (value == null || values.length === 0) return false; + if (Array.isArray(value)) { + return mode === "containsAny" + ? value.some((entry) => values.includes(entry)) + : values.length === value.length && values.every((entry) => value.includes(entry)); + } + if (mode === "containsAny") { + return values.some((entry) => + value.toLowerCase().includes(entry.toLowerCase()), + ); + } + return values.includes(value); } export function filterDatasets( - datasets: Dataset[], - opts: { - q?: string; - fieldFilters?: DatasetFieldFilter[]; - mlTasks?: string[]; - agTasks?: string[]; - platforms?: string[]; - realOrSynthetic?: string[]; - includeChildren?: boolean; - } + datasets: Dataset[], + opts: { + q?: string; + fieldFilters?: DatasetFieldFilter[]; + mlTasks?: string[]; + agTasks?: string[]; + platforms?: string[]; + realOrSynthetic?: string[]; + includeChildren?: boolean; + }, ): Dataset[] { - let out = datasets; + let out = datasets; - if (opts.includeChildren === false) { - out = out.filter((d) => !d.parent_dataset); - } + if (opts.includeChildren === false) { + out = out.filter((d) => !isChildDataset(d)); + } - if (opts.q?.trim()) { - const q = opts.q.trim().toLowerCase(); - out = out.filter((d) => { - const locationMatches = Array.isArray(d.location) - ? d.location.some((entry) => entry.toLowerCase().includes(q)) - : d.location?.toLowerCase().includes(q) ?? false; - const cropMatches = d.crop_types?.some((entry) => entry.toLowerCase().includes(q)) ?? false; - const countryMatches = Array.isArray(d.country) - ? d.country.some((entry) => entry.toLowerCase().includes(q)) - : d.country?.toLowerCase().includes(q) ?? false; - return ( - d.name.toLowerCase().includes(q) || - d.agricultural_task?.toLowerCase().includes(q) || - d.machine_learning_task?.toLowerCase().includes(q) || - d.environment?.toLowerCase().includes(q) || - d.augmented_counterpart?.toLowerCase().includes(q) || - d.platform?.toLowerCase().includes(q) || - countryMatches || - locationMatches || - cropMatches - ); - }); - } + if (opts.q?.trim()) { + const q = opts.q.trim().toLowerCase(); + out = out.filter((d) => { + const locationMatches = Array.isArray(d.location) + ? d.location.some((entry) => entry.toLowerCase().includes(q)) + : (d.location?.toLowerCase().includes(q) ?? false); + const countryMatches = Array.isArray(d.country) + ? d.country.some((entry) => entry.toLowerCase().includes(q)) + : (d.country?.toLowerCase().includes(q) ?? false); + const cropMatches = + d.crop_types?.some((entry) => + entry.toLowerCase().includes(q), + ) ?? false; + return ( + d.name.toLowerCase().includes(q) || + d.agricultural_task?.toLowerCase().includes(q) || + d.machine_learning_task?.toLowerCase().includes(q) || + d.environment?.toLowerCase().includes(q) || + d.augmented_counterpart?.toLowerCase().includes(q) || + d.platform?.some((p) => p.toLowerCase().includes(q)) || + countryMatches || + locationMatches || + cropMatches + ); + }); + } - for (const filter of opts.fieldFilters ?? []) { - if (!filter.values?.length) continue; - out = out.filter((dataset) => matchesFieldValue(dataset[filter.field] as string | string[] | null | undefined, filter.values!, filter.mode ?? 'exact')); - } + for (const filter of opts.fieldFilters ?? []) { + if (!filter.values?.length) continue; + out = out.filter((dataset) => + matchesFieldValue( + dataset[filter.field] as string | string[] | null | undefined, + filter.values!, + filter.mode ?? "exact", + ), + ); + } - if (opts.mlTasks?.length) { - out = out.filter((d) => d.machine_learning_task != null && opts.mlTasks!.includes(d.machine_learning_task)); - } - if (opts.agTasks?.length) { - out = out.filter((d) => d.agricultural_task != null && opts.agTasks!.includes(d.agricultural_task)); - } - if (opts.platforms?.length) { - out = out.filter((d) => d.platform != null && opts.platforms!.includes(d.platform)); - } - if (opts.realOrSynthetic?.length) { - out = out.filter((d) => d.real_or_synthetic != null && opts.realOrSynthetic!.includes(d.real_or_synthetic)); - } + if (opts.mlTasks?.length) { + out = out.filter( + (d) => + d.machine_learning_task != null && + opts.mlTasks!.includes(d.machine_learning_task), + ); + } + if (opts.agTasks?.length) { + out = out.filter( + (d) => + d.agricultural_task != null && + opts.agTasks!.includes(d.agricultural_task), + ); + } + if (opts.platforms?.length) { + out = out.filter( + (d) => + d.platform != null && + d.platform.some((p) => opts.platforms!.includes(p)), + ); + } + if (opts.realOrSynthetic?.length) { + out = out.filter( + (d) => + d.real_or_synthetic != null && + opts.realOrSynthetic!.includes(d.real_or_synthetic), + ); + } - return out; + return out; } export function useDatasetOptions(data: Dataset[]) { - return useMemo(() => { - const unique = (values: Array, sort = true) => { - const flattened = values.flatMap((value) => (Array.isArray(value) ? value : value != null ? [value] : [])); - const set = new Set(flattened.filter((value) => Boolean(value && String(value).trim()))); - const list = Array.from(set); - if (sort) list.sort((a, b) => a.localeCompare(b)); - return list; - }; + return useMemo(() => { + const unique = ( + values: Array, + sort = true, + ) => { + const flattened = values.flatMap((value) => + Array.isArray(value) ? value : value != null ? [value] : [], + ); + const set = new Set( + flattened.filter((value) => + Boolean(value && String(value).trim()), + ), + ); + const list = Array.from(set); + if (sort) list.sort((a, b) => a.localeCompare(b)); + return list; + }; + + return { + mlTasks: unique(data.map((d) => d.machine_learning_task)), + agTasks: unique(data.map((d) => d.agricultural_task)), + environments: unique(data.map((d) => d.environment)), + augmentedCounterparts: unique( + data.map((d) => d.augmented_counterpart), + ), + cropTypes: unique(data.flatMap((d) => d.crop_types ?? [])), + locations: unique(data.map((d) => d.display_location)), + platforms: unique(data.flatMap((d) => d.platform ?? [])), + realOptions: unique(data.map((d) => d.real_or_synthetic)), + datasetTypes: unique(data.map((d) => d.dataset_type)), + qaTypes: unique(data.flatMap((d) => d.qa_type ?? [])), + taskDimensions: unique( + data.flatMap((d) => d.task_dimensions ?? []), + ), + }; + }, [data]); +} - return { - mlTasks: unique(data.map((d) => d.machine_learning_task)), - agTasks: unique(data.map((d) => d.agricultural_task)), - environments: unique(data.map((d) => d.environment)), - augmentedCounterparts: unique(data.map((d) => d.augmented_counterpart)), - cropTypes: unique(data.flatMap((d) => d.crop_types ?? [])), - locations: unique(data.map((d) => d.display_location)), - platforms: unique(data.map((d) => d.platform)), - realOptions: unique(data.map((d) => d.real_or_synthetic)), - }; - }, [data]); +export function toTitleCase(value: string): string { + return toDisplayLabel(value); } -export function formatDisplayLocation(value: string | string[] | null | undefined): string { - if (value == null) return '—'; - return Array.isArray(value) ? value.join(', ') : value; +function parsePlatform(raw: unknown): string[] | null { + const tokens: string[] = []; + const pushSplit = (s: string) => + s.split(",").forEach((part) => { + const t = part.trim(); + if (t) tokens.push(t); + }); + if (Array.isArray(raw)) { + raw.forEach((entry) => { + if (typeof entry === "string") pushSplit(entry); + }); + } else if (typeof raw === "string") { + pushSplit(raw); + } + if (!tokens.length) return null; + const seen = new Map(); + for (const t of tokens) { + const key = t.toLowerCase(); + if (!seen.has(key)) seen.set(key, toTitleCase(t)); + } + return Array.from(seen.values()); +} + +export function formatDisplayLocation( + value: string | string[] | null | undefined, +): string { + if (value == null) return "—"; + return Array.isArray(value) + ? value.map(toTitleCase).join(", ") + : toTitleCase(value); } // Primary location label used on cards/badges: prefer the structured `country` field, @@ -470,25 +679,43 @@ export function formatCoordinateList(value: string | string[] | null): string[] } export interface DatasetStats { - datasetCount: number; - imageCount: number; - taskTypeCount: number; + datasetCount: number; + imageCount: number; + taskTypeCount: number; +} + +// `parent_dataset` means two different things depending on the record. On vision datasets it +// marks a child/augmented variant of another AgML dataset, which shouldn't be counted or listed +// separately. On VLM records it's a pointer to the upstream source the dataset was built from +// (a Hugging Face repo slug), and those are standalone top-level datasets — so reading the field +// as "this is a child" there wrongly hid all six of them from the counts and listings. +export function isChildDataset(dataset: Dataset): boolean { + return Boolean(dataset.parent_dataset) && dataset.dataset_type !== "vlm"; +} + +// Key for counting *distinct* datasets: child variants collapse onto their parent so an +// augmented counterpart isn't counted twice, while VLM records key on their own name rather +// than the upstream repo slug (which names a Hugging Face repo, not an AgML dataset). +export function datasetGroupKey(dataset: Dataset): string { + return isChildDataset(dataset) ? dataset.parent_dataset! : dataset.name; } // Shared by the homepage stats row and the dataset search page's hero stats, so both // report the same real numbers instead of two slightly different ad-hoc counts. export function computeDatasetStats(datasets: Dataset[]): DatasetStats { - const topLevel = datasets.filter((dataset) => !dataset.parent_dataset); - const imageCount = topLevel - .filter((dataset) => !dataset.name.startsWith('iNatAg-mini')) - .reduce((sum, dataset) => sum + (dataset.num_images ?? 0), 0); - const taskTypeCount = new Set( - datasets.map((dataset) => dataset.machine_learning_task).filter((task): task is string => Boolean(task)) - ).size; - - return { - datasetCount: topLevel.length, - imageCount, - taskTypeCount, - }; -} + const topLevel = datasets.filter((dataset) => !isChildDataset(dataset)); + const imageCount = topLevel + .filter((dataset) => !dataset.name.startsWith("iNatAg-mini")) + .reduce((sum, dataset) => sum + (dataset.num_images ?? 0), 0); + const taskTypeCount = new Set( + datasets + .map((dataset) => dataset.machine_learning_task) + .filter((task): task is string => Boolean(task)), + ).size; + + return { + datasetCount: topLevel.length, + imageCount, + taskTypeCount, + }; +} \ No newline at end of file diff --git a/src/lib/labelOverrides.ts b/src/lib/labelOverrides.ts new file mode 100644 index 0000000..a057e34 --- /dev/null +++ b/src/lib/labelOverrides.ts @@ -0,0 +1,74 @@ +// Explicit display-label overrides for raw dataset field values (task types, platforms, +// modalities, QA types, etc). Add an entry here whenever the auto-generated Title Case +// (underscores/hyphens replaced, each word capitalized) isn't right — acronyms, special casing. +export const LABEL_OVERRIDES: Record = { + /* machine_learning_task */ + "image-text-to-text": "Image Text To Text", + image_classification: "Image Classification", + object_detection: "Object Detection", + semantic_segmentation: "Semantic Segmentation", + instance_segmentation: "Instance Segmentation", + image_regression: "Image Regression", + + /* qa_type */ + judgement: "Judgement", + counting: "Counting", + multiple_choice_text: "Multiple Choice Text", + multiple_choice_image: "Multiple Choice Image", + open_ended: "Open Ended", + long_form_qa: "Long Form QA", + + /* conversation_format */ + single_turn_reasoning: "Single Turn Reasoning", + multi_turn_reasoning: "Multi Turn Reasoning", + mixed: "Mixed", + + /* environment */ + field: "Field", + lab: "Lab", + + /* real_or_synthetic */ + real: "Real", + synthetic: "Synthetic", + + /* platform */ + ground: "Ground", + "ground camera": "Ground Camera", + handheld: "Handheld", + "handheld/ground": "Handheld/Ground", + ground_fixed: "Ground Fixed", + ground_mobile: "Ground Mobile", + aerial: "Aerial", + satellite: "Satellite", + uav: "UAV", + uas: "UAS", + + /* sensor_modality (acronym casing, used where title-cased elsewhere) */ + rgb: "RGB", + nir: "NIR", + "nir multispectral": "NIR Multispectral", + multispectral: "Multispectral", + gps: "GPS", + lidar: "LIDAR", + uv: "UV", + ir: "IR", + + /* country */ + usa: "USA", +}; + +function autoTitleCase(value: string): string { + return value + .replace(/[_-]/g, " ") + .split(" ") + .map((word) => + word ? word[0].toUpperCase() + word.slice(1).toLowerCase() : word, + ) + .join(" "); +} + +// Looks up an explicit override (case-insensitive); falls back to auto Title Case. +export function toDisplayLabel(value: string): string { + const override = LABEL_OVERRIDES[value.toLowerCase()]; + return override ?? autoTitleCase(value); +} \ No newline at end of file diff --git a/src/lib/plotlyChrome.ts b/src/lib/plotlyChrome.ts new file mode 100644 index 0000000..0099e60 --- /dev/null +++ b/src/lib/plotlyChrome.ts @@ -0,0 +1,87 @@ +import { useMemo } from 'react'; +import { useColorMode } from '@docusaurus/theme-common'; + +// Modern browsers serialize getComputedStyle().color back in whatever color space it was +// declared in — the site's --agml-* tokens are oklch(), so a naive resolve returns an +// oklch() string verbatim. Plotly's WebGL/SVG color parsing doesn't understand that syntax, +// so it silently ignores the color and falls back to its own default. Convert explicitly. +// (OKLCH -> OKLab -> linear sRGB -> sRGB, per the CSS Color 4 reference algorithm.) +// Exported for reuse by anything that needs to hand Plotly a procedurally generated OKLCH +// color (e.g. per-class hues) rather than one resolved from a CSS variable. +export function oklchToRgb(l: number, c: number, hDeg: number): string { + const hRad = (hDeg * Math.PI) / 180; + const a = c * Math.cos(hRad); + const b = c * Math.sin(hRad); + + const l_ = l + 0.3963377774 * a + 0.2158037573 * b; + const m_ = l - 0.1055613458 * a - 0.0638541728 * b; + const s_ = l - 0.0894841775 * a - 1.291485548 * b; + + const l3 = l_ ** 3; + const m3 = m_ ** 3; + const s3 = s_ ** 3; + + const rLin = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3; + const gLin = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3; + const bLin = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.707614701 * s3; + + const toSrgb = (channel: number) => { + const clamped = channel <= 0.0031308 ? 12.92 * channel : 1.055 * Math.pow(Math.max(channel, 0), 1 / 2.4) - 0.055; + return Math.max(0, Math.min(255, Math.round(clamped * 255))); + }; + + return `rgb(${toSrgb(rLin)}, ${toSrgb(gLin)}, ${toSrgb(bLin)})`; +} + +function normalizeColor(color: string): string { + const match = /oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)/i.exec(color); + if (!match) return color; + const [, l, c, h] = match; + return oklchToRgb(Number(l), Number(c), Number(h)); +} + +function resolveCssColor(varName: string, fallback: string): string { + if (typeof document === 'undefined') return fallback; + const probe = document.createElement('span'); + probe.style.color = `var(${varName})`; + probe.style.position = 'absolute'; + probe.style.visibility = 'hidden'; + document.body.appendChild(probe); + const resolved = getComputedStyle(probe).color; + document.body.removeChild(probe); + return resolved ? normalizeColor(resolved) : fallback; +} + +function resolveCssFontFamily(varName: string, fallback: string): string { + if (typeof document === 'undefined') return fallback; + const probe = document.createElement('span'); + probe.style.fontFamily = `var(${varName})`; + probe.style.position = 'absolute'; + probe.style.visibility = 'hidden'; + document.body.appendChild(probe); + const resolved = getComputedStyle(probe).fontFamily; + document.body.removeChild(probe); + return resolved || fallback; +} + +// Plotly's WebGL/SVG chrome can't consume CSS custom properties directly — resolve the site's +// actual computed colors/fonts so chart chrome (axis lines, grid, tick labels, hover tooltip) +// tracks the design system's --agml-*/--ifm-* tokens (and light/dark mode) instead of guessed +// literals. Recomputed whenever the theme toggles. +export function usePlotlyChrome() { + const { colorMode } = useColorMode(); + return useMemo( + () => ({ + grid: resolveCssColor('--agml-border', '#33383a'), + text: resolveCssColor('--agml-muted', '#8a8f8c'), + tooltipBg: resolveCssColor('--agml-tag-bg', '#1c211d'), + tooltipBorder: resolveCssColor('--agml-border-strong', '#3a4038'), + tooltipText: resolveCssColor('--agml-text', '#e8ece9'), + // Ring color for marker outlines — matches the panel surface so overlapping points + // separate via a gap rather than a contrasting stroke. + markerRing: resolveCssColor('--agml-surface-soft', '#171a17'), + fontFamily: resolveCssFontFamily('--ifm-code-font-family', 'monospace'), + }), + [colorMode], + ); +} diff --git a/src/lib/scoring.ts b/src/lib/scoring.ts new file mode 100644 index 0000000..a7e27eb --- /dev/null +++ b/src/lib/scoring.ts @@ -0,0 +1,92 @@ +// Implements the scoring formulas from SCORING_FORMULAS.md against a benchmark report. Kept +// separate from benchmarks.ts (data fetching) and DatasetMetadataModal.tsx (rendering) so the +// math has one source of truth that matches the published doc line for line. +import type { ImageClassificationBenchmark } from './benchmarks'; + +export interface AxisScores { + overall: number | null; + structural: number | null; + difficulty: number | null; + diversity: number | null; + annotation: number | null; +} + +function clamp(x: number, min: number, max: number): number { + return Math.min(Math.max(x, min), max); +} + +// A metric is "available" if its key exists in `metrics` and isn't a skipped run (e.g. +// metadata_coverage with no metadata columns detected). +function has(metrics: ImageClassificationBenchmark['metrics'], key: keyof ImageClassificationBenchmark['metrics']): boolean { + const value = metrics[key]; + return value != null && !(value as { skipped?: boolean }).skipped; +} + +export function computeScores(benchmark: ImageClassificationBenchmark): AxisScores { + const m = benchmark.metrics; + const phases = benchmark.phases_completed ?? []; + const p1 = phases.includes(1); + const p2 = phases.includes(2); + const p3 = phases.includes(3); + + const axes: Partial> = {}; + + // Axis 1 — Structural Quality + if (p1 && has(m, 'class_imbalance') && has(m, 'exact_duplicate') && has(m, 'near_duplicate') && has(m, 'resolution_consistency')) { + const balance = clamp(m.class_imbalance!.normalized_entropy * 10, 0, 10); + const combined = m.exact_duplicate!.exact_duplicate_rate + m.near_duplicate!.near_duplicate_rate; + const redundancy = clamp(10 * (1 - combined / 0.2), 0, 10); + const resolution = clamp(10 * (1 - m.resolution_consistency!.area_cv), 0, 10); + const crossSplit = m.exact_duplicate!.cross_split_duplicates + m.near_duplicate!.cross_split_near_duplicates; + const totalImages = m.exact_duplicate!.total_images; + const penalty = totalImages > 0 ? clamp((crossSplit * 100) / totalImages, 0, 2) : 0; + axes.structural = clamp(0.4 * balance + 0.35 * redundancy + 0.25 * resolution - penalty, 0, 10); + } + + // Axis 2 — Content Difficulty + if (p2 && has(m, 'feature_separability')) { + const sep = m.feature_separability!; + const sil = clamp(sep.silhouette_score * 10, 0, 10); + const db = clamp(10 - sep.davies_bouldin_index * 3, 0, 10); + const separability = (sil + db) / 2; + if (p3 && has(m, 'dataset_cartography') && has(m, 'class_confusability')) { + const cart = clamp(10 * (1 - m.dataset_cartography!.pct_hard / 50), 0, 10); + const conf = clamp(m.class_confusability!.accuracy * 10, 0, 10); + axes.difficulty = 0.4 * separability + 0.3 * cart + 0.3 * conf; + } else { + axes.difficulty = separability; + } + } + + // Axis 3 — Diversity & Coverage + if (p2 && has(m, 'intra_class_diversity')) { + axes.diversity = clamp((m.intra_class_diversity!.mean_diversity / 0.4) * 10, 0, 10); + } + + // Axis 4 — Annotation Reliability + if (p3 && has(m, 'label_noise')) { + // Base is clamped to [0, 1] before the fractional exponent: a negative base raised to a + // fractional power is undefined (NaN in JS), and the doc's intent is to floor the score at + // 0 once noise reaches 10%, not to produce NaN beyond that point. + const base = clamp(1 - m.label_noise!.estimated_noise_rate / 0.1, 0, 1); + axes.annotation = clamp(10 * Math.pow(base, 1.5), 0, 10); + } + + const weights: Record = { structural: 0.3, difficulty: 0.25, diversity: 0.25, annotation: 0.2 }; + let weightedSum = 0; + let totalWeight = 0; + for (const [axis, score] of Object.entries(axes)) { + weightedSum += score * weights[axis]; + totalWeight += weights[axis]; + } + const overall = totalWeight > 0 ? weightedSum / totalWeight : null; + + const round1 = (value: number | undefined) => (value != null ? Math.round(value * 10) / 10 : null); + return { + overall: round1(overall ?? undefined), + structural: round1(axes.structural), + difficulty: round1(axes.difficulty), + diversity: round1(axes.diversity), + annotation: round1(axes.annotation), + }; +} diff --git a/src/lib/semanticSearchIndex.ts b/src/lib/semanticSearchIndex.ts index 4c4d4a3..3b7a868 100644 --- a/src/lib/semanticSearchIndex.ts +++ b/src/lib/semanticSearchIndex.ts @@ -62,7 +62,7 @@ export function buildIndexRow(name: string, dataset: Dataset | undefined) { location: toLocationArray(dataset?.location), environment: dataset?.environment ? humanize(dataset.environment) : '', sensor_modality: dataset?.sensor_modality ? humanize(dataset.sensor_modality) : '', - platform: dataset?.platform ? humanize(dataset.platform) : '', + platform: dataset?.platform?.length ? humanize(dataset.platform.join(', ')) : '', // Truncated to match scripts/generate-embeddings.mjs's buildEmbeddingText(), which truncates // `classes` to the same length for the corpus-side embedding text. This only lines up because // both sides join array-valued `classes` with ', ' before truncating — `dataset.classes` here diff --git a/src/pages/datasets/index.module.css b/src/pages/datasets/index.module.css index 32f9694..6ef7aeb 100644 --- a/src/pages/datasets/index.module.css +++ b/src/pages/datasets/index.module.css @@ -231,6 +231,11 @@ color: var(--agml-badge-other-fg); } +.badgeVlm { + background: var(--agml-badge-vlm-bg); + color: var(--agml-badge-vlm-fg); +} + .tag { font-family: var(--ifm-code-font-family); font-size: 0.68rem; diff --git a/src/pages/datasets/index.tsx b/src/pages/datasets/index.tsx index d4e8770..8034599 100644 --- a/src/pages/datasets/index.tsx +++ b/src/pages/datasets/index.tsx @@ -4,7 +4,8 @@ import { useHistory, useLocation } from '@docusaurus/router'; import { DatasetMetadataModal } from '../../components/DatasetMetadataModal'; import { MultiSelectDropdown } from '../../components/MultiSelectDropdown'; import styles from './index.module.css'; -import { computeDatasetStats, filterDatasets, formatPrimaryLocation, useDatasets } from '../../lib/datasets'; +import { computeDatasetStats, datasetGroupKey, filterDatasets, formatPrimaryLocation, useDatasets } from '../../lib/datasets'; +import { toDisplayLabel } from '../../lib/labelOverrides'; import { useSemanticDatasetSearch } from '../../lib/semanticSearch'; type FilterKind = 'checkbox' | 'dropdown'; @@ -24,14 +25,14 @@ const DATASET_FILTERS: DatasetFilterConfig[] = [ label: 'CV Task', field: 'machine_learning_task', kind: 'checkbox', - formatOption: (value) => value.replace(/_/g, ' '), + formatOption: (value) => toDisplayLabel(value), }, { key: 'ag_task', label: 'Agricultural Task', field: 'agricultural_task', kind: 'dropdown', - formatOption: (value) => value.replace(/_/g, ' '), + formatOption: (value) => toDisplayLabel(value), }, { key: 'crop_types', @@ -39,7 +40,7 @@ const DATASET_FILTERS: DatasetFilterConfig[] = [ field: 'crop_types', kind: 'dropdown', mode: 'containsAny', - formatOption: (value) => value.replace(/_/g, ' '), + formatOption: (value) => toDisplayLabel(value), }, { key: 'location', @@ -47,28 +48,37 @@ const DATASET_FILTERS: DatasetFilterConfig[] = [ field: 'display_location', kind: 'dropdown', mode: 'containsAny', - formatOption: (value) => value, - }, - { - key: 'environment', - label: 'Environment', - field: 'environment', - kind: 'checkbox', - formatOption: (value) => value.charAt(0).toUpperCase() + value.slice(1), + formatOption: (value) => toDisplayLabel(value), }, { key: 'platform', label: 'Platform', field: 'platform', kind: 'dropdown', - formatOption: (value) => value, + mode: 'containsAny', + formatOption: (value) => toDisplayLabel(value), + }, + { + key: 'qa_type', + label: 'QA Type', + field: 'qa_type', + kind: 'dropdown', + mode: 'containsAny', + formatOption: (value) => toDisplayLabel(value), + }, + { + key: 'environment', + label: 'Environment', + field: 'environment', + kind: 'checkbox', + formatOption: (value) => toDisplayLabel(value), }, { key: 'real', label: 'Data Type', field: 'real_or_synthetic', kind: 'checkbox', - formatOption: (value) => value, + formatOption: (value) => toDisplayLabel(value), }, { key: 'augmented_counterpart', @@ -76,7 +86,7 @@ const DATASET_FILTERS: DatasetFilterConfig[] = [ field: 'augmented_counterpart', kind: 'checkbox', formatOption: (value) => (value === 'yes' ? 'Yes' : 'No'), - }, + } ]; type FilterKey = (typeof DATASET_FILTERS)[number]['key']; @@ -118,6 +128,7 @@ function formatBytesDecimal(bytes: number | null | undefined) { function taskBadgeClass(task: string | null): string { if (!task) return styles.badgeOther; + if (task.includes('image-text') || task.includes('text-to-text')) return styles.badgeVlm; if (task.includes('classif')) return styles.badgeClassification; if (task.includes('detect')) return styles.badgeDetection; if (task.includes('segment')) return styles.badgeSegmentation; @@ -187,13 +198,19 @@ function DatasetCard({ machine_learning_task, agricultural_task, num_images, + num_rows, zip_size_bytes, augmented_num_images, augmented_zip_size_bytes, + dataset_type, } = dataset; const fileSize = formatBytesDecimal(zip_size_bytes); const augmentedFileSize = formatBytesDecimal(augmented_zip_size_bytes); const hasAugmented = augmented_num_images != null; + // VLM datasets are row-based (image/text pairs, conversations) rather than image-count based. + const isVlm = dataset_type === 'vlm'; + const countLabel = isVlm ? 'rows' : 'images'; + const countValue = isVlm ? num_rows : num_images; const primaryLocation = formatPrimaryLocation(dataset); return ( @@ -210,15 +227,15 @@ function DatasetCard({
{machine_learning_task && ( - {toLabel(machine_learning_task)} + {toDisplayLabel(machine_learning_task)} )} - {agricultural_task && {toLabel(agricultural_task)}} + {agricultural_task && {toDisplayLabel(agricultural_task)}} {primaryLocation && {primaryLocation}}
- {formatImageCount(num_images)} images + {formatImageCount(countValue)} {countLabel} {fileSize && {fileSize}}
{hasAugmented && ( @@ -326,7 +343,7 @@ export default function DatasetBrowserPage() { const fieldValue = dataset[filter.field] as string | string[] | null | undefined; return Array.isArray(fieldValue) ? fieldValue.includes(value) : fieldValue === value; }) - .map((dataset) => dataset.parent_dataset ?? dataset.name) + .map(datasetGroupKey) ).size, ]) ), @@ -425,7 +442,7 @@ export default function DatasetBrowserPage() { const displayed = useMemo(() => filtered.slice(0, showCount), [filtered, showCount]); const hasMore = filtered.length > showCount; const distinctDatasetCount = useMemo( - () => new Set(filtered.map((dataset) => dataset.parent_dataset ?? dataset.name)).size, + () => new Set(filtered.map(datasetGroupKey)).size, [filtered] ); const selectedDataset = useMemo( @@ -550,4 +567,4 @@ export default function DatasetBrowserPage() {
); -} +} \ No newline at end of file diff --git a/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_2d.json b/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_2d.json new file mode 100644 index 0000000..4d07123 --- /dev/null +++ b/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_2d.json @@ -0,0 +1 @@ +[{"x":16.3714,"y":5.8098,"label":"Mosaic_Virus","split":"train","index":0},{"x":2.831,"y":16.3235,"label":"Mosaic_Virus","split":"train","index":1},{"x":10.8214,"y":-8.0589,"label":"Mosaic_Virus","split":"train","index":2},{"x":15.5892,"y":5.8084,"label":"Mosaic_Virus","split":"val","index":3},{"x":6.6311,"y":-4.0435,"label":"Mosaic_Virus","split":"val","index":4},{"x":10.8813,"y":-8.0746,"label":"Mosaic_Virus","split":"test","index":5},{"x":15.8823,"y":6.2675,"label":"Mosaic_Virus","split":"val","index":6},{"x":6.6619,"y":-4.0132,"label":"Mosaic_Virus","split":"train","index":7},{"x":11.5232,"y":-7.8614,"label":"Mosaic_Virus","split":"train","index":8},{"x":14.2003,"y":-5.0249,"label":"Mosaic_Virus","split":"val","index":9},{"x":15.7467,"y":5.4745,"label":"Mosaic_Virus","split":"train","index":10},{"x":14.8385,"y":-5.5567,"label":"Mosaic_Virus","split":"val","index":11},{"x":17.1104,"y":2.3974,"label":"Mosaic_Virus","split":"train","index":12},{"x":11.4899,"y":-7.9841,"label":"Mosaic_Virus","split":"test","index":13},{"x":14.9355,"y":6.2542,"label":"Mosaic_Virus","split":"train","index":14},{"x":13.8311,"y":6.2187,"label":"Mosaic_Virus","split":"val","index":15},{"x":16.5356,"y":6.1169,"label":"Mosaic_Virus","split":"train","index":16},{"x":11.3994,"y":-8.1569,"label":"Mosaic_Virus","split":"test","index":17},{"x":15.8203,"y":5.4566,"label":"Mosaic_Virus","split":"train","index":18},{"x":17.0404,"y":5.698,"label":"Mosaic_Virus","split":"train","index":19},{"x":16.4133,"y":5.6642,"label":"Mosaic_Virus","split":"train","index":20},{"x":2.8383,"y":16.3017,"label":"Mosaic_Virus","split":"train","index":21},{"x":14.8619,"y":-5.5942,"label":"Mosaic_Virus","split":"train","index":22},{"x":12.2024,"y":-7.7137,"label":"Mosaic_Virus","split":"train","index":23},{"x":16.1376,"y":6.1955,"label":"Mosaic_Virus","split":"train","index":24},{"x":16.2172,"y":6.2075,"label":"Mosaic_Virus","split":"train","index":25},{"x":11.1866,"y":-7.8155,"label":"Mosaic_Virus","split":"train","index":26},{"x":11.8213,"y":-7.7887,"label":"Mosaic_Virus","split":"train","index":27},{"x":17.1828,"y":-5.0315,"label":"Mosaic_Virus","split":"test","index":28},{"x":16.0921,"y":-3.9648,"label":"Mosaic_Virus","split":"test","index":29},{"x":17.3669,"y":2.1082,"label":"Mosaic_Virus","split":"train","index":30},{"x":14.1618,"y":-5.0692,"label":"Mosaic_Virus","split":"val","index":31},{"x":6.7639,"y":-3.9109,"label":"Mosaic_Virus","split":"train","index":32},{"x":17.0775,"y":-5.23,"label":"Mosaic_Virus","split":"train","index":33},{"x":14.0908,"y":-5.0747,"label":"Mosaic_Virus","split":"train","index":34},{"x":16.8338,"y":-6.248,"label":"Mosaic_Virus","split":"train","index":35},{"x":15.5707,"y":-4.2709,"label":"Mosaic_Virus","split":"train","index":36},{"x":16.397,"y":6.1789,"label":"Mosaic_Virus","split":"train","index":37},{"x":16.2553,"y":5.814,"label":"Mosaic_Virus","split":"train","index":38},{"x":11.3615,"y":-7.9953,"label":"Mosaic_Virus","split":"train","index":39},{"x":6.8143,"y":-3.8603,"label":"Mosaic_Virus","split":"train","index":40},{"x":13.9858,"y":6.6144,"label":"Mosaic_Virus","split":"train","index":41},{"x":13.9746,"y":-4.9174,"label":"Mosaic_Virus","split":"val","index":42},{"x":16.8923,"y":-6.3155,"label":"Mosaic_Virus","split":"train","index":43},{"x":15.0706,"y":-6.071,"label":"Mosaic_Virus","split":"val","index":44},{"x":0.7973,"y":13.1296,"label":"Mosaic_Virus","split":"train","index":45},{"x":15.5573,"y":6.0951,"label":"Mosaic_Virus","split":"train","index":46},{"x":15.0938,"y":-6.0639,"label":"Mosaic_Virus","split":"train","index":47},{"x":0.778,"y":13.1108,"label":"Mosaic_Virus","split":"train","index":48},{"x":6.7631,"y":-3.9121,"label":"Mosaic_Virus","split":"val","index":49},{"x":11.8769,"y":-7.7955,"label":"Mosaic_Virus","split":"val","index":50},{"x":17.177,"y":-5.0571,"label":"Mosaic_Virus","split":"train","index":51},{"x":14.5472,"y":-4.9917,"label":"Mosaic_Virus","split":"train","index":52},{"x":15.1554,"y":-6.3126,"label":"Mosaic_Virus","split":"test","index":53},{"x":1.6918,"y":13.8482,"label":"Mosaic_Virus","split":"val","index":54},{"x":15.8185,"y":6.4101,"label":"Mosaic_Virus","split":"train","index":55},{"x":15.5853,"y":-4.2671,"label":"Mosaic_Virus","split":"train","index":56},{"x":14.8814,"y":-5.1009,"label":"Mosaic_Virus","split":"train","index":57},{"x":14.0131,"y":6.4859,"label":"Mosaic_Virus","split":"train","index":58},{"x":14.1533,"y":6.5403,"label":"Mosaic_Virus","split":"train","index":59},{"x":17.3586,"y":2.1131,"label":"Mosaic_Virus","split":"train","index":60},{"x":14.5782,"y":-5.1131,"label":"Mosaic_Virus","split":"train","index":61},{"x":16.882,"y":-6.3027,"label":"Mosaic_Virus","split":"train","index":62},{"x":14.1074,"y":6.687,"label":"Mosaic_Virus","split":"train","index":63},{"x":15.3028,"y":-6.5478,"label":"Mosaic_Virus","split":"val","index":64},{"x":1.6692,"y":13.8249,"label":"Mosaic_Virus","split":"train","index":65},{"x":17.3326,"y":2.1614,"label":"Mosaic_Virus","split":"train","index":66},{"x":16.7128,"y":-3.9662,"label":"Mosaic_Virus","split":"train","index":67},{"x":14.8839,"y":-5.0928,"label":"Mosaic_Virus","split":"train","index":68},{"x":14.6941,"y":-5.1857,"label":"Mosaic_Virus","split":"train","index":69},{"x":15.016,"y":6.0631,"label":"Mosaic_Virus","split":"test","index":70},{"x":15.1478,"y":6.2964,"label":"Mosaic_Virus","split":"train","index":71},{"x":11.5756,"y":-7.7472,"label":"Mosaic_Virus","split":"train","index":72},{"x":15.2749,"y":5.7943,"label":"Mosaic_Virus","split":"train","index":73},{"x":15.4523,"y":5.7638,"label":"Mosaic_Virus","split":"val","index":74},{"x":11.5551,"y":-7.7287,"label":"Mosaic_Virus","split":"val","index":75},{"x":14.7475,"y":5.9579,"label":"Mosaic_Virus","split":"val","index":76},{"x":16.7301,"y":-6.0987,"label":"Mosaic_Virus","split":"train","index":77},{"x":16.7432,"y":-3.958,"label":"Mosaic_Virus","split":"train","index":78},{"x":14.8473,"y":-5.0956,"label":"Mosaic_Virus","split":"test","index":79},{"x":14.0513,"y":-4.9668,"label":"Mosaic_Virus","split":"train","index":80},{"x":14.1862,"y":6.4035,"label":"Mosaic_Virus","split":"val","index":81},{"x":3.361,"y":16.3861,"label":"Mosaic_Virus","split":"train","index":82},{"x":15.3535,"y":5.6743,"label":"Mosaic_Virus","split":"train","index":83},{"x":13.769,"y":6.161,"label":"Mosaic_Virus","split":"train","index":84},{"x":17.1227,"y":2.8086,"label":"Mosaic_Virus","split":"train","index":85},{"x":14.6177,"y":6.1114,"label":"Mosaic_Virus","split":"val","index":86},{"x":3.8003,"y":16.4965,"label":"Mosaic_Virus","split":"val","index":87},{"x":14.9076,"y":3.1312,"label":"Mosaic_Virus","split":"test","index":88},{"x":3.7953,"y":16.4827,"label":"Mosaic_Virus","split":"train","index":89},{"x":14.946,"y":3.1562,"label":"Mosaic_Virus","split":"train","index":90},{"x":15.7217,"y":6.2455,"label":"Mosaic_Virus","split":"train","index":91},{"x":15.2446,"y":-6.4727,"label":"Mosaic_Virus","split":"test","index":92},{"x":15.3559,"y":6.0141,"label":"Mosaic_Virus","split":"val","index":93},{"x":15.8567,"y":6.45,"label":"Mosaic_Virus","split":"train","index":94},{"x":13.8477,"y":-5.0325,"label":"Mosaic_Virus","split":"train","index":95},{"x":15.0901,"y":6.078,"label":"Mosaic_Virus","split":"val","index":96},{"x":14.1722,"y":6.6072,"label":"Mosaic_Virus","split":"train","index":97},{"x":17.1018,"y":2.8541,"label":"Mosaic_Virus","split":"train","index":98},{"x":2.8321,"y":16.3292,"label":"Mosaic_Virus","split":"train","index":99},{"x":15.9071,"y":2.8475,"label":"Mosaic_Virus","split":"train","index":100},{"x":13.8135,"y":-5.0163,"label":"Mosaic_Virus","split":"train","index":101},{"x":3.2881,"y":16.4224,"label":"Mosaic_Virus","split":"train","index":102},{"x":15.9203,"y":2.8399,"label":"Mosaic_Virus","split":"train","index":103},{"x":15.5886,"y":6.3858,"label":"Mosaic_Virus","split":"train","index":104},{"x":14.3414,"y":6.1961,"label":"Mosaic_Virus","split":"train","index":105},{"x":17.0722,"y":2.8583,"label":"Mosaic_Virus","split":"test","index":106},{"x":15.3558,"y":5.7184,"label":"Mosaic_Virus","split":"train","index":107},{"x":15.1002,"y":-6.1113,"label":"Mosaic_Virus","split":"train","index":108},{"x":0.8005,"y":13.1307,"label":"Mosaic_Virus","split":"train","index":109},{"x":6.7175,"y":-3.9576,"label":"Mosaic_Virus","split":"train","index":110},{"x":11.8614,"y":-7.8361,"label":"Mosaic_Virus","split":"train","index":111},{"x":17.1699,"y":-5.0734,"label":"Mosaic_Virus","split":"test","index":112},{"x":14.235,"y":-4.9665,"label":"Mosaic_Virus","split":"val","index":113},{"x":6.8023,"y":-3.8726,"label":"Mosaic_Virus","split":"train","index":114},{"x":13.9929,"y":6.6696,"label":"Mosaic_Virus","split":"val","index":115},{"x":14.0635,"y":-4.9517,"label":"Mosaic_Virus","split":"train","index":116},{"x":16.8524,"y":-6.2682,"label":"Mosaic_Virus","split":"test","index":117},{"x":15.092,"y":-6.06,"label":"Mosaic_Virus","split":"test","index":118},{"x":0.7888,"y":13.1212,"label":"Mosaic_Virus","split":"train","index":119},{"x":14.293,"y":6.8564,"label":"Mosaic_Virus","split":"val","index":120},{"x":16.9787,"y":-5.3679,"label":"Mosaic_Virus","split":"test","index":121},{"x":13.9755,"y":-4.9344,"label":"Mosaic_Virus","split":"train","index":122},{"x":17.2674,"y":2.2159,"label":"Mosaic_Virus","split":"train","index":123},{"x":15.6022,"y":-4.2763,"label":"Mosaic_Virus","split":"train","index":124},{"x":15.9731,"y":5.4777,"label":"Mosaic_Virus","split":"train","index":125},{"x":16.2774,"y":6.0757,"label":"Mosaic_Virus","split":"val","index":126},{"x":11.3867,"y":-7.9838,"label":"Mosaic_Virus","split":"train","index":127},{"x":16.2425,"y":5.9434,"label":"Mosaic_Virus","split":"train","index":128},{"x":15.4051,"y":6.3981,"label":"Mosaic_Virus","split":"train","index":129},{"x":11.1778,"y":-7.8162,"label":"Mosaic_Virus","split":"train","index":130},{"x":11.8836,"y":-7.8059,"label":"Mosaic_Virus","split":"train","index":131},{"x":17.1667,"y":-5.0682,"label":"Mosaic_Virus","split":"train","index":132},{"x":16.0877,"y":-3.9567,"label":"Mosaic_Virus","split":"train","index":133},{"x":17.409,"y":2.1756,"label":"Mosaic_Virus","split":"train","index":134},{"x":14.2194,"y":-4.9886,"label":"Mosaic_Virus","split":"train","index":135},{"x":11.3373,"y":-8.183,"label":"Mosaic_Virus","split":"train","index":136},{"x":15.8073,"y":5.3929,"label":"Mosaic_Virus","split":"train","index":137},{"x":13.7098,"y":6.1306,"label":"Mosaic_Virus","split":"test","index":138},{"x":16.4563,"y":5.8008,"label":"Mosaic_Virus","split":"test","index":139},{"x":2.876,"y":16.3574,"label":"Mosaic_Virus","split":"test","index":140},{"x":14.8527,"y":-5.6152,"label":"Mosaic_Virus","split":"train","index":141},{"x":12.2388,"y":-7.7091,"label":"Mosaic_Virus","split":"train","index":142},{"x":15.7842,"y":5.3878,"label":"Mosaic_Virus","split":"train","index":143},{"x":14.8337,"y":-5.3708,"label":"Mosaic_Virus","split":"train","index":144},{"x":12.2988,"y":-7.6601,"label":"Mosaic_Virus","split":"train","index":145},{"x":11.4189,"y":-8.1637,"label":"Mosaic_Virus","split":"val","index":146},{"x":14.9975,"y":6.2043,"label":"Mosaic_Virus","split":"train","index":147},{"x":13.7853,"y":6.1866,"label":"Mosaic_Virus","split":"test","index":148},{"x":15.9727,"y":5.4681,"label":"Mosaic_Virus","split":"train","index":149},{"x":15.8082,"y":5.4968,"label":"Mosaic_Virus","split":"train","index":150},{"x":6.6779,"y":-3.997,"label":"Mosaic_Virus","split":"train","index":151},{"x":11.4621,"y":-7.9607,"label":"Mosaic_Virus","split":"train","index":152},{"x":16.5387,"y":6.0231,"label":"Mosaic_Virus","split":"train","index":153},{"x":2.7917,"y":16.3522,"label":"Mosaic_Virus","split":"val","index":154},{"x":10.7813,"y":-8.0935,"label":"Mosaic_Virus","split":"train","index":155},{"x":15.6091,"y":5.8477,"label":"Mosaic_Virus","split":"train","index":156},{"x":6.6981,"y":-3.9766,"label":"Mosaic_Virus","split":"train","index":157},{"x":3.3592,"y":16.3861,"label":"Mosaic_Virus","split":"train","index":158},{"x":15.9165,"y":2.8413,"label":"Mosaic_Virus","split":"train","index":159},{"x":17.0023,"y":5.7257,"label":"Mosaic_Virus","split":"train","index":160},{"x":14.2792,"y":6.2796,"label":"Mosaic_Virus","split":"train","index":161},{"x":17.0241,"y":2.8591,"label":"Mosaic_Virus","split":"train","index":162},{"x":14.2239,"y":6.3692,"label":"Mosaic_Virus","split":"test","index":163},{"x":17.0843,"y":2.8836,"label":"Mosaic_Virus","split":"train","index":164},{"x":2.8007,"y":16.3488,"label":"Mosaic_Virus","split":"train","index":165},{"x":15.9186,"y":2.8366,"label":"Mosaic_Virus","split":"test","index":166},{"x":11.4333,"y":-8.0642,"label":"Mosaic_Virus","split":"train","index":167},{"x":3.8158,"y":16.5056,"label":"Mosaic_Virus","split":"train","index":168},{"x":14.9317,"y":3.1496,"label":"Mosaic_Virus","split":"train","index":169},{"x":15.2214,"y":-6.4733,"label":"Mosaic_Virus","split":"train","index":170},{"x":16.9966,"y":5.7165,"label":"Mosaic_Virus","split":"train","index":171},{"x":14.41,"y":6.9425,"label":"Mosaic_Virus","split":"train","index":172},{"x":13.8741,"y":-5.044,"label":"Mosaic_Virus","split":"train","index":173},{"x":15.1554,"y":6.3054,"label":"Mosaic_Virus","split":"train","index":174},{"x":3.296,"y":16.4313,"label":"Mosaic_Virus","split":"train","index":175},{"x":15.2853,"y":5.6842,"label":"Mosaic_Virus","split":"train","index":176},{"x":6.7433,"y":-3.9317,"label":"Mosaic_Virus","split":"test","index":177},{"x":17.0782,"y":2.8685,"label":"Mosaic_Virus","split":"train","index":178},{"x":15.1876,"y":6.3885,"label":"Mosaic_Virus","split":"train","index":179},{"x":3.7883,"y":16.4852,"label":"Mosaic_Virus","split":"train","index":180},{"x":14.9551,"y":3.1779,"label":"Mosaic_Virus","split":"train","index":181},{"x":15.4347,"y":5.6878,"label":"Mosaic_Virus","split":"train","index":182},{"x":11.6455,"y":-7.699,"label":"Mosaic_Virus","split":"train","index":183},{"x":14.7437,"y":5.9461,"label":"Mosaic_Virus","split":"train","index":184},{"x":16.7198,"y":-6.1212,"label":"Mosaic_Virus","split":"train","index":185},{"x":16.7391,"y":-3.9872,"label":"Mosaic_Virus","split":"train","index":186},{"x":14.8913,"y":-5.0765,"label":"Mosaic_Virus","split":"train","index":187},{"x":14.1372,"y":-5.0424,"label":"Mosaic_Virus","split":"val","index":188},{"x":14.0333,"y":6.4536,"label":"Mosaic_Virus","split":"train","index":189},{"x":17.3587,"y":2.1119,"label":"Mosaic_Virus","split":"train","index":190},{"x":16.7239,"y":-3.9635,"label":"Mosaic_Virus","split":"train","index":191},{"x":17.1749,"y":-5.0582,"label":"Mosaic_Virus","split":"test","index":192},{"x":14.6266,"y":-5.0745,"label":"Mosaic_Virus","split":"test","index":193},{"x":15.2844,"y":6.4101,"label":"Mosaic_Virus","split":"train","index":194},{"x":15.6872,"y":6.3595,"label":"Mosaic_Virus","split":"train","index":195},{"x":11.6067,"y":-7.6841,"label":"Mosaic_Virus","split":"train","index":196},{"x":14.6941,"y":5.9644,"label":"Mosaic_Virus","split":"test","index":197},{"x":17.3589,"y":2.1277,"label":"Mosaic_Virus","split":"train","index":198},{"x":14.7068,"y":-5.0366,"label":"Mosaic_Virus","split":"val","index":199},{"x":16.895,"y":-6.3138,"label":"Mosaic_Virus","split":"train","index":200},{"x":14.1366,"y":6.42,"label":"Mosaic_Virus","split":"train","index":201},{"x":15.2495,"y":-6.4869,"label":"Mosaic_Virus","split":"test","index":202},{"x":1.6856,"y":13.8402,"label":"Mosaic_Virus","split":"train","index":203},{"x":15.2194,"y":-6.3187,"label":"Mosaic_Virus","split":"train","index":204},{"x":1.6871,"y":13.8417,"label":"Mosaic_Virus","split":"test","index":205},{"x":15.6337,"y":6.2523,"label":"Mosaic_Virus","split":"val","index":206},{"x":15.6447,"y":-4.2079,"label":"Mosaic_Virus","split":"train","index":207},{"x":15.0228,"y":3.2331,"label":"Mosaic_Virus","split":"train","index":208},{"x":13.9485,"y":6.3562,"label":"Mosaic_Virus","split":"train","index":209},{"x":14.2698,"y":6.2862,"label":"Mosaic_Virus","split":"train","index":210},{"x":12.3435,"y":-7.6253,"label":"Mosaic_Virus","split":"val","index":211},{"x":17.0844,"y":2.8765,"label":"Mosaic_Virus","split":"val","index":212},{"x":15.8596,"y":2.8989,"label":"Mosaic_Virus","split":"train","index":213},{"x":2.8169,"y":16.33,"label":"Mosaic_Virus","split":"train","index":214},{"x":17.0612,"y":5.6332,"label":"Mosaic_Virus","split":"test","index":215},{"x":15.1664,"y":6.1611,"label":"Mosaic_Virus","split":"train","index":216},{"x":15.9063,"y":2.8529,"label":"Mosaic_Virus","split":"train","index":217},{"x":3.313,"y":16.3789,"label":"Mosaic_Virus","split":"train","index":218},{"x":14.775,"y":-5.4509,"label":"Mosaic_Virus","split":"test","index":219},{"x":14.1841,"y":6.3537,"label":"Mosaic_Virus","split":"train","index":220},{"x":10.927,"y":-8.101,"label":"Mosaic_Virus","split":"train","index":221},{"x":14.2867,"y":6.8006,"label":"Mosaic_Virus","split":"train","index":222},{"x":14.954,"y":5.859,"label":"Mosaic_Virus","split":"train","index":223},{"x":14.5754,"y":5.9942,"label":"Mosaic_Virus","split":"test","index":224},{"x":13.8403,"y":-5.0049,"label":"Mosaic_Virus","split":"train","index":225},{"x":14.9238,"y":3.1545,"label":"Mosaic_Virus","split":"train","index":226},{"x":3.7937,"y":16.49,"label":"Mosaic_Virus","split":"train","index":227},{"x":14.1581,"y":6.6309,"label":"Mosaic_Virus","split":"test","index":228},{"x":14.9513,"y":3.1794,"label":"Mosaic_Virus","split":"train","index":229},{"x":3.8363,"y":16.4952,"label":"Mosaic_Virus","split":"val","index":230},{"x":17.0817,"y":2.8619,"label":"Mosaic_Virus","split":"train","index":231},{"x":16.4597,"y":6.1571,"label":"Mosaic_Virus","split":"train","index":232},{"x":17.0601,"y":5.6497,"label":"Mosaic_Virus","split":"train","index":233},{"x":14.9287,"y":6.1478,"label":"Mosaic_Virus","split":"test","index":234},{"x":13.808,"y":-5.0438,"label":"Mosaic_Virus","split":"train","index":235},{"x":16.7221,"y":-3.9656,"label":"Mosaic_Virus","split":"train","index":236},{"x":16.7094,"y":-6.0971,"label":"Mosaic_Virus","split":"train","index":237},{"x":14.6712,"y":-4.9179,"label":"Mosaic_Virus","split":"train","index":238},{"x":14.8676,"y":-5.0602,"label":"Mosaic_Virus","split":"val","index":239},{"x":0.8099,"y":13.1423,"label":"Mosaic_Virus","split":"val","index":240},{"x":11.6972,"y":-7.6564,"label":"Mosaic_Virus","split":"train","index":241},{"x":15.4394,"y":5.8201,"label":"Mosaic_Virus","split":"train","index":242},{"x":16.3176,"y":5.9858,"label":"Mosaic_Virus","split":"train","index":243},{"x":15.1225,"y":-6.1205,"label":"Mosaic_Virus","split":"train","index":244},{"x":11.6519,"y":-7.7684,"label":"Mosaic_Virus","split":"val","index":245},{"x":14.9621,"y":5.8144,"label":"Mosaic_Virus","split":"train","index":246},{"x":14.9866,"y":6.0222,"label":"Mosaic_Virus","split":"train","index":247},{"x":16.7121,"y":-3.9664,"label":"Mosaic_Virus","split":"train","index":248},{"x":16.7748,"y":-6.0743,"label":"Mosaic_Virus","split":"train","index":249},{"x":14.163,"y":-5.0947,"label":"Mosaic_Virus","split":"test","index":250},{"x":14.8959,"y":-5.068,"label":"Mosaic_Virus","split":"train","index":251},{"x":3.3881,"y":16.3637,"label":"Mosaic_Virus","split":"train","index":252},{"x":15.2126,"y":-6.3682,"label":"Mosaic_Virus","split":"train","index":253},{"x":11.6034,"y":-7.7663,"label":"Mosaic_Virus","split":"train","index":254},{"x":14.033,"y":6.6473,"label":"Mosaic_Virus","split":"train","index":255},{"x":14.3184,"y":6.1941,"label":"Mosaic_Virus","split":"test","index":256},{"x":16.8959,"y":-6.2954,"label":"Mosaic_Virus","split":"train","index":257},{"x":14.2431,"y":6.3462,"label":"Mosaic_Virus","split":"train","index":258},{"x":1.6813,"y":13.8358,"label":"Mosaic_Virus","split":"train","index":259},{"x":15.2561,"y":-6.4309,"label":"Mosaic_Virus","split":"test","index":260},{"x":16.4139,"y":5.7324,"label":"Mosaic_Virus","split":"train","index":261},{"x":6.8862,"y":-3.7876,"label":"Mosaic_Virus","split":"test","index":262},{"x":13.9941,"y":6.6727,"label":"Mosaic_Virus","split":"train","index":263},{"x":16.1334,"y":5.4946,"label":"Mosaic_Virus","split":"train","index":264},{"x":15.1283,"y":-6.2004,"label":"Mosaic_Virus","split":"train","index":265},{"x":11.6811,"y":-7.6722,"label":"Mosaic_Virus","split":"train","index":266},{"x":0.7874,"y":13.1204,"label":"Mosaic_Virus","split":"test","index":267},{"x":16.9659,"y":-5.3944,"label":"Mosaic_Virus","split":"test","index":268},{"x":6.8735,"y":-3.8004,"label":"Mosaic_Virus","split":"val","index":269},{"x":11.8458,"y":-7.8506,"label":"Mosaic_Virus","split":"train","index":270},{"x":16.4331,"y":5.7097,"label":"Mosaic_Virus","split":"train","index":271},{"x":11.2006,"y":-7.8506,"label":"Mosaic_Virus","split":"train","index":272},{"x":16.3922,"y":5.7412,"label":"Mosaic_Virus","split":"train","index":273},{"x":17.0638,"y":-5.2569,"label":"Mosaic_Virus","split":"train","index":274},{"x":16.0655,"y":-3.994,"label":"Mosaic_Virus","split":"train","index":275},{"x":17.1786,"y":-5.0342,"label":"Mosaic_Virus","split":"val","index":276},{"x":15.5784,"y":-4.2382,"label":"Mosaic_Virus","split":"test","index":277},{"x":16.0005,"y":-4.0157,"label":"Mosaic_Virus","split":"train","index":278},{"x":16.9859,"y":-5.3754,"label":"Mosaic_Virus","split":"test","index":279},{"x":15.5492,"y":-4.289,"label":"Mosaic_Virus","split":"train","index":280},{"x":17.3289,"y":2.1653,"label":"Mosaic_Virus","split":"train","index":281},{"x":16.0579,"y":5.5077,"label":"Mosaic_Virus","split":"train","index":282},{"x":11.5544,"y":-7.9092,"label":"Mosaic_Virus","split":"train","index":283},{"x":16.3248,"y":5.6358,"label":"Mosaic_Virus","split":"train","index":284},{"x":16.0163,"y":-3.9963,"label":"Mosaic_Virus","split":"val","index":285},{"x":10.7341,"y":-8.0353,"label":"Mosaic_Virus","split":"val","index":286},{"x":16.9894,"y":5.3068,"label":"Mosaic_Virus","split":"train","index":287},{"x":14.7625,"y":-5.3482,"label":"Mosaic_Virus","split":"train","index":288},{"x":14.9332,"y":6.2245,"label":"Mosaic_Virus","split":"train","index":289},{"x":11.3606,"y":-8.1191,"label":"Mosaic_Virus","split":"train","index":290},{"x":16.3506,"y":5.8979,"label":"Mosaic_Virus","split":"test","index":291},{"x":13.7736,"y":6.1686,"label":"Mosaic_Virus","split":"test","index":292},{"x":15.7921,"y":5.4076,"label":"Mosaic_Virus","split":"train","index":293},{"x":11.4666,"y":-8.1057,"label":"Mosaic_Virus","split":"train","index":294},{"x":16.2902,"y":5.8625,"label":"Mosaic_Virus","split":"train","index":295},{"x":17.0581,"y":5.6593,"label":"Mosaic_Virus","split":"val","index":296},{"x":6.6264,"y":-4.0484,"label":"Mosaic_Virus","split":"train","index":297},{"x":12.27,"y":-7.6799,"label":"Mosaic_Virus","split":"train","index":298},{"x":16.7103,"y":-6.1123,"label":"Mosaic_Virus","split":"test","index":299},{"x":2.8055,"y":16.3306,"label":"Mosaic_Virus","split":"train","index":300},{"x":15.6827,"y":5.8506,"label":"Mosaic_Virus","split":"train","index":301},{"x":10.8511,"y":-8.0912,"label":"Mosaic_Virus","split":"test","index":302},{"x":6.7017,"y":-3.9728,"label":"Mosaic_Virus","split":"train","index":303},{"x":16.7203,"y":-6.1418,"label":"Mosaic_Virus","split":"train","index":304},{"x":15.5905,"y":5.7521,"label":"Mosaic_Virus","split":"train","index":305},{"x":10.8984,"y":-8.0218,"label":"Mosaic_Virus","split":"train","index":306},{"x":6.681,"y":-3.9942,"label":"Mosaic_Virus","split":"train","index":307},{"x":16.9912,"y":5.4888,"label":"Mosaic_Virus","split":"test","index":308},{"x":14.5774,"y":5.9841,"label":"Mosaic_Virus","split":"train","index":309},{"x":13.7339,"y":6.1413,"label":"Mosaic_Virus","split":"val","index":310},{"x":14.1378,"y":-5.0273,"label":"Mosaic_Virus","split":"train","index":311},{"x":16.9051,"y":-6.3276,"label":"Mosaic_Virus","split":"train","index":312},{"x":14.1797,"y":6.4014,"label":"Mosaic_Virus","split":"train","index":313},{"x":1.6648,"y":13.8204,"label":"Mosaic_Virus","split":"train","index":314},{"x":15.1965,"y":-6.3851,"label":"Mosaic_Virus","split":"test","index":315},{"x":16.3502,"y":5.8196,"label":"Mosaic_Virus","split":"train","index":316},{"x":1.6717,"y":13.8262,"label":"Mosaic_Virus","split":"train","index":317},{"x":15.1789,"y":-6.2076,"label":"Mosaic_Virus","split":"test","index":318},{"x":13.9193,"y":6.5539,"label":"Mosaic_Virus","split":"test","index":319},{"x":14.3429,"y":6.1558,"label":"Mosaic_Virus","split":"train","index":320},{"x":15.1338,"y":-6.147,"label":"Mosaic_Virus","split":"val","index":321},{"x":11.629,"y":-7.683,"label":"Mosaic_Virus","split":"test","index":322},{"x":15.5411,"y":5.6469,"label":"Mosaic_Virus","split":"train","index":323},{"x":14.7468,"y":5.997,"label":"Mosaic_Virus","split":"train","index":324},{"x":16.6993,"y":-3.9933,"label":"Mosaic_Virus","split":"train","index":325},{"x":16.6926,"y":-6.1399,"label":"Mosaic_Virus","split":"train","index":326},{"x":14.4994,"y":-5.1732,"label":"Mosaic_Virus","split":"train","index":327},{"x":14.9148,"y":-5.0818,"label":"Mosaic_Virus","split":"train","index":328},{"x":16.7152,"y":-3.9838,"label":"Mosaic_Virus","split":"val","index":329},{"x":17.3667,"y":2.1348,"label":"Mosaic_Virus","split":"val","index":330},{"x":14.5994,"y":-5.2786,"label":"Mosaic_Virus","split":"train","index":331},{"x":14.8894,"y":-5.0743,"label":"Mosaic_Virus","split":"val","index":332},{"x":1.6939,"y":13.8482,"label":"Mosaic_Virus","split":"train","index":333},{"x":11.7378,"y":-7.6145,"label":"Mosaic_Virus","split":"train","index":334},{"x":15.425,"y":5.6738,"label":"Mosaic_Virus","split":"train","index":335},{"x":15.8236,"y":6.3864,"label":"Mosaic_Virus","split":"train","index":336},{"x":14.9247,"y":3.1406,"label":"Mosaic_Virus","split":"train","index":337},{"x":3.7963,"y":16.4934,"label":"Mosaic_Virus","split":"val","index":338},{"x":17.0917,"y":2.8633,"label":"Mosaic_Virus","split":"train","index":339},{"x":15.1799,"y":6.4019,"label":"Mosaic_Virus","split":"train","index":340},{"x":16.9989,"y":5.6341,"label":"Mosaic_Virus","split":"val","index":341},{"x":15.0663,"y":6.2183,"label":"Mosaic_Virus","split":"test","index":342},{"x":13.8423,"y":-5.0326,"label":"Mosaic_Virus","split":"test","index":343},{"x":6.6584,"y":-4.0165,"label":"Mosaic_Virus","split":"test","index":344},{"x":15.3011,"y":5.6752,"label":"Mosaic_Virus","split":"test","index":345},{"x":14.5797,"y":6.0159,"label":"Mosaic_Virus","split":"train","index":346},{"x":13.9051,"y":-5.0345,"label":"Mosaic_Virus","split":"val","index":347},{"x":14.9996,"y":3.192,"label":"Mosaic_Virus","split":"train","index":348},{"x":3.8094,"y":16.4985,"label":"Mosaic_Virus","split":"train","index":349},{"x":14.1623,"y":6.5302,"label":"Mosaic_Virus","split":"train","index":350},{"x":15.9068,"y":2.8501,"label":"Mosaic_Virus","split":"train","index":351},{"x":3.2754,"y":16.3708,"label":"Mosaic_Virus","split":"train","index":352},{"x":14.8123,"y":-5.5507,"label":"Mosaic_Virus","split":"train","index":353},{"x":14.2115,"y":6.4411,"label":"Mosaic_Virus","split":"test","index":354},{"x":10.8121,"y":-8.0709,"label":"Mosaic_Virus","split":"val","index":355},{"x":12.2811,"y":-7.6638,"label":"Mosaic_Virus","split":"train","index":356},{"x":14.3787,"y":6.8525,"label":"Mosaic_Virus","split":"train","index":357},{"x":17.1053,"y":2.8859,"label":"Mosaic_Virus","split":"train","index":358},{"x":15.9011,"y":2.87,"label":"Mosaic_Virus","split":"test","index":359},{"x":3.3938,"y":16.3737,"label":"Mosaic_Virus","split":"test","index":360},{"x":16.9541,"y":5.6448,"label":"Mosaic_Virus","split":"train","index":361},{"x":14.9823,"y":6.165,"label":"Mosaic_Virus","split":"val","index":362},{"x":15.6251,"y":5.8863,"label":"Mosaic_Virus","split":"test","index":363},{"x":10.8188,"y":-8.1063,"label":"Mosaic_Virus","split":"train","index":364},{"x":6.668,"y":-4.0072,"label":"Mosaic_Virus","split":"val","index":365},{"x":16.9901,"y":5.3217,"label":"Mosaic_Virus","split":"train","index":366},{"x":14.5951,"y":5.9867,"label":"Mosaic_Virus","split":"train","index":367},{"x":13.7465,"y":6.1691,"label":"Mosaic_Virus","split":"train","index":368},{"x":14.1073,"y":-4.9801,"label":"Mosaic_Virus","split":"train","index":369},{"x":2.7868,"y":16.3634,"label":"Mosaic_Virus","split":"val","index":370},{"x":15.6493,"y":5.7641,"label":"Mosaic_Virus","split":"train","index":371},{"x":10.831,"y":-8.1061,"label":"Mosaic_Virus","split":"train","index":372},{"x":6.7028,"y":-3.9724,"label":"Mosaic_Virus","split":"val","index":373},{"x":16.7293,"y":-6.1431,"label":"Mosaic_Virus","split":"train","index":374},{"x":15.9416,"y":5.478,"label":"Mosaic_Virus","split":"train","index":375},{"x":11.3933,"y":-8.1726,"label":"Mosaic_Virus","split":"train","index":376},{"x":16.4417,"y":5.7606,"label":"Mosaic_Virus","split":"val","index":377},{"x":17.0119,"y":5.6486,"label":"Mosaic_Virus","split":"val","index":378},{"x":6.6255,"y":-4.0495,"label":"Mosaic_Virus","split":"val","index":379},{"x":12.1509,"y":-7.6942,"label":"Mosaic_Virus","split":"train","index":380},{"x":16.7005,"y":-6.1315,"label":"Mosaic_Virus","split":"test","index":381},{"x":10.7457,"y":-8.109,"label":"Mosaic_Virus","split":"test","index":382},{"x":16.9659,"y":5.3706,"label":"Mosaic_Virus","split":"train","index":383},{"x":14.7766,"y":-5.4675,"label":"Mosaic_Virus","split":"train","index":384},{"x":14.5411,"y":6.0376,"label":"Mosaic_Virus","split":"train","index":385},{"x":11.3815,"y":-8.1747,"label":"Mosaic_Virus","split":"train","index":386},{"x":16.5479,"y":6.111,"label":"Mosaic_Virus","split":"train","index":387},{"x":13.7664,"y":6.1839,"label":"Mosaic_Virus","split":"train","index":388},{"x":14.2611,"y":-5.1716,"label":"Mosaic_Virus","split":"train","index":389},{"x":17.184,"y":-5.1107,"label":"Mosaic_Virus","split":"val","index":390},{"x":15.5755,"y":-4.2646,"label":"Mosaic_Virus","split":"train","index":391},{"x":17.3156,"y":2.2002,"label":"Mosaic_Virus","split":"train","index":392},{"x":16.0438,"y":5.4845,"label":"Mosaic_Virus","split":"train","index":393},{"x":11.4902,"y":-7.9035,"label":"Mosaic_Virus","split":"train","index":394},{"x":16.4706,"y":5.651,"label":"Mosaic_Virus","split":"train","index":395},{"x":16.1188,"y":-3.9042,"label":"Mosaic_Virus","split":"train","index":396},{"x":16.276,"y":5.523,"label":"Mosaic_Virus","split":"test","index":397},{"x":11.1743,"y":-7.8322,"label":"Mosaic_Virus","split":"val","index":398},{"x":16.2043,"y":5.8556,"label":"Mosaic_Virus","split":"train","index":399},{"x":17.0417,"y":-5.2932,"label":"Mosaic_Virus","split":"train","index":400},{"x":16.0342,"y":-3.9699,"label":"Mosaic_Virus","split":"val","index":401},{"x":17.1702,"y":-5.0762,"label":"Mosaic_Virus","split":"val","index":402},{"x":15.5863,"y":-4.2583,"label":"Mosaic_Virus","split":"train","index":403},{"x":17.3565,"y":2.1373,"label":"Mosaic_Virus","split":"train","index":404},{"x":11.1804,"y":-7.7905,"label":"Mosaic_Virus","split":"train","index":405},{"x":0.7904,"y":13.1228,"label":"Mosaic_Virus","split":"test","index":406},{"x":16.9603,"y":-5.4414,"label":"Mosaic_Virus","split":"train","index":407},{"x":6.8094,"y":-3.8653,"label":"Mosaic_Virus","split":"train","index":408},{"x":11.863,"y":-7.8555,"label":"Mosaic_Virus","split":"test","index":409},{"x":6.8718,"y":-3.8026,"label":"Mosaic_Virus","split":"train","index":410},{"x":11.9108,"y":-7.858,"label":"Mosaic_Virus","split":"train","index":411},{"x":16.2329,"y":5.5871,"label":"Mosaic_Virus","split":"train","index":412},{"x":15.9758,"y":-4.0429,"label":"Mosaic_Virus","split":"test","index":413},{"x":15.1189,"y":-6.1446,"label":"Mosaic_Virus","split":"val","index":414},{"x":-8.0173,"y":3.3703,"label":"Anthracnose","split":"train","index":415},{"x":-8.0296,"y":2.7481,"label":"Anthracnose","split":"train","index":416},{"x":-8.3702,"y":-0.56,"label":"Anthracnose","split":"train","index":417},{"x":-8.0066,"y":3.4783,"label":"Anthracnose","split":"train","index":418},{"x":-7.3762,"y":-0.221,"label":"Anthracnose","split":"train","index":419},{"x":-8.4537,"y":2.8803,"label":"Anthracnose","split":"train","index":420},{"x":-7.3412,"y":-0.2819,"label":"Anthracnose","split":"test","index":421},{"x":-7.1322,"y":0.972,"label":"Anthracnose","split":"train","index":422},{"x":-8.1446,"y":2.9735,"label":"Anthracnose","split":"train","index":423},{"x":-7.8087,"y":1.2749,"label":"Anthracnose","split":"test","index":424},{"x":-8.2143,"y":0.2574,"label":"Anthracnose","split":"train","index":425},{"x":-7.9016,"y":1.438,"label":"Anthracnose","split":"train","index":426},{"x":-8.3886,"y":-0.6034,"label":"Anthracnose","split":"train","index":427},{"x":-8.3919,"y":4.1933,"label":"Anthracnose","split":"train","index":428},{"x":-7.8778,"y":1.3509,"label":"Anthracnose","split":"val","index":429},{"x":-7.9135,"y":1.7109,"label":"Anthracnose","split":"val","index":430},{"x":-8.1882,"y":0.2615,"label":"Anthracnose","split":"val","index":431},{"x":-8.2341,"y":4.7084,"label":"Anthracnose","split":"train","index":432},{"x":-8.3982,"y":4.167,"label":"Anthracnose","split":"train","index":433},{"x":-8.1275,"y":3.3102,"label":"Anthracnose","split":"val","index":434},{"x":-9.1984,"y":2.0524,"label":"Anthracnose","split":"train","index":435},{"x":-9.1176,"y":0.1429,"label":"Anthracnose","split":"train","index":436},{"x":-9.2731,"y":2.1163,"label":"Anthracnose","split":"test","index":437},{"x":-9.136,"y":0.1555,"label":"Anthracnose","split":"val","index":438},{"x":-8.8557,"y":0.0074,"label":"Anthracnose","split":"train","index":439},{"x":-9.0519,"y":3.9375,"label":"Anthracnose","split":"train","index":440},{"x":-8.1993,"y":0.4081,"label":"Anthracnose","split":"train","index":441},{"x":-8.262,"y":3.2171,"label":"Anthracnose","split":"train","index":442},{"x":-9.0755,"y":0.1234,"label":"Anthracnose","split":"train","index":443},{"x":-7.7823,"y":2.381,"label":"Anthracnose","split":"train","index":444},{"x":-7.3846,"y":-0.2683,"label":"Anthracnose","split":"test","index":445},{"x":-8.0082,"y":2.7027,"label":"Anthracnose","split":"val","index":446},{"x":-7.8172,"y":2.4025,"label":"Anthracnose","split":"val","index":447},{"x":-8.133,"y":2.8535,"label":"Anthracnose","split":"train","index":448},{"x":-8.0388,"y":3.4478,"label":"Anthracnose","split":"val","index":449},{"x":-8.0301,"y":3.4793,"label":"Anthracnose","split":"val","index":450},{"x":-7.9066,"y":2.6232,"label":"Anthracnose","split":"val","index":451},{"x":-8.186,"y":0.2804,"label":"Anthracnose","split":"train","index":452},{"x":-8.2095,"y":4.7406,"label":"Anthracnose","split":"train","index":453},{"x":-8.2586,"y":3.6164,"label":"Anthracnose","split":"train","index":454},{"x":-8.3786,"y":-0.5489,"label":"Anthracnose","split":"train","index":455},{"x":-8.42,"y":4.1242,"label":"Anthracnose","split":"val","index":456},{"x":-7.8953,"y":1.4084,"label":"Anthracnose","split":"train","index":457},{"x":-8.3009,"y":3.0684,"label":"Anthracnose","split":"test","index":458},{"x":-7.8635,"y":1.4355,"label":"Anthracnose","split":"test","index":459},{"x":-7.7561,"y":1.233,"label":"Anthracnose","split":"train","index":460},{"x":-8.2238,"y":0.2853,"label":"Anthracnose","split":"train","index":461},{"x":-7.3505,"y":-0.2685,"label":"Anthracnose","split":"val","index":462},{"x":-7.125,"y":0.9826,"label":"Anthracnose","split":"test","index":463},{"x":-8.1483,"y":2.7686,"label":"Anthracnose","split":"val","index":464},{"x":-7.36,"y":-0.1919,"label":"Anthracnose","split":"train","index":465},{"x":-7.1969,"y":1.0173,"label":"Anthracnose","split":"train","index":466},{"x":-8.2087,"y":-0.1808,"label":"Anthracnose","split":"train","index":467},{"x":-7.9754,"y":3.4105,"label":"Anthracnose","split":"train","index":468},{"x":-7.9667,"y":3.3754,"label":"Anthracnose","split":"train","index":469},{"x":-8.1724,"y":2.9778,"label":"Anthracnose","split":"train","index":470},{"x":-8.167,"y":3.377,"label":"Anthracnose","split":"train","index":471},{"x":-7.9592,"y":2.6421,"label":"Anthracnose","split":"test","index":472},{"x":-8.1841,"y":2.8249,"label":"Anthracnose","split":"test","index":473},{"x":-8.0904,"y":3.4527,"label":"Anthracnose","split":"train","index":474},{"x":-7.7675,"y":2.3759,"label":"Anthracnose","split":"test","index":475},{"x":-9.0128,"y":3.8762,"label":"Anthracnose","split":"test","index":476},{"x":-7.7037,"y":2.3172,"label":"Anthracnose","split":"test","index":477},{"x":-7.3272,"y":-0.3036,"label":"Anthracnose","split":"train","index":478},{"x":-8.1689,"y":3.2984,"label":"Anthracnose","split":"val","index":479},{"x":-9.1288,"y":0.157,"label":"Anthracnose","split":"train","index":480},{"x":-8.1854,"y":0.4299,"label":"Anthracnose","split":"train","index":481},{"x":-9.2371,"y":2.1184,"label":"Anthracnose","split":"train","index":482},{"x":-9.1626,"y":0.179,"label":"Anthracnose","split":"train","index":483},{"x":-8.8704,"y":0.0197,"label":"Anthracnose","split":"train","index":484},{"x":-7.9547,"y":2.5949,"label":"Anthracnose","split":"train","index":485},{"x":-9.2495,"y":2.1025,"label":"Anthracnose","split":"train","index":486},{"x":-9.1344,"y":0.1566,"label":"Anthracnose","split":"train","index":487},{"x":-7.9657,"y":2.6313,"label":"Anthracnose","split":"train","index":488},{"x":-8.0979,"y":3.4887,"label":"Anthracnose","split":"train","index":489},{"x":-9.0487,"y":3.931,"label":"Anthracnose","split":"train","index":490},{"x":-8.1507,"y":3.3999,"label":"Anthracnose","split":"train","index":491},{"x":-7.1521,"y":0.9844,"label":"Anthracnose","split":"test","index":492},{"x":-7.866,"y":2.5442,"label":"Anthracnose","split":"train","index":493},{"x":-7.275,"y":0.906,"label":"Anthracnose","split":"train","index":494},{"x":-7.3829,"y":-0.2986,"label":"Anthracnose","split":"train","index":495},{"x":-8.0804,"y":3.3927,"label":"Anthracnose","split":"train","index":496},{"x":-7.7085,"y":2.2949,"label":"Anthracnose","split":"train","index":497},{"x":-8.9397,"y":3.8421,"label":"Anthracnose","split":"test","index":498},{"x":-9.262,"y":2.0991,"label":"Anthracnose","split":"test","index":499},{"x":-8.1973,"y":4.752,"label":"Anthracnose","split":"train","index":500},{"x":-9.0103,"y":3.9026,"label":"Anthracnose","split":"train","index":501},{"x":-9.0203,"y":0.0881,"label":"Anthracnose","split":"train","index":502},{"x":-9.063,"y":3.943,"label":"Anthracnose","split":"train","index":503},{"x":-9.0692,"y":0.1206,"label":"Anthracnose","split":"train","index":504},{"x":-9.275,"y":2.0668,"label":"Anthracnose","split":"train","index":505},{"x":-8.9464,"y":0.0357,"label":"Anthracnose","split":"train","index":506},{"x":-9.2732,"y":2.1266,"label":"Anthracnose","split":"train","index":507},{"x":-8.2079,"y":4.7451,"label":"Anthracnose","split":"train","index":508},{"x":-8.427,"y":-0.5809,"label":"Anthracnose","split":"train","index":509},{"x":-8.3656,"y":3.5587,"label":"Anthracnose","split":"train","index":510},{"x":-7.5778,"y":1.1409,"label":"Anthracnose","split":"train","index":511},{"x":-7.5296,"y":1.1278,"label":"Anthracnose","split":"val","index":512},{"x":-8.2254,"y":4.7228,"label":"Anthracnose","split":"train","index":513},{"x":-8.3047,"y":3.7438,"label":"Anthracnose","split":"train","index":514},{"x":-7.7402,"y":1.2096,"label":"Anthracnose","split":"train","index":515},{"x":-8.3724,"y":-0.5681,"label":"Anthracnose","split":"train","index":516},{"x":-8.3813,"y":4.2463,"label":"Anthracnose","split":"val","index":517},{"x":-7.8729,"y":1.3096,"label":"Anthracnose","split":"train","index":518},{"x":-7.3913,"y":-0.2126,"label":"Anthracnose","split":"train","index":519},{"x":-7.1949,"y":1.0251,"label":"Anthracnose","split":"train","index":520},{"x":-7.7214,"y":2.3073,"label":"Anthracnose","split":"train","index":521},{"x":-9.2354,"y":2.1232,"label":"Anthracnose","split":"train","index":522},{"x":-7.0961,"y":0.9382,"label":"Anthracnose","split":"train","index":523},{"x":-7.7959,"y":1.2788,"label":"Anthracnose","split":"test","index":524},{"x":-8.107,"y":3.33,"label":"Anthracnose","split":"test","index":525},{"x":-8.3441,"y":-0.5083,"label":"Anthracnose","split":"train","index":526},{"x":-8.3468,"y":-0.6399,"label":"Anthracnose","split":"train","index":527},{"x":-7.409,"y":-0.2145,"label":"Anthracnose","split":"val","index":528},{"x":-7.7955,"y":2.4305,"label":"Anthracnose","split":"train","index":529},{"x":-9.2381,"y":2.1237,"label":"Anthracnose","split":"train","index":530},{"x":-8.2062,"y":4.7485,"label":"Anthracnose","split":"train","index":531},{"x":-9.2395,"y":2.0606,"label":"Anthracnose","split":"train","index":532},{"x":-8.8823,"y":0.0264,"label":"Anthracnose","split":"val","index":533},{"x":-9.04,"y":3.9186,"label":"Anthracnose","split":"test","index":534},{"x":-8.9902,"y":0.0777,"label":"Anthracnose","split":"train","index":535},{"x":-9.2921,"y":2.1015,"label":"Anthracnose","split":"train","index":536},{"x":-8.175,"y":4.7025,"label":"Anthracnose","split":"train","index":537},{"x":-9.0689,"y":3.955,"label":"Anthracnose","split":"train","index":538},{"x":-8.2289,"y":0.3564,"label":"Anthracnose","split":"train","index":539},{"x":-8.0538,"y":3.3613,"label":"Anthracnose","split":"train","index":540},{"x":-7.7272,"y":2.2833,"label":"Anthracnose","split":"train","index":541},{"x":-9.0685,"y":3.9645,"label":"Anthracnose","split":"train","index":542},{"x":-7.172,"y":0.9572,"label":"Anthracnose","split":"train","index":543},{"x":-8.1598,"y":0.3584,"label":"Anthracnose","split":"test","index":544},{"x":-7.2214,"y":1.0091,"label":"Anthracnose","split":"train","index":545},{"x":-7.854,"y":2.5202,"label":"Anthracnose","split":"train","index":546},{"x":-8.1479,"y":2.8356,"label":"Anthracnose","split":"val","index":547},{"x":-8.1012,"y":3.4733,"label":"Anthracnose","split":"train","index":548},{"x":-9.0863,"y":3.9737,"label":"Anthracnose","split":"train","index":549},{"x":-8.3063,"y":-0.5363,"label":"Anthracnose","split":"train","index":550},{"x":-7.436,"y":-0.1853,"label":"Anthracnose","split":"test","index":551},{"x":-7.9884,"y":3.3497,"label":"Anthracnose","split":"train","index":552},{"x":-7.7386,"y":1.2042,"label":"Anthracnose","split":"train","index":553},{"x":-8.2187,"y":3.1692,"label":"Anthracnose","split":"test","index":554},{"x":-8.3426,"y":-0.5172,"label":"Anthracnose","split":"test","index":555},{"x":-7.3426,"y":-0.2787,"label":"Anthracnose","split":"val","index":556},{"x":-7.0885,"y":0.9407,"label":"Anthracnose","split":"val","index":557},{"x":-7.3898,"y":-0.2161,"label":"Anthracnose","split":"val","index":558},{"x":-7.1468,"y":0.9858,"label":"Anthracnose","split":"train","index":559},{"x":-7.7599,"y":2.3582,"label":"Anthracnose","split":"train","index":560},{"x":-8.3673,"y":-0.5947,"label":"Anthracnose","split":"train","index":561},{"x":-8.8847,"y":3.7309,"label":"Anthracnose","split":"train","index":562},{"x":-7.6936,"y":1.1897,"label":"Anthracnose","split":"train","index":563},{"x":-7.7534,"y":1.2347,"label":"Anthracnose","split":"train","index":564},{"x":-7.63,"y":1.1575,"label":"Anthracnose","split":"val","index":565},{"x":-8.196,"y":4.7419,"label":"Anthracnose","split":"train","index":566},{"x":-8.3838,"y":-0.5833,"label":"Anthracnose","split":"test","index":567},{"x":-8.2662,"y":3.5756,"label":"Anthracnose","split":"train","index":568},{"x":-7.9274,"y":1.5488,"label":"Anthracnose","split":"train","index":569},{"x":1.7461,"y":0.3315,"label":"Downy_Mildew","split":"train","index":570},{"x":2.2214,"y":1.2394,"label":"Downy_Mildew","split":"train","index":571},{"x":0.1064,"y":0.8628,"label":"Downy_Mildew","split":"train","index":572},{"x":7.273,"y":2.9862,"label":"Downy_Mildew","split":"train","index":573},{"x":2.3085,"y":2.1942,"label":"Downy_Mildew","split":"test","index":574},{"x":7.2422,"y":1.919,"label":"Downy_Mildew","split":"train","index":575},{"x":2.3634,"y":2.1949,"label":"Downy_Mildew","split":"train","index":576},{"x":1.1673,"y":1.0529,"label":"Downy_Mildew","split":"test","index":577},{"x":2.1919,"y":0.8892,"label":"Downy_Mildew","split":"train","index":578},{"x":10.8059,"y":-0.6044,"label":"Downy_Mildew","split":"val","index":579},{"x":-0.3737,"y":0.0501,"label":"Downy_Mildew","split":"train","index":580},{"x":7.0964,"y":2.697,"label":"Downy_Mildew","split":"test","index":581},{"x":1.24,"y":0.6545,"label":"Downy_Mildew","split":"test","index":582},{"x":2.2771,"y":0.2795,"label":"Downy_Mildew","split":"val","index":583},{"x":1.0382,"y":0.8131,"label":"Downy_Mildew","split":"train","index":584},{"x":10.8096,"y":-0.596,"label":"Downy_Mildew","split":"train","index":585},{"x":1.5828,"y":1.1982,"label":"Downy_Mildew","split":"train","index":586},{"x":1.4848,"y":1.8698,"label":"Downy_Mildew","split":"train","index":587},{"x":10.7044,"y":-0.8598,"label":"Downy_Mildew","split":"val","index":588},{"x":0.2231,"y":0.7572,"label":"Downy_Mildew","split":"train","index":589},{"x":-0.3903,"y":0.042,"label":"Downy_Mildew","split":"train","index":590},{"x":1.5109,"y":0.7341,"label":"Downy_Mildew","split":"train","index":591},{"x":1.6634,"y":0.9132,"label":"Downy_Mildew","split":"test","index":592},{"x":13.313,"y":1.4173,"label":"Downy_Mildew","split":"val","index":593},{"x":0.9752,"y":0.3188,"label":"Downy_Mildew","split":"train","index":594},{"x":-0.763,"y":0.1137,"label":"Downy_Mildew","split":"val","index":595},{"x":0.9885,"y":0.573,"label":"Downy_Mildew","split":"train","index":596},{"x":10.5191,"y":-0.3362,"label":"Downy_Mildew","split":"test","index":597},{"x":1.7643,"y":1.4639,"label":"Downy_Mildew","split":"train","index":598},{"x":10.2282,"y":-1.023,"label":"Downy_Mildew","split":"train","index":599},{"x":1.6725,"y":2.1481,"label":"Downy_Mildew","split":"train","index":600},{"x":7.2248,"y":3.0386,"label":"Downy_Mildew","split":"train","index":601},{"x":0.8072,"y":1.5812,"label":"Downy_Mildew","split":"test","index":602},{"x":1.7911,"y":2.1597,"label":"Downy_Mildew","split":"train","index":603},{"x":10.1896,"y":-1.0807,"label":"Downy_Mildew","split":"train","index":604},{"x":3.1014,"y":0.3654,"label":"Downy_Mildew","split":"train","index":605},{"x":1.1312,"y":-0.137,"label":"Downy_Mildew","split":"train","index":606},{"x":-0.7282,"y":0.1324,"label":"Downy_Mildew","split":"val","index":607},{"x":10.6439,"y":-0.4625,"label":"Downy_Mildew","split":"train","index":608},{"x":0.9511,"y":0.6505,"label":"Downy_Mildew","split":"train","index":609},{"x":0.6975,"y":1.4119,"label":"Downy_Mildew","split":"train","index":610},{"x":10.2508,"y":-0.9145,"label":"Downy_Mildew","split":"train","index":611},{"x":3.1296,"y":0.3649,"label":"Downy_Mildew","split":"train","index":612},{"x":7.0866,"y":2.7669,"label":"Downy_Mildew","split":"test","index":613},{"x":-0.2641,"y":0.771,"label":"Downy_Mildew","split":"train","index":614},{"x":-0.2363,"y":0.7915,"label":"Downy_Mildew","split":"train","index":615},{"x":1.8012,"y":2.2029,"label":"Downy_Mildew","split":"train","index":616},{"x":1.3386,"y":-0.4756,"label":"Downy_Mildew","split":"train","index":617},{"x":7.2748,"y":2.9883,"label":"Downy_Mildew","split":"train","index":618},{"x":1.3315,"y":1.9931,"label":"Downy_Mildew","split":"train","index":619},{"x":7.0239,"y":2.7193,"label":"Downy_Mildew","split":"train","index":620},{"x":3.1514,"y":0.3563,"label":"Downy_Mildew","split":"train","index":621},{"x":2.5213,"y":0.5697,"label":"Downy_Mildew","split":"train","index":622},{"x":10.2354,"y":-1.0092,"label":"Downy_Mildew","split":"train","index":623},{"x":2.5776,"y":0.3672,"label":"Downy_Mildew","split":"val","index":624},{"x":7.0761,"y":2.166,"label":"Downy_Mildew","split":"train","index":625},{"x":2.1141,"y":0.9329,"label":"Downy_Mildew","split":"train","index":626},{"x":14.5664,"y":2.9104,"label":"Downy_Mildew","split":"train","index":627},{"x":2.061,"y":0.1363,"label":"Downy_Mildew","split":"train","index":628},{"x":2.6341,"y":0.4101,"label":"Downy_Mildew","split":"val","index":629},{"x":-1.9754,"y":0.4955,"label":"Downy_Mildew","split":"train","index":630},{"x":7.0822,"y":2.1211,"label":"Downy_Mildew","split":"train","index":631},{"x":2.0622,"y":1.5354,"label":"Downy_Mildew","split":"train","index":632},{"x":1.7221,"y":-0.3727,"label":"Downy_Mildew","split":"val","index":633},{"x":0.2887,"y":1.2333,"label":"Downy_Mildew","split":"train","index":634},{"x":2.2058,"y":-2.1035,"label":"Downy_Mildew","split":"train","index":635},{"x":1.7596,"y":-0.3537,"label":"Downy_Mildew","split":"test","index":636},{"x":0.3379,"y":1.2092,"label":"Downy_Mildew","split":"test","index":637},{"x":2.2296,"y":-2.1158,"label":"Downy_Mildew","split":"train","index":638},{"x":7.0503,"y":2.8214,"label":"Downy_Mildew","split":"train","index":639},{"x":13.2962,"y":1.4026,"label":"Downy_Mildew","split":"test","index":640},{"x":2.4737,"y":0.6434,"label":"Downy_Mildew","split":"train","index":641},{"x":1.556,"y":0.8845,"label":"Downy_Mildew","split":"train","index":642},{"x":-0.6008,"y":0.3291,"label":"Downy_Mildew","split":"train","index":643},{"x":10.9009,"y":-1.1303,"label":"Downy_Mildew","split":"train","index":644},{"x":2.566,"y":1.4099,"label":"Downy_Mildew","split":"test","index":645},{"x":1.2444,"y":2.2638,"label":"Downy_Mildew","split":"test","index":646},{"x":14.6298,"y":2.9602,"label":"Downy_Mildew","split":"train","index":647},{"x":0.2821,"y":1.3345,"label":"Downy_Mildew","split":"val","index":648},{"x":14.635,"y":2.9704,"label":"Downy_Mildew","split":"train","index":649},{"x":1.2375,"y":2.2773,"label":"Downy_Mildew","split":"train","index":650},{"x":2.1411,"y":1.8003,"label":"Downy_Mildew","split":"train","index":651},{"x":0.308,"y":0.8657,"label":"Downy_Mildew","split":"train","index":652},{"x":0.0945,"y":0.8036,"label":"Downy_Mildew","split":"train","index":653},{"x":10.7462,"y":-0.6066,"label":"Downy_Mildew","split":"train","index":654},{"x":1.7898,"y":0.3579,"label":"Downy_Mildew","split":"val","index":655},{"x":2.5676,"y":1.1062,"label":"Downy_Mildew","split":"train","index":656},{"x":14.351,"y":1.1908,"label":"Downy_Mildew","split":"train","index":657},{"x":10.725,"y":-0.7323,"label":"Downy_Mildew","split":"test","index":658},{"x":1.8183,"y":-0.113,"label":"Downy_Mildew","split":"test","index":659},{"x":-0.6433,"y":0.1702,"label":"Downy_Mildew","split":"train","index":660},{"x":1.3034,"y":1.9918,"label":"Downy_Mildew","split":"train","index":661},{"x":2.5931,"y":1.1855,"label":"Downy_Mildew","split":"val","index":662},{"x":14.3527,"y":1.1749,"label":"Downy_Mildew","split":"test","index":663},{"x":-0.1553,"y":0.8437,"label":"Downy_Mildew","split":"test","index":664},{"x":1.2473,"y":2.24,"label":"Downy_Mildew","split":"val","index":665},{"x":1.3967,"y":-0.5153,"label":"Downy_Mildew","split":"train","index":666},{"x":7.2734,"y":2.9842,"label":"Downy_Mildew","split":"train","index":667},{"x":0.6905,"y":1.54,"label":"Downy_Mildew","split":"train","index":668},{"x":10.2548,"y":-0.9306,"label":"Downy_Mildew","split":"train","index":669},{"x":3.1145,"y":0.3635,"label":"Downy_Mildew","split":"train","index":670},{"x":7.1248,"y":2.8263,"label":"Downy_Mildew","split":"train","index":671},{"x":-0.1984,"y":0.8344,"label":"Downy_Mildew","split":"train","index":672},{"x":1.0442,"y":1.6769,"label":"Downy_Mildew","split":"train","index":673},{"x":2.3092,"y":0.3456,"label":"Downy_Mildew","split":"train","index":674},{"x":10.19,"y":-1.0526,"label":"Downy_Mildew","split":"train","index":675},{"x":3.0749,"y":0.4126,"label":"Downy_Mildew","split":"train","index":676},{"x":1.1065,"y":-0.1519,"label":"Downy_Mildew","split":"train","index":677},{"x":-0.7517,"y":0.0911,"label":"Downy_Mildew","split":"train","index":678},{"x":10.8166,"y":-0.5643,"label":"Downy_Mildew","split":"test","index":679},{"x":0.6991,"y":1.0312,"label":"Downy_Mildew","split":"train","index":680},{"x":1.055,"y":-0.102,"label":"Downy_Mildew","split":"train","index":681},{"x":-0.756,"y":0.133,"label":"Downy_Mildew","split":"val","index":682},{"x":0.762,"y":1.0442,"label":"Downy_Mildew","split":"test","index":683},{"x":10.513,"y":-0.334,"label":"Downy_Mildew","split":"train","index":684},{"x":1.6664,"y":0.9515,"label":"Downy_Mildew","split":"train","index":685},{"x":10.1829,"y":-1.071,"label":"Downy_Mildew","split":"train","index":686},{"x":1.7438,"y":2.2153,"label":"Downy_Mildew","split":"train","index":687},{"x":7.3158,"y":3.0171,"label":"Downy_Mildew","split":"train","index":688},{"x":1.9754,"y":1.6977,"label":"Downy_Mildew","split":"train","index":689},{"x":10.7032,"y":-0.7924,"label":"Downy_Mildew","split":"train","index":690},{"x":0.1772,"y":0.8794,"label":"Downy_Mildew","split":"train","index":691},{"x":-0.3116,"y":0.0061,"label":"Downy_Mildew","split":"val","index":692},{"x":1.4544,"y":0.382,"label":"Downy_Mildew","split":"train","index":693},{"x":1.4041,"y":0.6398,"label":"Downy_Mildew","split":"train","index":694},{"x":7.0953,"y":2.7512,"label":"Downy_Mildew","split":"train","index":695},{"x":-0.2294,"y":0.0533,"label":"Downy_Mildew","split":"train","index":696},{"x":7.1679,"y":2.8103,"label":"Downy_Mildew","split":"train","index":697},{"x":1.3873,"y":0.6591,"label":"Downy_Mildew","split":"train","index":698},{"x":1.1888,"y":0.5576,"label":"Downy_Mildew","split":"train","index":699},{"x":1.3722,"y":0.3852,"label":"Downy_Mildew","split":"train","index":700},{"x":10.8065,"y":-0.6437,"label":"Downy_Mildew","split":"train","index":701},{"x":1.6327,"y":1.3041,"label":"Downy_Mildew","split":"train","index":702},{"x":7.1841,"y":2.0022,"label":"Downy_Mildew","split":"train","index":703},{"x":2.232,"y":2.1419,"label":"Downy_Mildew","split":"val","index":704},{"x":0.9929,"y":0.9996,"label":"Downy_Mildew","split":"train","index":705},{"x":1.7544,"y":0.8471,"label":"Downy_Mildew","split":"test","index":706},{"x":10.7854,"y":-0.6443,"label":"Downy_Mildew","split":"val","index":707},{"x":1.723,"y":0.49,"label":"Downy_Mildew","split":"train","index":708},{"x":2.1341,"y":1.4893,"label":"Downy_Mildew","split":"train","index":709},{"x":0.1319,"y":0.8158,"label":"Downy_Mildew","split":"train","index":710},{"x":7.2557,"y":2.9532,"label":"Downy_Mildew","split":"train","index":711},{"x":2.2147,"y":2.0791,"label":"Downy_Mildew","split":"train","index":712},{"x":-0.6649,"y":0.1727,"label":"Downy_Mildew","split":"val","index":713},{"x":1.3054,"y":1.9753,"label":"Downy_Mildew","split":"train","index":714},{"x":2.5287,"y":1.0748,"label":"Downy_Mildew","split":"train","index":715},{"x":14.3651,"y":1.1736,"label":"Downy_Mildew","split":"train","index":716},{"x":2.5494,"y":1.0324,"label":"Downy_Mildew","split":"train","index":717},{"x":14.3718,"y":1.1775,"label":"Downy_Mildew","split":"test","index":718},{"x":10.6866,"y":-0.779,"label":"Downy_Mildew","split":"test","index":719},{"x":1.9521,"y":0.6865,"label":"Downy_Mildew","split":"train","index":720},{"x":1.6908,"y":1.3917,"label":"Downy_Mildew","split":"train","index":721},{"x":14.674,"y":2.9995,"label":"Downy_Mildew","split":"train","index":722},{"x":2.5215,"y":1.447,"label":"Downy_Mildew","split":"val","index":723},{"x":1.214,"y":2.2325,"label":"Downy_Mildew","split":"train","index":724},{"x":0.2807,"y":1.0032,"label":"Downy_Mildew","split":"train","index":725},{"x":0.0902,"y":0.9631,"label":"Downy_Mildew","split":"train","index":726},{"x":10.9468,"y":-1.1891,"label":"Downy_Mildew","split":"val","index":727},{"x":1.8128,"y":-0.0644,"label":"Downy_Mildew","split":"test","index":728},{"x":-0.6819,"y":0.2584,"label":"Downy_Mildew","split":"train","index":729},{"x":10.9023,"y":-1.134,"label":"Downy_Mildew","split":"train","index":730},{"x":1.2496,"y":2.2758,"label":"Downy_Mildew","split":"val","index":731},{"x":2.5783,"y":1.3969,"label":"Downy_Mildew","split":"train","index":732},{"x":14.5537,"y":2.8905,"label":"Downy_Mildew","split":"train","index":733},{"x":0.2589,"y":1.2857,"label":"Downy_Mildew","split":"train","index":734},{"x":1.7819,"y":-0.3041,"label":"Downy_Mildew","split":"test","index":735},{"x":0.3478,"y":1.0873,"label":"Downy_Mildew","split":"train","index":736},{"x":2.2083,"y":-2.1002,"label":"Downy_Mildew","split":"train","index":737},{"x":6.9907,"y":2.7264,"label":"Downy_Mildew","split":"train","index":738},{"x":13.2696,"y":1.3857,"label":"Downy_Mildew","split":"test","index":739},{"x":2.4234,"y":0.5887,"label":"Downy_Mildew","split":"test","index":740},{"x":0.657,"y":1.2993,"label":"Downy_Mildew","split":"train","index":741},{"x":2.6628,"y":0.3139,"label":"Downy_Mildew","split":"train","index":742},{"x":-1.96,"y":0.4802,"label":"Downy_Mildew","split":"val","index":743},{"x":7.0883,"y":2.1016,"label":"Downy_Mildew","split":"train","index":744},{"x":2.0214,"y":1.4311,"label":"Downy_Mildew","split":"test","index":745},{"x":1.7727,"y":-0.3184,"label":"Downy_Mildew","split":"train","index":746},{"x":0.2604,"y":1.3219,"label":"Downy_Mildew","split":"test","index":747},{"x":2.1866,"y":-2.0791,"label":"Downy_Mildew","split":"train","index":748},{"x":10.2833,"y":-1.0742,"label":"Downy_Mildew","split":"train","index":749},{"x":2.7031,"y":0.3448,"label":"Downy_Mildew","split":"train","index":750},{"x":7.0865,"y":2.121,"label":"Downy_Mildew","split":"test","index":751},{"x":2.5528,"y":1.2079,"label":"Downy_Mildew","split":"train","index":752},{"x":14.5469,"y":2.8842,"label":"Downy_Mildew","split":"train","index":753},{"x":1.9705,"y":0.1108,"label":"Downy_Mildew","split":"train","index":754},{"x":1.3838,"y":1.7985,"label":"Downy_Mildew","split":"train","index":755},{"x":7.002,"y":2.7082,"label":"Downy_Mildew","split":"val","index":756},{"x":3.113,"y":0.4059,"label":"Downy_Mildew","split":"train","index":757},{"x":2.5026,"y":0.6764,"label":"Downy_Mildew","split":"train","index":758},{"x":2.6676,"y":0.2456,"label":"Downy_Mildew","split":"train","index":759},{"x":14.3689,"y":1.1725,"label":"Downy_Mildew","split":"train","index":760},{"x":1.3737,"y":0.6133,"label":"Downy_Mildew","split":"train","index":761},{"x":-1.9535,"y":0.4706,"label":"Downy_Mildew","split":"train","index":762},{"x":1.739,"y":0.8108,"label":"Downy_Mildew","split":"train","index":763},{"x":1.3002,"y":2.0042,"label":"Downy_Mildew","split":"train","index":764},{"x":2.5305,"y":0.9343,"label":"Downy_Mildew","split":"train","index":765},{"x":7.277,"y":1.9547,"label":"Downy_Mildew","split":"val","index":766},{"x":1.4437,"y":0.3113,"label":"Downy_Mildew","split":"train","index":767},{"x":7.0495,"y":2.7014,"label":"Downy_Mildew","split":"train","index":768},{"x":-0.7039,"y":0.2122,"label":"Downy_Mildew","split":"train","index":769},{"x":10.8899,"y":-1.1454,"label":"Downy_Mildew","split":"train","index":770},{"x":2.5785,"y":1.1802,"label":"Downy_Mildew","split":"val","index":771},{"x":7.1178,"y":2.7216,"label":"Downy_Mildew","split":"train","index":772},{"x":1.2456,"y":2.2861,"label":"Downy_Mildew","split":"train","index":773},{"x":2.5275,"y":1.3119,"label":"Downy_Mildew","split":"train","index":774},{"x":0.2759,"y":1.0351,"label":"Downy_Mildew","split":"test","index":775},{"x":10.859,"y":-1.0939,"label":"Downy_Mildew","split":"val","index":776},{"x":2.5916,"y":1.407,"label":"Downy_Mildew","split":"val","index":777},{"x":1.1948,"y":2.1969,"label":"Downy_Mildew","split":"train","index":778},{"x":14.61,"y":2.9415,"label":"Downy_Mildew","split":"test","index":779},{"x":-1.9601,"y":0.4791,"label":"Downy_Mildew","split":"val","index":780},{"x":0.251,"y":0.7439,"label":"Downy_Mildew","split":"train","index":781},{"x":10.9457,"y":-1.2164,"label":"Downy_Mildew","split":"val","index":782},{"x":7.0827,"y":2.1508,"label":"Downy_Mildew","split":"train","index":783},{"x":-1.9758,"y":0.4648,"label":"Downy_Mildew","split":"test","index":784},{"x":2.0105,"y":1.5197,"label":"Downy_Mildew","split":"val","index":785},{"x":1.6341,"y":-0.3863,"label":"Downy_Mildew","split":"val","index":786},{"x":0.2434,"y":1.3647,"label":"Downy_Mildew","split":"train","index":787},{"x":1.7735,"y":-0.376,"label":"Downy_Mildew","split":"train","index":788},{"x":2.1917,"y":-2.0846,"label":"Downy_Mildew","split":"train","index":789},{"x":2.6453,"y":0.283,"label":"Downy_Mildew","split":"train","index":790},{"x":1.4634,"y":1.8901,"label":"Downy_Mildew","split":"train","index":791},{"x":2.3536,"y":0.7001,"label":"Downy_Mildew","split":"train","index":792},{"x":13.3233,"y":1.3732,"label":"Downy_Mildew","split":"val","index":793},{"x":1.9338,"y":1.6304,"label":"Downy_Mildew","split":"train","index":794},{"x":2.2047,"y":-2.1012,"label":"Downy_Mildew","split":"train","index":795},{"x":1.3496,"y":1.9165,"label":"Downy_Mildew","split":"train","index":796},{"x":10.2659,"y":-0.922,"label":"Downy_Mildew","split":"test","index":797},{"x":3.0522,"y":0.3287,"label":"Downy_Mildew","split":"test","index":798},{"x":10.3563,"y":-1.1133,"label":"Downy_Mildew","split":"val","index":799},{"x":2.3794,"y":0.1698,"label":"Downy_Mildew","split":"train","index":800},{"x":-0.3189,"y":0.7455,"label":"Downy_Mildew","split":"train","index":801},{"x":0.2771,"y":1.1714,"label":"Downy_Mildew","split":"train","index":802},{"x":2.0028,"y":-0.0229,"label":"Downy_Mildew","split":"val","index":803},{"x":1.3514,"y":-0.4796,"label":"Downy_Mildew","split":"train","index":804},{"x":7.0247,"y":2.7517,"label":"Downy_Mildew","split":"train","index":805},{"x":-0.2471,"y":0.8107,"label":"Downy_Mildew","split":"train","index":806},{"x":1.5684,"y":-0.4197,"label":"Downy_Mildew","split":"train","index":807},{"x":0.8988,"y":0.6851,"label":"Downy_Mildew","split":"val","index":808},{"x":2.0759,"y":0.109,"label":"Downy_Mildew","split":"train","index":809},{"x":2.5096,"y":0.4926,"label":"Downy_Mildew","split":"test","index":810},{"x":10.4662,"y":-0.2971,"label":"Downy_Mildew","split":"train","index":811},{"x":1.4506,"y":-0.5131,"label":"Downy_Mildew","split":"train","index":812},{"x":7.0017,"y":2.7125,"label":"Downy_Mildew","split":"train","index":813},{"x":2.3043,"y":0.4637,"label":"Downy_Mildew","split":"train","index":814},{"x":2.5277,"y":0.2358,"label":"Downy_Mildew","split":"train","index":815},{"x":1.1352,"y":-0.0286,"label":"Downy_Mildew","split":"train","index":816},{"x":10.4604,"y":-0.2776,"label":"Downy_Mildew","split":"test","index":817},{"x":-0.7031,"y":0.202,"label":"Downy_Mildew","split":"val","index":818},{"x":2.4463,"y":0.1963,"label":"Downy_Mildew","split":"val","index":819},{"x":1.787,"y":2.2389,"label":"Downy_Mildew","split":"test","index":820},{"x":10.211,"y":-1.118,"label":"Downy_Mildew","split":"test","index":821},{"x":0.9551,"y":1.6136,"label":"Downy_Mildew","split":"train","index":822},{"x":10.1832,"y":-1.1468,"label":"Downy_Mildew","split":"train","index":823},{"x":1.7468,"y":2.2426,"label":"Downy_Mildew","split":"train","index":824},{"x":-0.7456,"y":0.1205,"label":"Downy_Mildew","split":"test","index":825},{"x":1.1344,"y":-0.2339,"label":"Downy_Mildew","split":"train","index":826},{"x":0.7623,"y":0.9807,"label":"Downy_Mildew","split":"val","index":827},{"x":10.8441,"y":-0.5971,"label":"Downy_Mildew","split":"train","index":828},{"x":-0.226,"y":0.0091,"label":"Downy_Mildew","split":"train","index":829},{"x":1.8692,"y":1.1786,"label":"Downy_Mildew","split":"train","index":830},{"x":1.3454,"y":0.7669,"label":"Downy_Mildew","split":"train","index":831},{"x":7.0539,"y":2.7368,"label":"Downy_Mildew","split":"train","index":832},{"x":7.2821,"y":1.9574,"label":"Downy_Mildew","split":"test","index":833},{"x":10.7305,"y":-0.7392,"label":"Downy_Mildew","split":"train","index":834},{"x":1.7294,"y":1.5644,"label":"Downy_Mildew","split":"test","index":835},{"x":10.7089,"y":-0.7467,"label":"Downy_Mildew","split":"test","index":836},{"x":1.4419,"y":-0.4699,"label":"Downy_Mildew","split":"train","index":837},{"x":-0.1837,"y":0.0063,"label":"Downy_Mildew","split":"train","index":838},{"x":13.2923,"y":1.4083,"label":"Downy_Mildew","split":"train","index":839},{"x":1.8472,"y":0.9192,"label":"Downy_Mildew","split":"val","index":840},{"x":1.4707,"y":0.844,"label":"Downy_Mildew","split":"train","index":841},{"x":1.4671,"y":-0.4439,"label":"Downy_Mildew","split":"train","index":842},{"x":1.0872,"y":0.9848,"label":"Downy_Mildew","split":"train","index":843},{"x":2.2507,"y":1.4703,"label":"Downy_Mildew","split":"train","index":844},{"x":1.9024,"y":0.9642,"label":"Downy_Mildew","split":"train","index":845},{"x":13.3383,"y":1.4541,"label":"Downy_Mildew","split":"val","index":846},{"x":7.3256,"y":2.9458,"label":"Downy_Mildew","split":"val","index":847},{"x":2.3784,"y":2.1987,"label":"Downy_Mildew","split":"train","index":848},{"x":0.378,"y":1.1872,"label":"Downy_Mildew","split":"train","index":849},{"x":1.8451,"y":1.3697,"label":"Downy_Mildew","split":"test","index":850},{"x":7.2536,"y":1.9398,"label":"Downy_Mildew","split":"train","index":851},{"x":2.3899,"y":2.1974,"label":"Downy_Mildew","split":"train","index":852},{"x":1.0811,"y":0.9922,"label":"Downy_Mildew","split":"val","index":853},{"x":1.8187,"y":0.7712,"label":"Downy_Mildew","split":"train","index":854},{"x":10.3188,"y":-1.0413,"label":"Downy_Mildew","split":"train","index":855},{"x":2.7019,"y":0.265,"label":"Downy_Mildew","split":"val","index":856},{"x":-0.1522,"y":0.8402,"label":"Downy_Mildew","split":"test","index":857},{"x":0.2525,"y":1.179,"label":"Downy_Mildew","split":"train","index":858},{"x":2.1626,"y":0.1854,"label":"Downy_Mildew","split":"train","index":859},{"x":2.2044,"y":-2.0974,"label":"Downy_Mildew","split":"train","index":860},{"x":1.4247,"y":1.9833,"label":"Downy_Mildew","split":"test","index":861},{"x":10.2851,"y":-0.8967,"label":"Downy_Mildew","split":"train","index":862},{"x":3.0608,"y":0.3373,"label":"Downy_Mildew","split":"train","index":863},{"x":1.7627,"y":-0.2621,"label":"Downy_Mildew","split":"train","index":864},{"x":2.209,"y":-2.1032,"label":"Downy_Mildew","split":"train","index":865},{"x":2.6149,"y":0.2537,"label":"Downy_Mildew","split":"val","index":866},{"x":1.2887,"y":1.8603,"label":"Downy_Mildew","split":"val","index":867},{"x":2.2383,"y":0.1883,"label":"Downy_Mildew","split":"train","index":868},{"x":7.0728,"y":2.1186,"label":"Downy_Mildew","split":"train","index":869},{"x":1.8576,"y":1.5152,"label":"Downy_Mildew","split":"train","index":870},{"x":7.137,"y":2.0592,"label":"Downy_Mildew","split":"train","index":871},{"x":-1.9625,"y":0.4804,"label":"Downy_Mildew","split":"train","index":872},{"x":1.9621,"y":1.5787,"label":"Downy_Mildew","split":"train","index":873},{"x":1.7527,"y":-0.2628,"label":"Downy_Mildew","split":"train","index":874},{"x":0.2876,"y":1.1953,"label":"Downy_Mildew","split":"val","index":875},{"x":14.368,"y":1.1804,"label":"Downy_Mildew","split":"test","index":876},{"x":1.2046,"y":1.0191,"label":"Downy_Mildew","split":"val","index":877},{"x":2.6033,"y":1.3793,"label":"Downy_Mildew","split":"train","index":878},{"x":14.5985,"y":2.9278,"label":"Downy_Mildew","split":"train","index":879},{"x":-1.9299,"y":0.4826,"label":"Downy_Mildew","split":"train","index":880},{"x":0.5173,"y":0.6037,"label":"Downy_Mildew","split":"train","index":881},{"x":10.9275,"y":-1.1846,"label":"Downy_Mildew","split":"train","index":882},{"x":-0.6552,"y":0.2691,"label":"Downy_Mildew","split":"val","index":883},{"x":10.8446,"y":-1.1464,"label":"Downy_Mildew","split":"test","index":884},{"x":2.3842,"y":2.1887,"label":"Downy_Mildew","split":"test","index":885},{"x":7.07,"y":2.722,"label":"Downy_Mildew","split":"val","index":886},{"x":1.4467,"y":0.2453,"label":"Downy_Mildew","split":"train","index":887},{"x":1.2195,"y":2.2999,"label":"Downy_Mildew","split":"val","index":888},{"x":0.1728,"y":1.0554,"label":"Downy_Mildew","split":"train","index":889},{"x":1.7743,"y":0.6717,"label":"Downy_Mildew","split":"train","index":890},{"x":2.5595,"y":0.945,"label":"Downy_Mildew","split":"train","index":891},{"x":7.2611,"y":1.9245,"label":"Downy_Mildew","split":"test","index":892},{"x":1.2119,"y":0.6193,"label":"Downy_Mildew","split":"train","index":893},{"x":7.103,"y":2.7947,"label":"Downy_Mildew","split":"train","index":894},{"x":2.683,"y":0.3614,"label":"Downy_Mildew","split":"train","index":895},{"x":14.3734,"y":1.1621,"label":"Downy_Mildew","split":"train","index":896},{"x":1.3583,"y":0.7163,"label":"Downy_Mildew","split":"train","index":897},{"x":-1.9642,"y":0.481,"label":"Downy_Mildew","split":"train","index":898},{"x":1.7665,"y":0.7031,"label":"Downy_Mildew","split":"train","index":899},{"x":1.0203,"y":-0.0199,"label":"Downy_Mildew","split":"train","index":900},{"x":1.8878,"y":1.3324,"label":"Downy_Mildew","split":"train","index":901},{"x":7.275,"y":1.9181,"label":"Downy_Mildew","split":"test","index":902},{"x":2.328,"y":2.1584,"label":"Downy_Mildew","split":"train","index":903},{"x":1.073,"y":1.0118,"label":"Downy_Mildew","split":"val","index":904},{"x":1.7773,"y":0.7735,"label":"Downy_Mildew","split":"val","index":905},{"x":1.5592,"y":0.0462,"label":"Downy_Mildew","split":"train","index":906},{"x":1.9275,"y":1.6323,"label":"Downy_Mildew","split":"test","index":907},{"x":1.82,"y":0.9896,"label":"Downy_Mildew","split":"train","index":908},{"x":13.2997,"y":1.4152,"label":"Downy_Mildew","split":"test","index":909},{"x":7.2787,"y":2.9894,"label":"Downy_Mildew","split":"train","index":910},{"x":2.3998,"y":2.2053,"label":"Downy_Mildew","split":"train","index":911},{"x":10.7652,"y":-0.7111,"label":"Downy_Mildew","split":"train","index":912},{"x":1.5037,"y":0.2949,"label":"Downy_Mildew","split":"train","index":913},{"x":-0.1935,"y":0.0052,"label":"Downy_Mildew","split":"train","index":914},{"x":13.2859,"y":1.3914,"label":"Downy_Mildew","split":"val","index":915},{"x":1.3626,"y":1.2893,"label":"Downy_Mildew","split":"train","index":916},{"x":1.808,"y":0.9088,"label":"Downy_Mildew","split":"train","index":917},{"x":1.371,"y":-0.5392,"label":"Downy_Mildew","split":"test","index":918},{"x":-0.1654,"y":0.0323,"label":"Downy_Mildew","split":"train","index":919},{"x":1.3039,"y":1.0759,"label":"Downy_Mildew","split":"train","index":920},{"x":2.0873,"y":0.8663,"label":"Downy_Mildew","split":"train","index":921},{"x":7.2652,"y":1.9437,"label":"Downy_Mildew","split":"test","index":922},{"x":10.7987,"y":-0.5964,"label":"Downy_Mildew","split":"train","index":923},{"x":1.7025,"y":1.4439,"label":"Downy_Mildew","split":"train","index":924},{"x":0.6471,"y":1.2922,"label":"Downy_Mildew","split":"test","index":925},{"x":10.1246,"y":-1.1442,"label":"Downy_Mildew","split":"val","index":926},{"x":1.8348,"y":2.2048,"label":"Downy_Mildew","split":"train","index":927},{"x":-0.766,"y":0.1484,"label":"Downy_Mildew","split":"train","index":928},{"x":0.9491,"y":0.2627,"label":"Downy_Mildew","split":"train","index":929},{"x":0.7473,"y":0.9653,"label":"Downy_Mildew","split":"train","index":930},{"x":10.7843,"y":-0.6091,"label":"Downy_Mildew","split":"train","index":931},{"x":2.2442,"y":0.3943,"label":"Downy_Mildew","split":"test","index":932},{"x":2.6428,"y":0.2716,"label":"Downy_Mildew","split":"train","index":933},{"x":1.1878,"y":-0.1608,"label":"Downy_Mildew","split":"train","index":934},{"x":10.4809,"y":-0.2859,"label":"Downy_Mildew","split":"train","index":935},{"x":-0.6672,"y":0.2323,"label":"Downy_Mildew","split":"val","index":936},{"x":0.9663,"y":1.221,"label":"Downy_Mildew","split":"train","index":937},{"x":1.755,"y":2.2434,"label":"Downy_Mildew","split":"train","index":938},{"x":10.2401,"y":-1.0329,"label":"Downy_Mildew","split":"test","index":939},{"x":2.0932,"y":0.0952,"label":"Downy_Mildew","split":"train","index":940},{"x":2.6111,"y":0.5994,"label":"Downy_Mildew","split":"train","index":941},{"x":10.4595,"y":-0.3153,"label":"Downy_Mildew","split":"train","index":942},{"x":1.4214,"y":-0.5428,"label":"Downy_Mildew","split":"train","index":943},{"x":7.2616,"y":2.9895,"label":"Downy_Mildew","split":"train","index":944},{"x":1.3423,"y":-0.4792,"label":"Downy_Mildew","split":"train","index":945},{"x":7.023,"y":2.743,"label":"Downy_Mildew","split":"val","index":946},{"x":-0.3154,"y":0.7635,"label":"Downy_Mildew","split":"val","index":947},{"x":1.5035,"y":-0.4768,"label":"Downy_Mildew","split":"train","index":948},{"x":0.9619,"y":0.3689,"label":"Downy_Mildew","split":"train","index":949},{"x":13.5717,"y":9.7041,"label":"Healthy","split":"train","index":950},{"x":14.5073,"y":8.8769,"label":"Healthy","split":"train","index":951},{"x":13.1213,"y":10.6269,"label":"Healthy","split":"train","index":952},{"x":13.0602,"y":10.0145,"label":"Healthy","split":"train","index":953},{"x":14.1945,"y":8.7991,"label":"Healthy","split":"train","index":954},{"x":13.1255,"y":10.1756,"label":"Healthy","split":"train","index":955},{"x":14.4694,"y":8.6946,"label":"Healthy","split":"train","index":956},{"x":12.672,"y":9.8298,"label":"Healthy","split":"train","index":957},{"x":13.6783,"y":10.9598,"label":"Healthy","split":"test","index":958},{"x":13.5176,"y":9.9054,"label":"Healthy","split":"train","index":959},{"x":12.6836,"y":9.8983,"label":"Healthy","split":"train","index":960},{"x":13.9995,"y":9.4608,"label":"Healthy","split":"train","index":961},{"x":14.5009,"y":8.6411,"label":"Healthy","split":"train","index":962},{"x":12.8595,"y":9.9372,"label":"Healthy","split":"val","index":963},{"x":13.7201,"y":9.0591,"label":"Healthy","split":"train","index":964},{"x":13.6456,"y":9.1738,"label":"Healthy","split":"test","index":965},{"x":14.4325,"y":8.6086,"label":"Healthy","split":"val","index":966},{"x":13.121,"y":10.6729,"label":"Healthy","split":"train","index":967},{"x":13.7535,"y":8.8697,"label":"Healthy","split":"test","index":968},{"x":13.1192,"y":11.1747,"label":"Healthy","split":"test","index":969},{"x":12.797,"y":9.803,"label":"Healthy","split":"val","index":970},{"x":13.7664,"y":8.9662,"label":"Healthy","split":"train","index":971},{"x":13.477,"y":9.2772,"label":"Healthy","split":"train","index":972},{"x":13.1819,"y":11.1614,"label":"Healthy","split":"val","index":973},{"x":13.7189,"y":8.904,"label":"Healthy","split":"train","index":974},{"x":13.8404,"y":8.699,"label":"Healthy","split":"train","index":975},{"x":13.9287,"y":10.6166,"label":"Healthy","split":"val","index":976},{"x":13.0992,"y":10.5819,"label":"Healthy","split":"train","index":977},{"x":12.6154,"y":9.8283,"label":"Healthy","split":"train","index":978},{"x":14.3087,"y":8.6256,"label":"Healthy","split":"train","index":979},{"x":13.9336,"y":8.4261,"label":"Healthy","split":"train","index":980},{"x":12.6914,"y":9.945,"label":"Healthy","split":"train","index":981},{"x":14.5473,"y":9.0243,"label":"Healthy","split":"val","index":982},{"x":13.7471,"y":8.2208,"label":"Healthy","split":"val","index":983},{"x":12.8638,"y":10.2405,"label":"Healthy","split":"train","index":984},{"x":14.5548,"y":8.9908,"label":"Healthy","split":"train","index":985},{"x":13.5407,"y":11.0993,"label":"Healthy","split":"train","index":986},{"x":13.1666,"y":11.2915,"label":"Healthy","split":"train","index":987},{"x":14.3663,"y":9.2151,"label":"Healthy","split":"train","index":988},{"x":14.2662,"y":9.2656,"label":"Healthy","split":"train","index":989},{"x":12.7616,"y":9.8098,"label":"Healthy","split":"val","index":990},{"x":14.5706,"y":8.999,"label":"Healthy","split":"train","index":991},{"x":14.327,"y":9.3584,"label":"Healthy","split":"val","index":992},{"x":13.0737,"y":10.6922,"label":"Healthy","split":"train","index":993},{"x":13.5875,"y":10.6557,"label":"Healthy","split":"val","index":994},{"x":12.951,"y":10.4127,"label":"Healthy","split":"train","index":995},{"x":12.7963,"y":10.0101,"label":"Healthy","split":"train","index":996},{"x":13.697,"y":9.0133,"label":"Healthy","split":"val","index":997},{"x":14.1835,"y":8.3522,"label":"Healthy","split":"train","index":998},{"x":13.1344,"y":11.1822,"label":"Healthy","split":"train","index":999},{"x":13.7367,"y":8.906,"label":"Healthy","split":"val","index":1000},{"x":13.7348,"y":8.2015,"label":"Healthy","split":"train","index":1001},{"x":13.1111,"y":11.1509,"label":"Healthy","split":"train","index":1002},{"x":12.8134,"y":9.9055,"label":"Healthy","split":"train","index":1003},{"x":14.2207,"y":9.6997,"label":"Healthy","split":"test","index":1004},{"x":13.751,"y":8.8648,"label":"Healthy","split":"train","index":1005},{"x":13.6988,"y":9.6526,"label":"Healthy","split":"train","index":1006},{"x":13.9999,"y":8.5096,"label":"Healthy","split":"train","index":1007},{"x":13.1769,"y":10.242,"label":"Healthy","split":"test","index":1008},{"x":13.0476,"y":10.5962,"label":"Healthy","split":"test","index":1009},{"x":13.9796,"y":9.1203,"label":"Healthy","split":"val","index":1010},{"x":14.2867,"y":8.6868,"label":"Healthy","split":"train","index":1011},{"x":13.177,"y":10.7323,"label":"Healthy","split":"train","index":1012},{"x":13.1959,"y":9.6632,"label":"Healthy","split":"train","index":1013},{"x":13.5996,"y":10.0254,"label":"Healthy","split":"test","index":1014},{"x":13.4555,"y":9.3438,"label":"Healthy","split":"test","index":1015},{"x":12.9853,"y":10.5035,"label":"Healthy","split":"train","index":1016},{"x":12.9786,"y":10.2312,"label":"Healthy","split":"val","index":1017},{"x":13.5823,"y":8.9079,"label":"Healthy","split":"val","index":1018},{"x":13.4741,"y":10.8522,"label":"Healthy","split":"train","index":1019},{"x":13.6192,"y":9.2677,"label":"Healthy","split":"train","index":1020},{"x":13.5599,"y":9.4241,"label":"Healthy","split":"train","index":1021},{"x":13.2721,"y":10.5254,"label":"Healthy","split":"test","index":1022},{"x":14.0751,"y":8.8911,"label":"Healthy","split":"train","index":1023},{"x":12.9854,"y":10.3938,"label":"Healthy","split":"train","index":1024},{"x":13.6814,"y":9.1287,"label":"Healthy","split":"train","index":1025},{"x":12.8536,"y":10.0518,"label":"Healthy","split":"train","index":1026},{"x":12.6928,"y":9.837,"label":"Healthy","split":"train","index":1027},{"x":14.1677,"y":9.1934,"label":"Healthy","split":"train","index":1028},{"x":13.1487,"y":9.8,"label":"Healthy","split":"train","index":1029},{"x":13.0049,"y":10.489,"label":"Healthy","split":"train","index":1030},{"x":13.5687,"y":8.8861,"label":"Healthy","split":"train","index":1031},{"x":13.2223,"y":10.9242,"label":"Healthy","split":"train","index":1032},{"x":12.9663,"y":11.0554,"label":"Healthy","split":"train","index":1033},{"x":14.6169,"y":9.5441,"label":"Healthy","split":"train","index":1034},{"x":14.5024,"y":8.6923,"label":"Healthy","split":"val","index":1035},{"x":14.3239,"y":8.3731,"label":"Healthy","split":"train","index":1036},{"x":13.8121,"y":8.3228,"label":"Healthy","split":"train","index":1037},{"x":13.0496,"y":10.6021,"label":"Healthy","split":"train","index":1038},{"x":14.3936,"y":9.3018,"label":"Healthy","split":"test","index":1039},{"x":12.959,"y":10.5613,"label":"Healthy","split":"train","index":1040},{"x":14.465,"y":8.782,"label":"Healthy","split":"train","index":1041},{"x":13.4466,"y":10.0389,"label":"Healthy","split":"train","index":1042},{"x":13.8897,"y":8.5147,"label":"Healthy","split":"test","index":1043},{"x":13.4223,"y":9.575,"label":"Healthy","split":"train","index":1044},{"x":13.1578,"y":10.1149,"label":"Healthy","split":"train","index":1045},{"x":13.7482,"y":10.7698,"label":"Healthy","split":"train","index":1046},{"x":13.7496,"y":9.6532,"label":"Healthy","split":"train","index":1047},{"x":13.1755,"y":10.2303,"label":"Healthy","split":"train","index":1048},{"x":13.184,"y":10.0139,"label":"Healthy","split":"test","index":1049},{"x":14.1661,"y":10.4093,"label":"Healthy","split":"train","index":1050},{"x":14.6589,"y":9.5439,"label":"Healthy","split":"train","index":1051},{"x":13.2916,"y":10.5967,"label":"Healthy","split":"train","index":1052},{"x":14.6425,"y":9.7226,"label":"Healthy","split":"train","index":1053},{"x":13.7855,"y":10.9712,"label":"Healthy","split":"train","index":1054},{"x":13.8042,"y":8.818,"label":"Healthy","split":"test","index":1055},{"x":13.7343,"y":8.217,"label":"Healthy","split":"train","index":1056},{"x":13.3331,"y":10.5223,"label":"Healthy","split":"train","index":1057},{"x":13.3404,"y":10.7561,"label":"Healthy","split":"test","index":1058},{"x":13.4686,"y":11.0793,"label":"Healthy","split":"val","index":1059},{"x":14.4477,"y":9.9786,"label":"Healthy","split":"train","index":1060},{"x":14.4698,"y":9.7853,"label":"Healthy","split":"train","index":1061},{"x":13.0381,"y":10.8114,"label":"Healthy","split":"train","index":1062},{"x":14.431,"y":9.8952,"label":"Healthy","split":"train","index":1063},{"x":14.0896,"y":10.3028,"label":"Healthy","split":"train","index":1064},{"x":13.6924,"y":10.7916,"label":"Healthy","split":"train","index":1065},{"x":14.3071,"y":9.8905,"label":"Healthy","split":"train","index":1066},{"x":13.3741,"y":9.9312,"label":"Healthy","split":"val","index":1067},{"x":14.3027,"y":10.1103,"label":"Healthy","split":"train","index":1068},{"x":13.6776,"y":8.1357,"label":"Healthy","split":"val","index":1069},{"x":14.2902,"y":9.6632,"label":"Healthy","split":"test","index":1070},{"x":13.1072,"y":10.226,"label":"Healthy","split":"val","index":1071},{"x":14.1541,"y":9.1539,"label":"Healthy","split":"train","index":1072},{"x":14.2981,"y":9.2838,"label":"Healthy","split":"train","index":1073},{"x":13.2328,"y":11.2435,"label":"Healthy","split":"val","index":1074},{"x":13.6761,"y":8.1279,"label":"Healthy","split":"train","index":1075},{"x":13.6027,"y":10.5391,"label":"Healthy","split":"train","index":1076},{"x":14.3819,"y":10.0349,"label":"Healthy","split":"train","index":1077},{"x":12.6908,"y":9.8996,"label":"Healthy","split":"val","index":1078},{"x":13.7785,"y":8.7056,"label":"Healthy","split":"train","index":1079},{"x":13.7412,"y":10.7654,"label":"Healthy","split":"train","index":1080},{"x":13.4482,"y":11.1231,"label":"Healthy","split":"train","index":1081},{"x":13.2659,"y":10.4532,"label":"Healthy","split":"test","index":1082},{"x":14.2067,"y":9.8808,"label":"Healthy","split":"val","index":1083},{"x":14.3322,"y":9.9775,"label":"Healthy","split":"train","index":1084},{"x":14.2585,"y":10.1202,"label":"Healthy","split":"test","index":1085},{"x":14.6555,"y":8.6153,"label":"Healthy","split":"train","index":1086},{"x":14.3667,"y":10.1,"label":"Healthy","split":"test","index":1087},{"x":13.4085,"y":9.8941,"label":"Healthy","split":"train","index":1088},{"x":13.413,"y":10.8322,"label":"Healthy","split":"train","index":1089},{"x":13.5931,"y":9.6808,"label":"Healthy","split":"test","index":1090},{"x":13.8001,"y":10.5155,"label":"Healthy","split":"train","index":1091},{"x":13.2357,"y":10.6829,"label":"Healthy","split":"test","index":1092},{"x":13.5475,"y":9.5272,"label":"Healthy","split":"train","index":1093},{"x":13.7077,"y":10.9207,"label":"Healthy","split":"train","index":1094},{"x":14.0646,"y":10.6288,"label":"Healthy","split":"train","index":1095},{"x":14.2828,"y":10.0822,"label":"Healthy","split":"train","index":1096},{"x":13.5388,"y":10.8294,"label":"Healthy","split":"train","index":1097},{"x":13.0884,"y":10.2712,"label":"Healthy","split":"val","index":1098},{"x":14.0538,"y":9.7735,"label":"Healthy","split":"test","index":1099},{"x":13.7959,"y":9.0697,"label":"Healthy","split":"train","index":1100},{"x":13.8815,"y":10.6763,"label":"Healthy","split":"train","index":1101},{"x":14.4154,"y":10.1073,"label":"Healthy","split":"train","index":1102},{"x":13.6942,"y":8.1515,"label":"Healthy","split":"train","index":1103},{"x":13.8673,"y":8.7875,"label":"Healthy","split":"test","index":1104},{"x":12.9202,"y":10.5099,"label":"Healthy","split":"test","index":1105},{"x":13.2185,"y":10.4824,"label":"Healthy","split":"val","index":1106},{"x":14.2756,"y":9.7037,"label":"Healthy","split":"test","index":1107},{"x":14.1121,"y":10.3747,"label":"Healthy","split":"train","index":1108},{"x":13.8786,"y":10.355,"label":"Healthy","split":"train","index":1109},{"x":13.4658,"y":11.0788,"label":"Healthy","split":"train","index":1110},{"x":14.6756,"y":9.5184,"label":"Healthy","split":"train","index":1111},{"x":14.3826,"y":9.3635,"label":"Healthy","split":"test","index":1112},{"x":13.5915,"y":9.1184,"label":"Healthy","split":"test","index":1113},{"x":13.7477,"y":8.2188,"label":"Healthy","split":"train","index":1114},{"x":13.0415,"y":10.8107,"label":"Healthy","split":"train","index":1115},{"x":12.8879,"y":10.0428,"label":"Healthy","split":"val","index":1116},{"x":14.7059,"y":9.5384,"label":"Healthy","split":"train","index":1117},{"x":14.0525,"y":10.544,"label":"Healthy","split":"val","index":1118},{"x":13.8352,"y":10.8238,"label":"Healthy","split":"train","index":1119},{"x":14.1738,"y":9.9626,"label":"Healthy","split":"train","index":1120},{"x":14.2306,"y":9.3147,"label":"Healthy","split":"train","index":1121},{"x":13.8825,"y":9.4246,"label":"Healthy","split":"train","index":1122},{"x":13.0821,"y":10.34,"label":"Healthy","split":"train","index":1123},{"x":13.193,"y":10.8171,"label":"Healthy","split":"val","index":1124},{"x":13.7296,"y":10.5715,"label":"Healthy","split":"val","index":1125},{"x":13.4497,"y":10.4959,"label":"Healthy","split":"train","index":1126},{"x":13.7013,"y":9.1962,"label":"Healthy","split":"train","index":1127},{"x":14.1279,"y":10.5649,"label":"Healthy","split":"train","index":1128},{"x":13.817,"y":10.7459,"label":"Healthy","split":"train","index":1129},{"x":13.5675,"y":9.5558,"label":"Healthy","split":"train","index":1130},{"x":13.7275,"y":10.9159,"label":"Healthy","split":"train","index":1131},{"x":14.072,"y":10.6247,"label":"Healthy","split":"train","index":1132},{"x":13.6109,"y":10.0271,"label":"Healthy","split":"train","index":1133},{"x":13.3493,"y":10.4712,"label":"Healthy","split":"train","index":1134},{"x":13.0778,"y":10.7297,"label":"Healthy","split":"test","index":1135},{"x":14.0487,"y":9.0418,"label":"Healthy","split":"train","index":1136},{"x":14.2778,"y":10.1812,"label":"Healthy","split":"train","index":1137},{"x":13.6701,"y":9.1972,"label":"Healthy","split":"train","index":1138},{"x":13.6466,"y":10.6623,"label":"Healthy","split":"train","index":1139},{"x":13.6396,"y":10.8635,"label":"Healthy","split":"val","index":1140},{"x":14.2803,"y":10.0008,"label":"Healthy","split":"train","index":1141},{"x":13.513,"y":9.2434,"label":"Healthy","split":"train","index":1142},{"x":14.3909,"y":9.9553,"label":"Healthy","split":"train","index":1143},{"x":12.6531,"y":9.8257,"label":"Healthy","split":"train","index":1144},{"x":13.7024,"y":8.9824,"label":"Healthy","split":"test","index":1145},{"x":13.6254,"y":10.7336,"label":"Healthy","split":"val","index":1146},{"x":13.8179,"y":9.031,"label":"Healthy","split":"train","index":1147},{"x":13.2275,"y":11.2583,"label":"Healthy","split":"test","index":1148},{"x":14.4028,"y":9.7954,"label":"Healthy","split":"train","index":1149},{"x":14.5134,"y":9.5404,"label":"Healthy","split":"train","index":1150},{"x":13.2563,"y":11.2991,"label":"Healthy","split":"train","index":1151},{"x":13.678,"y":8.133,"label":"Healthy","split":"test","index":1152},{"x":13.0041,"y":9.8777,"label":"Healthy","split":"train","index":1153},{"x":14.3511,"y":9.8554,"label":"Healthy","split":"train","index":1154}] \ No newline at end of file diff --git a/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_3d.json b/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_3d.json new file mode 100644 index 0000000..cf4af85 --- /dev/null +++ b/static/data/dataset-benchmarking/embeddings/watermelon_disease_classification_umap_3d.json @@ -0,0 +1 @@ +[{"x":5.8817,"y":-3.0129,"z":3.9549,"label":"Mosaic_Virus","split":"train","index":0},{"x":1.203,"y":12.9537,"z":9.0847,"label":"Mosaic_Virus","split":"train","index":1},{"x":5.801,"y":14.9443,"z":3.1255,"label":"Mosaic_Virus","split":"train","index":2},{"x":6.2909,"y":-3.6259,"z":4.4216,"label":"Mosaic_Virus","split":"val","index":3},{"x":4.8578,"y":-3.5842,"z":1.7194,"label":"Mosaic_Virus","split":"val","index":4},{"x":5.8133,"y":14.9112,"z":3.1511,"label":"Mosaic_Virus","split":"test","index":5},{"x":6.0836,"y":-3.1509,"z":4.7024,"label":"Mosaic_Virus","split":"val","index":6},{"x":4.8794,"y":-3.5611,"z":1.7261,"label":"Mosaic_Virus","split":"train","index":7},{"x":6.1202,"y":14.2525,"z":3.2669,"label":"Mosaic_Virus","split":"train","index":8},{"x":7.2888,"y":8.9031,"z":4.0751,"label":"Mosaic_Virus","split":"val","index":9},{"x":6.5286,"y":-3.5415,"z":4.134,"label":"Mosaic_Virus","split":"train","index":10},{"x":6.5721,"y":9.3769,"z":4.0888,"label":"Mosaic_Virus","split":"val","index":11},{"x":7.1786,"y":0.3616,"z":4.1621,"label":"Mosaic_Virus","split":"train","index":12},{"x":5.9929,"y":14.2724,"z":3.1352,"label":"Mosaic_Virus","split":"test","index":13},{"x":6.6472,"y":-3.5979,"z":5.2364,"label":"Mosaic_Virus","split":"train","index":14},{"x":7.3298,"y":-4.1895,"z":6.0364,"label":"Mosaic_Virus","split":"val","index":15},{"x":5.9078,"y":-2.8084,"z":4.2538,"label":"Mosaic_Virus","split":"train","index":16},{"x":5.9587,"y":14.2592,"z":3.0831,"label":"Mosaic_Virus","split":"test","index":17},{"x":6.4167,"y":-3.4283,"z":4.0387,"label":"Mosaic_Virus","split":"train","index":18},{"x":5.8906,"y":-2.4114,"z":4.0617,"label":"Mosaic_Virus","split":"train","index":19},{"x":5.9373,"y":-3.1655,"z":3.7448,"label":"Mosaic_Virus","split":"train","index":20},{"x":1.1458,"y":13.0172,"z":9.1266,"label":"Mosaic_Virus","split":"train","index":21},{"x":6.5729,"y":9.406,"z":4.104,"label":"Mosaic_Virus","split":"train","index":22},{"x":6.2808,"y":13.4619,"z":3.3932,"label":"Mosaic_Virus","split":"train","index":23},{"x":5.9332,"y":-3.0599,"z":4.4647,"label":"Mosaic_Virus","split":"train","index":24},{"x":5.9397,"y":-3.0146,"z":4.4441,"label":"Mosaic_Virus","split":"train","index":25},{"x":5.9341,"y":14.5076,"z":3.524,"label":"Mosaic_Virus","split":"train","index":26},{"x":6.274,"y":13.9269,"z":3.3592,"label":"Mosaic_Virus","split":"train","index":27},{"x":4.7762,"y":8.8866,"z":1.6123,"label":"Mosaic_Virus","split":"test","index":28},{"x":5.8228,"y":8.2435,"z":2.7164,"label":"Mosaic_Virus","split":"test","index":29},{"x":7.1685,"y":0.6872,"z":4.157,"label":"Mosaic_Virus","split":"train","index":30},{"x":7.3545,"y":8.8979,"z":4.1049,"label":"Mosaic_Virus","split":"val","index":31},{"x":4.8613,"y":-3.5137,"z":1.7659,"label":"Mosaic_Virus","split":"train","index":32},{"x":4.917,"y":9.1392,"z":1.6941,"label":"Mosaic_Virus","split":"train","index":33},{"x":7.3114,"y":8.9862,"z":4.0425,"label":"Mosaic_Virus","split":"train","index":34},{"x":5.6138,"y":9.6338,"z":2.0353,"label":"Mosaic_Virus","split":"train","index":35},{"x":6.2916,"y":8.1564,"z":3.1997,"label":"Mosaic_Virus","split":"train","index":36},{"x":5.9145,"y":-2.7945,"z":4.3445,"label":"Mosaic_Virus","split":"train","index":37},{"x":5.9815,"y":-3.189,"z":4.0571,"label":"Mosaic_Virus","split":"train","index":38},{"x":5.9742,"y":14.4515,"z":3.2294,"label":"Mosaic_Virus","split":"train","index":39},{"x":4.9324,"y":-3.4869,"z":1.8418,"label":"Mosaic_Virus","split":"train","index":40},{"x":6.9933,"y":-3.8706,"z":6.0881,"label":"Mosaic_Virus","split":"train","index":41},{"x":7.46,"y":8.8829,"z":4.0333,"label":"Mosaic_Virus","split":"val","index":42},{"x":5.6695,"y":9.5725,"z":2.0702,"label":"Mosaic_Virus","split":"train","index":43},{"x":6.3554,"y":9.9569,"z":3.9705,"label":"Mosaic_Virus","split":"val","index":44},{"x":-0.1967,"y":13.8752,"z":6.1853,"label":"Mosaic_Virus","split":"train","index":45},{"x":6.3912,"y":-3.4275,"z":4.7458,"label":"Mosaic_Virus","split":"train","index":46},{"x":6.3777,"y":9.9728,"z":3.9911,"label":"Mosaic_Virus","split":"train","index":47},{"x":-0.2104,"y":13.8893,"z":6.1764,"label":"Mosaic_Virus","split":"train","index":48},{"x":4.8673,"y":-3.5142,"z":1.7626,"label":"Mosaic_Virus","split":"val","index":49},{"x":6.2573,"y":13.9274,"z":3.3156,"label":"Mosaic_Virus","split":"val","index":50},{"x":4.8142,"y":8.9367,"z":1.6454,"label":"Mosaic_Virus","split":"train","index":51},{"x":7.1231,"y":8.8499,"z":4.1351,"label":"Mosaic_Virus","split":"train","index":52},{"x":6.2997,"y":10.1744,"z":3.8685,"label":"Mosaic_Virus","split":"test","index":53},{"x":-0.1363,"y":13.9677,"z":6.8047,"label":"Mosaic_Virus","split":"val","index":54},{"x":6.018,"y":-3.1787,"z":4.8298,"label":"Mosaic_Virus","split":"train","index":55},{"x":6.266,"y":8.1566,"z":3.1617,"label":"Mosaic_Virus","split":"train","index":56},{"x":6.5922,"y":8.9468,"z":4.2551,"label":"Mosaic_Virus","split":"train","index":57},{"x":7.0673,"y":-3.8786,"z":6.0914,"label":"Mosaic_Virus","split":"train","index":58},{"x":6.8433,"y":-3.9356,"z":5.9764,"label":"Mosaic_Virus","split":"train","index":59},{"x":7.1675,"y":0.704,"z":4.1495,"label":"Mosaic_Virus","split":"train","index":60},{"x":6.7934,"y":9.064,"z":4.1171,"label":"Mosaic_Virus","split":"train","index":61},{"x":5.67,"y":9.5704,"z":2.0772,"label":"Mosaic_Virus","split":"train","index":62},{"x":6.8772,"y":-3.9368,"z":6.0147,"label":"Mosaic_Virus","split":"train","index":63},{"x":6.284,"y":10.2891,"z":3.8164,"label":"Mosaic_Virus","split":"val","index":64},{"x":-0.1328,"y":13.9528,"z":6.7795,"label":"Mosaic_Virus","split":"train","index":65},{"x":7.1571,"y":0.6992,"z":4.1407,"label":"Mosaic_Virus","split":"train","index":66},{"x":5.3223,"y":8.259,"z":2.3624,"label":"Mosaic_Virus","split":"train","index":67},{"x":6.6142,"y":8.915,"z":4.2509,"label":"Mosaic_Virus","split":"train","index":68},{"x":6.7406,"y":9.0907,"z":4.1157,"label":"Mosaic_Virus","split":"train","index":69},{"x":6.5061,"y":-3.7197,"z":5.0504,"label":"Mosaic_Virus","split":"test","index":70},{"x":6.6506,"y":-3.4701,"z":5.0233,"label":"Mosaic_Virus","split":"train","index":71},{"x":6.0526,"y":14.1571,"z":3.4642,"label":"Mosaic_Virus","split":"train","index":72},{"x":6.6409,"y":-3.6381,"z":4.6673,"label":"Mosaic_Virus","split":"train","index":73},{"x":6.5171,"y":-3.5497,"z":4.4944,"label":"Mosaic_Virus","split":"val","index":74},{"x":6.0356,"y":14.1621,"z":3.4966,"label":"Mosaic_Virus","split":"val","index":75},{"x":6.811,"y":-3.9198,"z":5.027,"label":"Mosaic_Virus","split":"val","index":76},{"x":5.4535,"y":9.6926,"z":1.9757,"label":"Mosaic_Virus","split":"train","index":77},{"x":5.3242,"y":8.2559,"z":2.3631,"label":"Mosaic_Virus","split":"train","index":78},{"x":6.6388,"y":8.9425,"z":4.2269,"label":"Mosaic_Virus","split":"test","index":79},{"x":7.4429,"y":8.807,"z":3.9625,"label":"Mosaic_Virus","split":"train","index":80},{"x":7.1499,"y":-3.877,"z":6.0236,"label":"Mosaic_Virus","split":"val","index":81},{"x":1.4642,"y":12.5448,"z":9.1708,"label":"Mosaic_Virus","split":"train","index":82},{"x":6.6662,"y":-3.6444,"z":4.5912,"label":"Mosaic_Virus","split":"train","index":83},{"x":7.3566,"y":-4.2086,"z":6.0602,"label":"Mosaic_Virus","split":"train","index":84},{"x":6.7741,"y":0.6949,"z":3.8097,"label":"Mosaic_Virus","split":"train","index":85},{"x":6.8208,"y":-3.8666,"z":5.314,"label":"Mosaic_Virus","split":"val","index":86},{"x":1.7073,"y":12.2493,"z":9.0479,"label":"Mosaic_Virus","split":"val","index":87},{"x":8.2932,"y":-2.1702,"z":3.0968,"label":"Mosaic_Virus","split":"test","index":88},{"x":1.705,"y":12.2526,"z":9.0489,"label":"Mosaic_Virus","split":"train","index":89},{"x":8.2637,"y":-2.1524,"z":3.1224,"label":"Mosaic_Virus","split":"train","index":90},{"x":6.1421,"y":-3.3215,"z":4.7899,"label":"Mosaic_Virus","split":"train","index":91},{"x":6.2822,"y":10.238,"z":3.8309,"label":"Mosaic_Virus","split":"test","index":92},{"x":6.5824,"y":-3.5399,"z":4.7515,"label":"Mosaic_Virus","split":"val","index":93},{"x":6.0033,"y":-3.1632,"z":4.8121,"label":"Mosaic_Virus","split":"train","index":94},{"x":7.5937,"y":8.9331,"z":4.1142,"label":"Mosaic_Virus","split":"train","index":95},{"x":6.7249,"y":-3.506,"z":4.9838,"label":"Mosaic_Virus","split":"val","index":96},{"x":6.8501,"y":-3.996,"z":5.9096,"label":"Mosaic_Virus","split":"train","index":97},{"x":6.7314,"y":0.6915,"z":3.776,"label":"Mosaic_Virus","split":"train","index":98},{"x":1.201,"y":12.9608,"z":9.0836,"label":"Mosaic_Virus","split":"train","index":99},{"x":7.9035,"y":-1.3585,"z":3.2797,"label":"Mosaic_Virus","split":"train","index":100},{"x":7.5517,"y":8.9536,"z":4.1971,"label":"Mosaic_Virus","split":"train","index":101},{"x":1.4504,"y":12.5827,"z":9.1457,"label":"Mosaic_Virus","split":"train","index":102},{"x":7.8798,"y":-1.3301,"z":3.2794,"label":"Mosaic_Virus","split":"train","index":103},{"x":6.1834,"y":-3.2708,"z":4.9339,"label":"Mosaic_Virus","split":"train","index":104},{"x":6.9668,"y":-3.9773,"z":5.5015,"label":"Mosaic_Virus","split":"train","index":105},{"x":6.7054,"y":0.6886,"z":3.7503,"label":"Mosaic_Virus","split":"test","index":106},{"x":6.6048,"y":-3.6037,"z":4.5447,"label":"Mosaic_Virus","split":"train","index":107},{"x":6.3386,"y":9.9807,"z":3.9657,"label":"Mosaic_Virus","split":"train","index":108},{"x":-0.213,"y":13.8913,"z":6.1793,"label":"Mosaic_Virus","split":"train","index":109},{"x":4.8556,"y":-3.5757,"z":1.7017,"label":"Mosaic_Virus","split":"train","index":110},{"x":6.2838,"y":13.9177,"z":3.3125,"label":"Mosaic_Virus","split":"train","index":111},{"x":4.8265,"y":8.9433,"z":1.6539,"label":"Mosaic_Virus","split":"test","index":112},{"x":7.272,"y":8.9055,"z":4.112,"label":"Mosaic_Virus","split":"val","index":113},{"x":4.8718,"y":-3.5206,"z":1.767,"label":"Mosaic_Virus","split":"train","index":114},{"x":6.9874,"y":-3.7403,"z":6.228,"label":"Mosaic_Virus","split":"val","index":115},{"x":7.441,"y":8.8642,"z":4.0519,"label":"Mosaic_Virus","split":"train","index":116},{"x":5.6102,"y":9.6267,"z":2.0317,"label":"Mosaic_Virus","split":"test","index":117},{"x":6.3672,"y":9.9267,"z":3.9925,"label":"Mosaic_Virus","split":"test","index":118},{"x":-0.1897,"y":13.8682,"z":6.155,"label":"Mosaic_Virus","split":"train","index":119},{"x":6.5829,"y":-3.8532,"z":6.0162,"label":"Mosaic_Virus","split":"val","index":120},{"x":4.97,"y":9.2391,"z":1.7268,"label":"Mosaic_Virus","split":"test","index":121},{"x":7.4403,"y":8.8311,"z":4.0075,"label":"Mosaic_Virus","split":"train","index":122},{"x":7.172,"y":0.5995,"z":4.1615,"label":"Mosaic_Virus","split":"train","index":123},{"x":6.323,"y":8.1126,"z":3.136,"label":"Mosaic_Virus","split":"train","index":124},{"x":6.3518,"y":-3.3714,"z":3.9505,"label":"Mosaic_Virus","split":"train","index":125},{"x":5.9136,"y":-3.0336,"z":4.1727,"label":"Mosaic_Virus","split":"val","index":126},{"x":6.0135,"y":14.4956,"z":3.2467,"label":"Mosaic_Virus","split":"train","index":127},{"x":5.9606,"y":-3.1368,"z":4.1742,"label":"Mosaic_Virus","split":"train","index":128},{"x":6.3977,"y":-3.3466,"z":5.0072,"label":"Mosaic_Virus","split":"train","index":129},{"x":5.9227,"y":14.5447,"z":3.5024,"label":"Mosaic_Virus","split":"train","index":130},{"x":6.2443,"y":13.9222,"z":3.3042,"label":"Mosaic_Virus","split":"train","index":131},{"x":4.8326,"y":8.9504,"z":1.6631,"label":"Mosaic_Virus","split":"train","index":132},{"x":5.8346,"y":8.2652,"z":2.7282,"label":"Mosaic_Virus","split":"train","index":133},{"x":7.1563,"y":0.6821,"z":4.141,"label":"Mosaic_Virus","split":"train","index":134},{"x":7.3088,"y":8.902,"z":4.1483,"label":"Mosaic_Virus","split":"train","index":135},{"x":5.954,"y":14.3255,"z":3.0664,"label":"Mosaic_Virus","split":"train","index":136},{"x":6.5238,"y":-3.5325,"z":4.1133,"label":"Mosaic_Virus","split":"train","index":137},{"x":7.3791,"y":-4.2235,"z":6.0682,"label":"Mosaic_Virus","split":"test","index":138},{"x":5.8354,"y":-3.0291,"z":3.8992,"label":"Mosaic_Virus","split":"test","index":139},{"x":1.2157,"y":12.9356,"z":9.0986,"label":"Mosaic_Virus","split":"test","index":140},{"x":6.5343,"y":9.4768,"z":4.0825,"label":"Mosaic_Virus","split":"train","index":141},{"x":6.3046,"y":13.4062,"z":3.4032,"label":"Mosaic_Virus","split":"train","index":142},{"x":6.4738,"y":-3.491,"z":4.0343,"label":"Mosaic_Virus","split":"train","index":143},{"x":6.5931,"y":9.2712,"z":4.1198,"label":"Mosaic_Virus","split":"train","index":144},{"x":6.2894,"y":13.3563,"z":3.4435,"label":"Mosaic_Virus","split":"train","index":145},{"x":5.9823,"y":14.2464,"z":3.0821,"label":"Mosaic_Virus","split":"val","index":146},{"x":6.6705,"y":-3.6096,"z":5.1423,"label":"Mosaic_Virus","split":"train","index":147},{"x":7.3582,"y":-4.1899,"z":6.0825,"label":"Mosaic_Virus","split":"test","index":148},{"x":6.3731,"y":-3.3797,"z":3.9627,"label":"Mosaic_Virus","split":"train","index":149},{"x":6.4391,"y":-3.4397,"z":4.0571,"label":"Mosaic_Virus","split":"train","index":150},{"x":4.9205,"y":-3.5935,"z":1.6843,"label":"Mosaic_Virus","split":"train","index":151},{"x":6.067,"y":14.2784,"z":3.1649,"label":"Mosaic_Virus","split":"train","index":152},{"x":5.8961,"y":-2.7797,"z":4.2095,"label":"Mosaic_Virus","split":"train","index":153},{"x":1.1742,"y":12.9889,"z":9.097,"label":"Mosaic_Virus","split":"val","index":154},{"x":5.7832,"y":14.9636,"z":3.1396,"label":"Mosaic_Virus","split":"train","index":155},{"x":6.2575,"y":-3.641,"z":4.4523,"label":"Mosaic_Virus","split":"train","index":156},{"x":4.9131,"y":-3.5419,"z":1.7797,"label":"Mosaic_Virus","split":"train","index":157},{"x":1.4962,"y":12.5196,"z":9.1439,"label":"Mosaic_Virus","split":"train","index":158},{"x":7.8939,"y":-1.3293,"z":3.2715,"label":"Mosaic_Virus","split":"train","index":159},{"x":5.879,"y":-2.4102,"z":4.0958,"label":"Mosaic_Virus","split":"train","index":160},{"x":6.952,"y":-3.9983,"z":5.598,"label":"Mosaic_Virus","split":"train","index":161},{"x":6.7285,"y":0.6841,"z":3.7651,"label":"Mosaic_Virus","split":"train","index":162},{"x":6.8901,"y":-3.9621,"z":5.7877,"label":"Mosaic_Virus","split":"test","index":163},{"x":6.7872,"y":0.6474,"z":3.837,"label":"Mosaic_Virus","split":"train","index":164},{"x":1.1807,"y":12.9794,"z":9.1019,"label":"Mosaic_Virus","split":"train","index":165},{"x":7.9098,"y":-1.3108,"z":3.2561,"label":"Mosaic_Virus","split":"test","index":166},{"x":5.9756,"y":14.2326,"z":3.154,"label":"Mosaic_Virus","split":"train","index":167},{"x":1.6965,"y":12.2604,"z":9.0589,"label":"Mosaic_Virus","split":"train","index":168},{"x":8.2928,"y":-2.176,"z":3.1005,"label":"Mosaic_Virus","split":"train","index":169},{"x":6.2749,"y":10.2862,"z":3.8138,"label":"Mosaic_Virus","split":"train","index":170},{"x":5.8889,"y":-2.4091,"z":4.0646,"label":"Mosaic_Virus","split":"train","index":171},{"x":6.4365,"y":-3.7877,"z":6.0867,"label":"Mosaic_Virus","split":"train","index":172},{"x":7.5053,"y":9.0075,"z":4.2455,"label":"Mosaic_Virus","split":"train","index":173},{"x":6.6266,"y":-3.4907,"z":5.063,"label":"Mosaic_Virus","split":"train","index":174},{"x":1.4708,"y":12.5508,"z":9.1535,"label":"Mosaic_Virus","split":"train","index":175},{"x":6.6992,"y":-3.6471,"z":4.5568,"label":"Mosaic_Virus","split":"train","index":176},{"x":4.8612,"y":-3.5545,"z":1.7255,"label":"Mosaic_Virus","split":"test","index":177},{"x":6.7317,"y":0.7016,"z":3.7975,"label":"Mosaic_Virus","split":"train","index":178},{"x":6.5396,"y":-3.4482,"z":5.16,"label":"Mosaic_Virus","split":"train","index":179},{"x":1.7236,"y":12.2281,"z":9.042,"label":"Mosaic_Virus","split":"train","index":180},{"x":8.3116,"y":-2.1887,"z":3.0883,"label":"Mosaic_Virus","split":"train","index":181},{"x":6.5553,"y":-3.5801,"z":4.4198,"label":"Mosaic_Virus","split":"train","index":182},{"x":6.1026,"y":14.0915,"z":3.4292,"label":"Mosaic_Virus","split":"train","index":183},{"x":6.8062,"y":-3.951,"z":5.1023,"label":"Mosaic_Virus","split":"train","index":184},{"x":5.4821,"y":9.7577,"z":1.9633,"label":"Mosaic_Virus","split":"train","index":185},{"x":5.3233,"y":8.2528,"z":2.3651,"label":"Mosaic_Virus","split":"train","index":186},{"x":6.5805,"y":8.8826,"z":4.3032,"label":"Mosaic_Virus","split":"train","index":187},{"x":7.3731,"y":8.927,"z":4.0812,"label":"Mosaic_Virus","split":"val","index":188},{"x":7.1023,"y":-3.8685,"z":6.0424,"label":"Mosaic_Virus","split":"train","index":189},{"x":7.1664,"y":0.6816,"z":4.1485,"label":"Mosaic_Virus","split":"train","index":190},{"x":5.3143,"y":8.2338,"z":2.3564,"label":"Mosaic_Virus","split":"train","index":191},{"x":4.8089,"y":8.9231,"z":1.6539,"label":"Mosaic_Virus","split":"test","index":192},{"x":6.8404,"y":8.9332,"z":4.0405,"label":"Mosaic_Virus","split":"test","index":193},{"x":6.3916,"y":-3.5774,"z":5.1603,"label":"Mosaic_Virus","split":"train","index":194},{"x":6.2155,"y":-3.3016,"z":4.9364,"label":"Mosaic_Virus","split":"train","index":195},{"x":6.0506,"y":14.1192,"z":3.5078,"label":"Mosaic_Virus","split":"train","index":196},{"x":6.7651,"y":-3.9595,"z":5.0641,"label":"Mosaic_Virus","split":"test","index":197},{"x":7.167,"y":0.6989,"z":4.1461,"label":"Mosaic_Virus","split":"train","index":198},{"x":6.754,"y":9.0103,"z":4.0869,"label":"Mosaic_Virus","split":"val","index":199},{"x":5.6853,"y":9.5599,"z":2.0849,"label":"Mosaic_Virus","split":"train","index":200},{"x":7.028,"y":-3.9447,"z":5.9206,"label":"Mosaic_Virus","split":"train","index":201},{"x":6.282,"y":10.2952,"z":3.8118,"label":"Mosaic_Virus","split":"test","index":202},{"x":-0.165,"y":13.9307,"z":6.7635,"label":"Mosaic_Virus","split":"train","index":203},{"x":6.2893,"y":10.1801,"z":3.8528,"label":"Mosaic_Virus","split":"train","index":204},{"x":-0.1399,"y":13.9637,"z":6.8039,"label":"Mosaic_Virus","split":"test","index":205},{"x":6.2159,"y":-3.3212,"z":4.8231,"label":"Mosaic_Virus","split":"val","index":206},{"x":6.2642,"y":8.1523,"z":3.1599,"label":"Mosaic_Virus","split":"train","index":207},{"x":8.3459,"y":-2.2189,"z":3.0526,"label":"Mosaic_Virus","split":"train","index":208},{"x":7.1883,"y":-3.9619,"z":6.0072,"label":"Mosaic_Virus","split":"train","index":209},{"x":6.94,"y":-3.9689,"z":5.7448,"label":"Mosaic_Virus","split":"train","index":210},{"x":6.3335,"y":13.2923,"z":3.4236,"label":"Mosaic_Virus","split":"val","index":211},{"x":6.7183,"y":0.7316,"z":3.7452,"label":"Mosaic_Virus","split":"val","index":212},{"x":7.8888,"y":-1.3385,"z":3.2787,"label":"Mosaic_Virus","split":"train","index":213},{"x":1.1615,"y":13.001,"z":9.1125,"label":"Mosaic_Virus","split":"train","index":214},{"x":5.9298,"y":-2.4296,"z":3.9865,"label":"Mosaic_Virus","split":"test","index":215},{"x":6.6977,"y":-3.5096,"z":4.9645,"label":"Mosaic_Virus","split":"train","index":216},{"x":7.9168,"y":-1.3092,"z":3.2464,"label":"Mosaic_Virus","split":"train","index":217},{"x":1.4271,"y":12.5888,"z":9.1914,"label":"Mosaic_Virus","split":"train","index":218},{"x":6.6173,"y":9.2775,"z":4.1309,"label":"Mosaic_Virus","split":"test","index":219},{"x":6.9307,"y":-4.0033,"z":5.7526,"label":"Mosaic_Virus","split":"train","index":220},{"x":5.8968,"y":14.7807,"z":3.2104,"label":"Mosaic_Virus","split":"train","index":221},{"x":6.6712,"y":-3.8557,"z":6.0294,"label":"Mosaic_Virus","split":"train","index":222},{"x":6.788,"y":-3.7891,"z":4.8664,"label":"Mosaic_Virus","split":"train","index":223},{"x":6.8582,"y":-3.9115,"z":5.2593,"label":"Mosaic_Virus","split":"test","index":224},{"x":7.5928,"y":8.9189,"z":4.1376,"label":"Mosaic_Virus","split":"train","index":225},{"x":8.2971,"y":-2.1724,"z":3.0997,"label":"Mosaic_Virus","split":"train","index":226},{"x":1.6816,"y":12.2781,"z":9.0683,"label":"Mosaic_Virus","split":"train","index":227},{"x":6.7984,"y":-3.9129,"z":5.9882,"label":"Mosaic_Virus","split":"test","index":228},{"x":8.2819,"y":-2.1625,"z":3.1116,"label":"Mosaic_Virus","split":"train","index":229},{"x":1.7566,"y":12.1961,"z":9.0077,"label":"Mosaic_Virus","split":"val","index":230},{"x":6.7555,"y":0.7067,"z":3.7584,"label":"Mosaic_Virus","split":"train","index":231},{"x":5.9058,"y":-2.7882,"z":4.3289,"label":"Mosaic_Virus","split":"train","index":232},{"x":5.8841,"y":-2.3938,"z":4.0589,"label":"Mosaic_Virus","split":"train","index":233},{"x":6.7515,"y":-3.622,"z":5.0293,"label":"Mosaic_Virus","split":"test","index":234},{"x":7.5857,"y":8.9401,"z":4.1862,"label":"Mosaic_Virus","split":"train","index":235},{"x":5.326,"y":8.246,"z":2.3679,"label":"Mosaic_Virus","split":"train","index":236},{"x":5.4868,"y":9.7318,"z":1.9641,"label":"Mosaic_Virus","split":"train","index":237},{"x":6.7601,"y":8.895,"z":3.9986,"label":"Mosaic_Virus","split":"train","index":238},{"x":6.6362,"y":8.899,"z":4.2263,"label":"Mosaic_Virus","split":"val","index":239},{"x":-0.2113,"y":13.8896,"z":6.1759,"label":"Mosaic_Virus","split":"val","index":240},{"x":6.0655,"y":14.1082,"z":3.4573,"label":"Mosaic_Virus","split":"train","index":241},{"x":6.4818,"y":-3.51,"z":4.4754,"label":"Mosaic_Virus","split":"train","index":242},{"x":5.9225,"y":-3.1241,"z":4.0645,"label":"Mosaic_Virus","split":"train","index":243},{"x":6.3307,"y":10.0006,"z":3.9537,"label":"Mosaic_Virus","split":"train","index":244},{"x":6.1715,"y":14.0256,"z":3.3619,"label":"Mosaic_Virus","split":"val","index":245},{"x":6.7436,"y":-3.8209,"z":4.8295,"label":"Mosaic_Virus","split":"train","index":246},{"x":6.6042,"y":-3.7948,"z":5.1099,"label":"Mosaic_Virus","split":"train","index":247},{"x":5.3541,"y":8.2335,"z":2.3903,"label":"Mosaic_Virus","split":"train","index":248},{"x":5.4252,"y":9.7365,"z":1.9251,"label":"Mosaic_Virus","split":"train","index":249},{"x":7.2494,"y":8.9598,"z":4.0473,"label":"Mosaic_Virus","split":"test","index":250},{"x":6.6073,"y":8.9284,"z":4.2484,"label":"Mosaic_Virus","split":"train","index":251},{"x":1.4948,"y":12.5221,"z":9.142,"label":"Mosaic_Virus","split":"train","index":252},{"x":6.265,"y":10.166,"z":3.8519,"label":"Mosaic_Virus","split":"train","index":253},{"x":6.0647,"y":14.1009,"z":3.4215,"label":"Mosaic_Virus","split":"train","index":254},{"x":6.8811,"y":-3.8454,"z":6.1304,"label":"Mosaic_Virus","split":"train","index":255},{"x":6.9606,"y":-4.0198,"z":5.5736,"label":"Mosaic_Virus","split":"test","index":256},{"x":5.6019,"y":9.6089,"z":2.0473,"label":"Mosaic_Virus","split":"train","index":257},{"x":6.8805,"y":-3.9938,"z":5.7954,"label":"Mosaic_Virus","split":"train","index":258},{"x":-0.1396,"y":13.964,"z":6.8008,"label":"Mosaic_Virus","split":"train","index":259},{"x":6.2821,"y":10.2623,"z":3.8257,"label":"Mosaic_Virus","split":"test","index":260},{"x":5.8615,"y":-3.1809,"z":3.783,"label":"Mosaic_Virus","split":"train","index":261},{"x":5.022,"y":-3.4687,"z":1.9608,"label":"Mosaic_Virus","split":"test","index":262},{"x":6.9275,"y":-3.7737,"z":6.2141,"label":"Mosaic_Virus","split":"train","index":263},{"x":6.1842,"y":-3.4025,"z":3.8341,"label":"Mosaic_Virus","split":"train","index":264},{"x":6.3262,"y":10.0385,"z":3.9412,"label":"Mosaic_Virus","split":"train","index":265},{"x":6.0325,"y":14.1236,"z":3.5111,"label":"Mosaic_Virus","split":"train","index":266},{"x":-0.2668,"y":13.9459,"z":6.1174,"label":"Mosaic_Virus","split":"test","index":267},{"x":5.0349,"y":9.3004,"z":1.782,"label":"Mosaic_Virus","split":"test","index":268},{"x":5.007,"y":-3.4806,"z":1.9494,"label":"Mosaic_Virus","split":"val","index":269},{"x":6.2985,"y":13.9688,"z":3.2674,"label":"Mosaic_Virus","split":"train","index":270},{"x":5.8564,"y":-3.1201,"z":3.8439,"label":"Mosaic_Virus","split":"train","index":271},{"x":5.9242,"y":14.5468,"z":3.4951,"label":"Mosaic_Virus","split":"train","index":272},{"x":5.8483,"y":-3.1622,"z":3.8307,"label":"Mosaic_Virus","split":"train","index":273},{"x":4.9404,"y":9.1794,"z":1.7045,"label":"Mosaic_Virus","split":"train","index":274},{"x":5.8515,"y":8.2749,"z":2.7396,"label":"Mosaic_Virus","split":"train","index":275},{"x":4.84,"y":8.9638,"z":1.6437,"label":"Mosaic_Virus","split":"val","index":276},{"x":6.2892,"y":8.145,"z":3.1799,"label":"Mosaic_Virus","split":"test","index":277},{"x":5.9298,"y":8.301,"z":2.8133,"label":"Mosaic_Virus","split":"train","index":278},{"x":4.9832,"y":9.2469,"z":1.7355,"label":"Mosaic_Virus","split":"test","index":279},{"x":6.2853,"y":8.1745,"z":3.1861,"label":"Mosaic_Virus","split":"train","index":280},{"x":7.1611,"y":0.63,"z":4.1497,"label":"Mosaic_Virus","split":"train","index":281},{"x":6.3143,"y":-3.2943,"z":3.9648,"label":"Mosaic_Virus","split":"train","index":282},{"x":6.1366,"y":14.1845,"z":3.3127,"label":"Mosaic_Virus","split":"train","index":283},{"x":5.8758,"y":-3.1896,"z":3.8055,"label":"Mosaic_Virus","split":"train","index":284},{"x":5.8912,"y":8.2809,"z":2.7712,"label":"Mosaic_Virus","split":"val","index":285},{"x":5.7818,"y":14.9692,"z":3.1118,"label":"Mosaic_Virus","split":"val","index":286},{"x":6.1056,"y":-2.1754,"z":4.0068,"label":"Mosaic_Virus","split":"train","index":287},{"x":6.5972,"y":9.216,"z":4.1491,"label":"Mosaic_Virus","split":"train","index":288},{"x":6.6641,"y":-3.6368,"z":5.127,"label":"Mosaic_Virus","split":"train","index":289},{"x":5.9731,"y":14.3236,"z":3.0692,"label":"Mosaic_Virus","split":"train","index":290},{"x":5.8425,"y":-2.9449,"z":4.03,"label":"Mosaic_Virus","split":"test","index":291},{"x":7.361,"y":-4.2086,"z":6.0439,"label":"Mosaic_Virus","split":"test","index":292},{"x":6.4987,"y":-3.4821,"z":4.0476,"label":"Mosaic_Virus","split":"train","index":293},{"x":6.0297,"y":14.2675,"z":3.149,"label":"Mosaic_Virus","split":"train","index":294},{"x":5.9205,"y":-3.0855,"z":4.0896,"label":"Mosaic_Virus","split":"train","index":295},{"x":5.8845,"y":-2.4103,"z":4.0184,"label":"Mosaic_Virus","split":"val","index":296},{"x":4.8288,"y":-3.565,"z":1.7024,"label":"Mosaic_Virus","split":"train","index":297},{"x":6.3041,"y":13.3447,"z":3.3975,"label":"Mosaic_Virus","split":"train","index":298},{"x":5.4384,"y":9.7929,"z":1.949,"label":"Mosaic_Virus","split":"test","index":299},{"x":1.1791,"y":12.9811,"z":9.1018,"label":"Mosaic_Virus","split":"train","index":300},{"x":6.1665,"y":-3.6353,"z":4.4095,"label":"Mosaic_Virus","split":"train","index":301},{"x":5.7787,"y":14.8895,"z":3.1065,"label":"Mosaic_Virus","split":"test","index":302},{"x":4.9233,"y":-3.5378,"z":1.793,"label":"Mosaic_Virus","split":"train","index":303},{"x":5.4854,"y":9.7846,"z":2.011,"label":"Mosaic_Virus","split":"train","index":304},{"x":6.3273,"y":-3.609,"z":4.4034,"label":"Mosaic_Virus","split":"train","index":305},{"x":5.8102,"y":14.9129,"z":3.1175,"label":"Mosaic_Virus","split":"train","index":306},{"x":4.849,"y":-3.5896,"z":1.6878,"label":"Mosaic_Virus","split":"train","index":307},{"x":6.0084,"y":-2.2589,"z":3.9453,"label":"Mosaic_Virus","split":"test","index":308},{"x":6.9003,"y":-3.9321,"z":5.3269,"label":"Mosaic_Virus","split":"train","index":309},{"x":7.3788,"y":-4.2169,"z":6.0262,"label":"Mosaic_Virus","split":"val","index":310},{"x":7.3876,"y":8.8687,"z":4.1224,"label":"Mosaic_Virus","split":"train","index":311},{"x":5.6296,"y":9.6363,"z":2.0271,"label":"Mosaic_Virus","split":"train","index":312},{"x":6.9783,"y":-3.9651,"z":5.8264,"label":"Mosaic_Virus","split":"train","index":313},{"x":-0.1564,"y":13.9472,"z":6.7807,"label":"Mosaic_Virus","split":"train","index":314},{"x":6.2953,"y":10.1873,"z":3.897,"label":"Mosaic_Virus","split":"test","index":315},{"x":5.9309,"y":-3.0875,"z":4.0689,"label":"Mosaic_Virus","split":"train","index":316},{"x":-0.1361,"y":13.9666,"z":6.8082,"label":"Mosaic_Virus","split":"train","index":317},{"x":6.3323,"y":9.9913,"z":3.9574,"label":"Mosaic_Virus","split":"test","index":318},{"x":6.9963,"y":-3.8094,"z":6.202,"label":"Mosaic_Virus","split":"test","index":319},{"x":6.9734,"y":-4.0368,"z":5.5884,"label":"Mosaic_Virus","split":"train","index":320},{"x":6.3548,"y":9.9533,"z":3.9923,"label":"Mosaic_Virus","split":"val","index":321},{"x":6.0322,"y":14.1711,"z":3.4269,"label":"Mosaic_Virus","split":"test","index":322},{"x":6.4952,"y":-3.5964,"z":4.3274,"label":"Mosaic_Virus","split":"train","index":323},{"x":6.8053,"y":-3.9342,"z":5.1198,"label":"Mosaic_Virus","split":"train","index":324},{"x":5.3544,"y":8.2695,"z":2.3872,"label":"Mosaic_Virus","split":"train","index":325},{"x":5.4602,"y":9.7693,"z":2.0021,"label":"Mosaic_Virus","split":"train","index":326},{"x":6.8924,"y":9.107,"z":4.0881,"label":"Mosaic_Virus","split":"train","index":327},{"x":6.5846,"y":8.8969,"z":4.2592,"label":"Mosaic_Virus","split":"train","index":328},{"x":5.3382,"y":8.2607,"z":2.3684,"label":"Mosaic_Virus","split":"val","index":329},{"x":7.1931,"y":0.6068,"z":4.1806,"label":"Mosaic_Virus","split":"val","index":330},{"x":6.8527,"y":9.2148,"z":4.0857,"label":"Mosaic_Virus","split":"train","index":331},{"x":6.6151,"y":8.9116,"z":4.2443,"label":"Mosaic_Virus","split":"val","index":332},{"x":-0.1042,"y":13.9991,"z":6.8437,"label":"Mosaic_Virus","split":"train","index":333},{"x":6.0756,"y":14.0927,"z":3.4914,"label":"Mosaic_Virus","split":"train","index":334},{"x":6.5771,"y":-3.5752,"z":4.419,"label":"Mosaic_Virus","split":"train","index":335},{"x":6.0364,"y":-3.1688,"z":4.7882,"label":"Mosaic_Virus","split":"train","index":336},{"x":8.3671,"y":-2.2152,"z":3.0354,"label":"Mosaic_Virus","split":"train","index":337},{"x":1.7068,"y":12.2502,"z":9.0477,"label":"Mosaic_Virus","split":"val","index":338},{"x":6.7126,"y":0.7043,"z":3.7668,"label":"Mosaic_Virus","split":"train","index":339},{"x":6.3794,"y":-3.6013,"z":5.1627,"label":"Mosaic_Virus","split":"train","index":340},{"x":5.9022,"y":-2.4122,"z":4.0213,"label":"Mosaic_Virus","split":"val","index":341},{"x":6.7477,"y":-3.5438,"z":5.1018,"label":"Mosaic_Virus","split":"test","index":342},{"x":7.6082,"y":8.9186,"z":4.1563,"label":"Mosaic_Virus","split":"test","index":343},{"x":4.8602,"y":-3.5882,"z":1.7015,"label":"Mosaic_Virus","split":"test","index":344},{"x":6.6817,"y":-3.6773,"z":4.5016,"label":"Mosaic_Virus","split":"test","index":345},{"x":6.8714,"y":-3.9243,"z":5.3045,"label":"Mosaic_Virus","split":"train","index":346},{"x":7.6062,"y":8.9276,"z":4.1986,"label":"Mosaic_Virus","split":"val","index":347},{"x":8.2899,"y":-2.1973,"z":3.104,"label":"Mosaic_Virus","split":"train","index":348},{"x":1.6945,"y":12.2606,"z":9.0624,"label":"Mosaic_Virus","split":"train","index":349},{"x":6.8601,"y":-3.9944,"z":5.8836,"label":"Mosaic_Virus","split":"train","index":350},{"x":7.8933,"y":-1.3396,"z":3.2733,"label":"Mosaic_Virus","split":"train","index":351},{"x":1.4222,"y":12.613,"z":9.1642,"label":"Mosaic_Virus","split":"train","index":352},{"x":6.6306,"y":9.4027,"z":4.1489,"label":"Mosaic_Virus","split":"train","index":353},{"x":6.8454,"y":-3.9501,"z":5.7916,"label":"Mosaic_Virus","split":"test","index":354},{"x":5.8078,"y":14.9292,"z":3.129,"label":"Mosaic_Virus","split":"val","index":355},{"x":6.319,"y":13.3372,"z":3.4273,"label":"Mosaic_Virus","split":"train","index":356},{"x":6.5529,"y":-3.8283,"z":5.98,"label":"Mosaic_Virus","split":"train","index":357},{"x":6.8,"y":0.644,"z":3.8586,"label":"Mosaic_Virus","split":"train","index":358},{"x":7.8397,"y":-1.3928,"z":3.3163,"label":"Mosaic_Virus","split":"test","index":359},{"x":1.5161,"y":12.4976,"z":9.1397,"label":"Mosaic_Virus","split":"test","index":360},{"x":5.8764,"y":-2.4688,"z":4.0074,"label":"Mosaic_Virus","split":"train","index":361},{"x":6.7879,"y":-3.6051,"z":5.0607,"label":"Mosaic_Virus","split":"val","index":362},{"x":6.2297,"y":-3.5535,"z":4.4736,"label":"Mosaic_Virus","split":"test","index":363},{"x":5.8054,"y":14.939,"z":3.1272,"label":"Mosaic_Virus","split":"train","index":364},{"x":4.8731,"y":-3.5627,"z":1.6795,"label":"Mosaic_Virus","split":"val","index":365},{"x":6.1023,"y":-2.1972,"z":3.987,"label":"Mosaic_Virus","split":"train","index":366},{"x":6.8944,"y":-4.0069,"z":5.2385,"label":"Mosaic_Virus","split":"train","index":367},{"x":7.3598,"y":-4.2348,"z":6.0775,"label":"Mosaic_Virus","split":"train","index":368},{"x":7.4107,"y":8.8116,"z":4.1479,"label":"Mosaic_Virus","split":"train","index":369},{"x":1.1776,"y":12.9838,"z":9.1009,"label":"Mosaic_Virus","split":"val","index":370},{"x":6.2785,"y":-3.6461,"z":4.3981,"label":"Mosaic_Virus","split":"train","index":371},{"x":5.7876,"y":14.9783,"z":3.0936,"label":"Mosaic_Virus","split":"train","index":372},{"x":5.0104,"y":-3.4506,"z":1.8763,"label":"Mosaic_Virus","split":"val","index":373},{"x":5.4311,"y":9.8386,"z":1.9492,"label":"Mosaic_Virus","split":"train","index":374},{"x":6.3808,"y":-3.4686,"z":3.9605,"label":"Mosaic_Virus","split":"train","index":375},{"x":5.9796,"y":14.2526,"z":3.0514,"label":"Mosaic_Virus","split":"train","index":376},{"x":5.8794,"y":-3.0632,"z":3.8514,"label":"Mosaic_Virus","split":"val","index":377},{"x":5.9022,"y":-2.3689,"z":4.0166,"label":"Mosaic_Virus","split":"val","index":378},{"x":4.9016,"y":-3.5894,"z":1.712,"label":"Mosaic_Virus","split":"val","index":379},{"x":6.2459,"y":13.5862,"z":3.391,"label":"Mosaic_Virus","split":"train","index":380},{"x":5.4929,"y":9.7764,"z":1.9977,"label":"Mosaic_Virus","split":"test","index":381},{"x":5.7917,"y":14.9689,"z":3.1168,"label":"Mosaic_Virus","split":"test","index":382},{"x":6.1177,"y":-2.2156,"z":4.0151,"label":"Mosaic_Virus","split":"train","index":383},{"x":6.6044,"y":9.3296,"z":4.1078,"label":"Mosaic_Virus","split":"train","index":384},{"x":6.8931,"y":-3.9585,"z":5.4963,"label":"Mosaic_Virus","split":"train","index":385},{"x":5.9033,"y":14.3031,"z":3.0054,"label":"Mosaic_Virus","split":"train","index":386},{"x":5.8783,"y":-2.697,"z":4.2791,"label":"Mosaic_Virus","split":"train","index":387},{"x":7.3497,"y":-4.1853,"z":6.0779,"label":"Mosaic_Virus","split":"train","index":388},{"x":7.1985,"y":9.0248,"z":4.078,"label":"Mosaic_Virus","split":"train","index":389},{"x":4.8535,"y":8.9853,"z":1.6457,"label":"Mosaic_Virus","split":"val","index":390},{"x":6.2775,"y":8.1814,"z":3.191,"label":"Mosaic_Virus","split":"train","index":391},{"x":7.123,"y":0.6741,"z":4.1142,"label":"Mosaic_Virus","split":"train","index":392},{"x":6.2756,"y":-3.3351,"z":3.8917,"label":"Mosaic_Virus","split":"train","index":393},{"x":6.0568,"y":14.3376,"z":3.2071,"label":"Mosaic_Virus","split":"train","index":394},{"x":5.8697,"y":-3.1562,"z":3.7544,"label":"Mosaic_Virus","split":"train","index":395},{"x":5.8853,"y":8.2862,"z":2.77,"label":"Mosaic_Virus","split":"train","index":396},{"x":5.929,"y":-3.2387,"z":3.7923,"label":"Mosaic_Virus","split":"test","index":397},{"x":5.9267,"y":14.5374,"z":3.4993,"label":"Mosaic_Virus","split":"val","index":398},{"x":5.9994,"y":-3.181,"z":4.1226,"label":"Mosaic_Virus","split":"train","index":399},{"x":4.9301,"y":9.1622,"z":1.7038,"label":"Mosaic_Virus","split":"train","index":400},{"x":5.8663,"y":8.2717,"z":2.7545,"label":"Mosaic_Virus","split":"val","index":401},{"x":4.8387,"y":8.966,"z":1.6598,"label":"Mosaic_Virus","split":"val","index":402},{"x":6.2639,"y":8.1802,"z":3.1947,"label":"Mosaic_Virus","split":"train","index":403},{"x":7.1706,"y":0.6943,"z":4.1553,"label":"Mosaic_Virus","split":"train","index":404},{"x":5.9336,"y":14.5016,"z":3.5515,"label":"Mosaic_Virus","split":"train","index":405},{"x":-0.2149,"y":13.8831,"z":6.1499,"label":"Mosaic_Virus","split":"test","index":406},{"x":5.01,"y":9.2765,"z":1.7497,"label":"Mosaic_Virus","split":"train","index":407},{"x":4.8466,"y":-3.4438,"z":1.8442,"label":"Mosaic_Virus","split":"train","index":408},{"x":6.2837,"y":13.9468,"z":3.2854,"label":"Mosaic_Virus","split":"test","index":409},{"x":4.9491,"y":-3.457,"z":1.8763,"label":"Mosaic_Virus","split":"train","index":410},{"x":6.3353,"y":13.8635,"z":3.266,"label":"Mosaic_Virus","split":"train","index":411},{"x":6.0841,"y":-3.2008,"z":3.9315,"label":"Mosaic_Virus","split":"train","index":412},{"x":5.9159,"y":8.2822,"z":2.796,"label":"Mosaic_Virus","split":"test","index":413},{"x":6.3527,"y":9.9921,"z":3.945,"label":"Mosaic_Virus","split":"val","index":414},{"x":-5.3274,"y":2.3147,"z":5.3772,"label":"Anthracnose","split":"train","index":415},{"x":-5.0534,"y":2.6662,"z":5.8126,"label":"Anthracnose","split":"train","index":416},{"x":-5.7743,"y":3.3307,"z":8.1438,"label":"Anthracnose","split":"train","index":417},{"x":-5.3368,"y":2.2676,"z":5.3165,"label":"Anthracnose","split":"train","index":418},{"x":-6.3234,"y":4.3539,"z":8.0465,"label":"Anthracnose","split":"train","index":419},{"x":-5.038,"y":2.8414,"z":5.3752,"label":"Anthracnose","split":"train","index":420},{"x":-6.3623,"y":4.3929,"z":8.086,"label":"Anthracnose","split":"test","index":421},{"x":-4.5661,"y":4.075,"z":6.8924,"label":"Anthracnose","split":"train","index":422},{"x":-5.0775,"y":2.6741,"z":5.5591,"label":"Anthracnose","split":"train","index":423},{"x":-4.7115,"y":3.4103,"z":7.0932,"label":"Anthracnose","split":"test","index":424},{"x":-5.5116,"y":3.5668,"z":7.7059,"label":"Anthracnose","split":"train","index":425},{"x":-4.8021,"y":3.2956,"z":6.9566,"label":"Anthracnose","split":"train","index":426},{"x":-5.7763,"y":3.3476,"z":8.1269,"label":"Anthracnose","split":"train","index":427},{"x":-5.2748,"y":2.2637,"z":4.2913,"label":"Anthracnose","split":"train","index":428},{"x":-4.8558,"y":3.2875,"z":6.9965,"label":"Anthracnose","split":"val","index":429},{"x":-4.9117,"y":3.1792,"z":6.7283,"label":"Anthracnose","split":"val","index":430},{"x":-5.5407,"y":3.6052,"z":7.6911,"label":"Anthracnose","split":"val","index":431},{"x":-5.5814,"y":2.0266,"z":3.6223,"label":"Anthracnose","split":"train","index":432},{"x":-5.2608,"y":2.2584,"z":4.2701,"label":"Anthracnose","split":"train","index":433},{"x":-5.1432,"y":2.5049,"z":5.2736,"label":"Anthracnose","split":"val","index":434},{"x":-5.9039,"y":4.3675,"z":6.1971,"label":"Anthracnose","split":"train","index":435},{"x":-4.815,"y":3.0508,"z":8.5658,"label":"Anthracnose","split":"train","index":436},{"x":-5.8911,"y":4.3668,"z":6.1927,"label":"Anthracnose","split":"test","index":437},{"x":-4.8029,"y":3.04,"z":8.5801,"label":"Anthracnose","split":"val","index":438},{"x":-4.9604,"y":3.1695,"z":8.4037,"label":"Anthracnose","split":"train","index":439},{"x":-4.7882,"y":2.5544,"z":4.3897,"label":"Anthracnose","split":"train","index":440},{"x":-5.3224,"y":3.5965,"z":7.5396,"label":"Anthracnose","split":"train","index":441},{"x":-5.1384,"y":2.6116,"z":5.3413,"label":"Anthracnose","split":"train","index":442},{"x":-4.8464,"y":3.076,"z":8.5352,"label":"Anthracnose","split":"train","index":443},{"x":-5.0688,"y":2.645,"z":6.1318,"label":"Anthracnose","split":"train","index":444},{"x":-6.3345,"y":4.3606,"z":8.0685,"label":"Anthracnose","split":"test","index":445},{"x":-5.0556,"y":2.6714,"z":5.8964,"label":"Anthracnose","split":"val","index":446},{"x":-5.0843,"y":2.6253,"z":6.161,"label":"Anthracnose","split":"val","index":447},{"x":-5.0756,"y":2.6921,"z":5.6576,"label":"Anthracnose","split":"train","index":448},{"x":-5.323,"y":2.2968,"z":5.3072,"label":"Anthracnose","split":"val","index":449},{"x":-5.3298,"y":2.277,"z":5.2601,"label":"Anthracnose","split":"val","index":450},{"x":-5.0717,"y":2.6401,"z":5.9887,"label":"Anthracnose","split":"val","index":451},{"x":-5.595,"y":3.5816,"z":7.7532,"label":"Anthracnose","split":"train","index":452},{"x":-5.6011,"y":2.0081,"z":3.5973,"label":"Anthracnose","split":"train","index":453},{"x":-5.2281,"y":2.3584,"z":4.9558,"label":"Anthracnose","split":"train","index":454},{"x":-5.8095,"y":3.2985,"z":8.1773,"label":"Anthracnose","split":"train","index":455},{"x":-5.2648,"y":2.2734,"z":4.3302,"label":"Anthracnose","split":"val","index":456},{"x":-4.8345,"y":3.3052,"z":6.9493,"label":"Anthracnose","split":"train","index":457},{"x":-5.1442,"y":2.6509,"z":5.3593,"label":"Anthracnose","split":"test","index":458},{"x":-4.819,"y":3.2671,"z":6.9222,"label":"Anthracnose","split":"test","index":459},{"x":-4.7045,"y":3.4073,"z":7.1046,"label":"Anthracnose","split":"train","index":460},{"x":-5.5091,"y":3.5099,"z":7.7236,"label":"Anthracnose","split":"train","index":461},{"x":-6.3762,"y":4.4119,"z":8.1015,"label":"Anthracnose","split":"val","index":462},{"x":-4.5988,"y":4.0442,"z":6.9362,"label":"Anthracnose","split":"test","index":463},{"x":-5.0658,"y":2.7144,"z":5.6319,"label":"Anthracnose","split":"val","index":464},{"x":-6.3057,"y":4.3363,"z":8.0323,"label":"Anthracnose","split":"train","index":465},{"x":-4.557,"y":4.0662,"z":6.8905,"label":"Anthracnose","split":"train","index":466},{"x":-5.7002,"y":3.4877,"z":7.9367,"label":"Anthracnose","split":"train","index":467},{"x":-5.3364,"y":2.2755,"z":5.3666,"label":"Anthracnose","split":"train","index":468},{"x":-5.3188,"y":2.2993,"z":5.4032,"label":"Anthracnose","split":"train","index":469},{"x":-5.0803,"y":2.6687,"z":5.5602,"label":"Anthracnose","split":"train","index":470},{"x":-5.1529,"y":2.4788,"z":5.1951,"label":"Anthracnose","split":"train","index":471},{"x":-5.1126,"y":2.6037,"z":5.9626,"label":"Anthracnose","split":"test","index":472},{"x":-5.0384,"y":2.7354,"z":5.5471,"label":"Anthracnose","split":"test","index":473},{"x":-5.2517,"y":2.3554,"z":5.2004,"label":"Anthracnose","split":"train","index":474},{"x":-5.05,"y":2.635,"z":6.1537,"label":"Anthracnose","split":"test","index":475},{"x":-4.834,"y":2.5777,"z":4.462,"label":"Anthracnose","split":"test","index":476},{"x":-5.049,"y":2.6607,"z":6.218,"label":"Anthracnose","split":"test","index":477},{"x":-6.4092,"y":4.4423,"z":8.13,"label":"Anthracnose","split":"train","index":478},{"x":-5.1314,"y":2.5351,"z":5.2779,"label":"Anthracnose","split":"val","index":479},{"x":-4.7939,"y":3.0292,"z":8.5881,"label":"Anthracnose","split":"train","index":480},{"x":-5.3458,"y":3.6278,"z":7.5273,"label":"Anthracnose","split":"train","index":481},{"x":-5.9313,"y":4.3948,"z":6.1569,"label":"Anthracnose","split":"train","index":482},{"x":-4.7808,"y":3.0198,"z":8.6035,"label":"Anthracnose","split":"train","index":483},{"x":-4.9933,"y":3.1809,"z":8.3937,"label":"Anthracnose","split":"train","index":484},{"x":-5.0132,"y":2.7427,"z":5.9447,"label":"Anthracnose","split":"train","index":485},{"x":-5.8957,"y":4.3561,"z":6.1468,"label":"Anthracnose","split":"train","index":486},{"x":-4.8089,"y":3.0477,"z":8.5689,"label":"Anthracnose","split":"train","index":487},{"x":-5.0509,"y":2.6915,"z":5.9511,"label":"Anthracnose","split":"train","index":488},{"x":-5.2636,"y":2.3401,"z":5.206,"label":"Anthracnose","split":"train","index":489},{"x":-4.7954,"y":2.5661,"z":4.395,"label":"Anthracnose","split":"train","index":490},{"x":-5.1477,"y":2.4784,"z":5.2104,"label":"Anthracnose","split":"train","index":491},{"x":-4.5673,"y":4.0786,"z":6.9011,"label":"Anthracnose","split":"test","index":492},{"x":-5.063,"y":2.6441,"z":6.0687,"label":"Anthracnose","split":"train","index":493},{"x":-4.6771,"y":3.9877,"z":6.9867,"label":"Anthracnose","split":"train","index":494},{"x":-6.3515,"y":4.3813,"z":8.0769,"label":"Anthracnose","split":"train","index":495},{"x":-5.2847,"y":2.3715,"z":5.2903,"label":"Anthracnose","split":"train","index":496},{"x":-5.0605,"y":2.6909,"z":6.2336,"label":"Anthracnose","split":"train","index":497},{"x":-4.9146,"y":2.5686,"z":4.637,"label":"Anthracnose","split":"test","index":498},{"x":-5.9106,"y":4.3707,"z":6.1517,"label":"Anthracnose","split":"test","index":499},{"x":-5.6089,"y":2.0008,"z":3.5867,"label":"Anthracnose","split":"train","index":500},{"x":-4.8389,"y":2.5914,"z":4.4951,"label":"Anthracnose","split":"train","index":501},{"x":-4.883,"y":3.1129,"z":8.491,"label":"Anthracnose","split":"train","index":502},{"x":-4.8136,"y":2.561,"z":4.4055,"label":"Anthracnose","split":"train","index":503},{"x":-4.848,"y":3.0777,"z":8.5322,"label":"Anthracnose","split":"train","index":504},{"x":-5.8912,"y":4.354,"z":6.199,"label":"Anthracnose","split":"train","index":505},{"x":-4.9646,"y":3.1695,"z":8.4244,"label":"Anthracnose","split":"train","index":506},{"x":-5.916,"y":4.3801,"z":6.1576,"label":"Anthracnose","split":"train","index":507},{"x":-5.6158,"y":1.996,"z":3.5907,"label":"Anthracnose","split":"train","index":508},{"x":-5.7526,"y":3.3206,"z":8.1574,"label":"Anthracnose","split":"train","index":509},{"x":-5.0398,"y":2.538,"z":5.0192,"label":"Anthracnose","split":"train","index":510},{"x":-4.7133,"y":3.605,"z":7.0017,"label":"Anthracnose","split":"train","index":511},{"x":-4.6794,"y":3.6826,"z":6.9529,"label":"Anthracnose","split":"val","index":512},{"x":-5.6086,"y":2.0009,"z":3.5878,"label":"Anthracnose","split":"train","index":513},{"x":-5.1796,"y":2.3947,"z":4.8622,"label":"Anthracnose","split":"train","index":514},{"x":-4.731,"y":3.411,"z":7.0661,"label":"Anthracnose","split":"train","index":515},{"x":-5.7749,"y":3.3304,"z":8.1424,"label":"Anthracnose","split":"train","index":516},{"x":-5.3039,"y":2.2392,"z":4.2394,"label":"Anthracnose","split":"val","index":517},{"x":-4.8048,"y":3.358,"z":7.1054,"label":"Anthracnose","split":"train","index":518},{"x":-6.3334,"y":4.364,"z":8.0563,"label":"Anthracnose","split":"train","index":519},{"x":-4.5389,"y":4.0793,"z":6.8611,"label":"Anthracnose","split":"train","index":520},{"x":-5.0496,"y":2.6692,"z":6.2357,"label":"Anthracnose","split":"train","index":521},{"x":-5.9335,"y":4.3934,"z":6.1461,"label":"Anthracnose","split":"train","index":522},{"x":-4.5935,"y":4.1105,"z":6.9321,"label":"Anthracnose","split":"train","index":523},{"x":-4.7089,"y":3.3984,"z":7.1174,"label":"Anthracnose","split":"test","index":524},{"x":-5.2249,"y":2.4152,"z":5.2874,"label":"Anthracnose","split":"test","index":525},{"x":-5.7561,"y":3.3581,"z":8.107,"label":"Anthracnose","split":"train","index":526},{"x":-5.7766,"y":3.3278,"z":8.1484,"label":"Anthracnose","split":"train","index":527},{"x":-6.3552,"y":4.3837,"z":8.085,"label":"Anthracnose","split":"val","index":528},{"x":-5.0715,"y":2.6275,"z":6.1345,"label":"Anthracnose","split":"train","index":529},{"x":-5.8804,"y":4.3448,"z":6.1122,"label":"Anthracnose","split":"train","index":530},{"x":-5.64,"y":1.9705,"z":3.554,"label":"Anthracnose","split":"train","index":531},{"x":-5.9248,"y":4.3846,"z":6.2083,"label":"Anthracnose","split":"train","index":532},{"x":-4.9564,"y":3.1607,"z":8.4166,"label":"Anthracnose","split":"val","index":533},{"x":-4.8145,"y":2.5701,"z":4.408,"label":"Anthracnose","split":"test","index":534},{"x":-4.8724,"y":3.0988,"z":8.4982,"label":"Anthracnose","split":"train","index":535},{"x":-5.9156,"y":4.3797,"z":6.1574,"label":"Anthracnose","split":"train","index":536},{"x":-5.5955,"y":2.0137,"z":3.6017,"label":"Anthracnose","split":"train","index":537},{"x":-4.8172,"y":2.5632,"z":4.4164,"label":"Anthracnose","split":"train","index":538},{"x":-5.3075,"y":3.6258,"z":7.5263,"label":"Anthracnose","split":"train","index":539},{"x":-5.2095,"y":2.4106,"z":5.3403,"label":"Anthracnose","split":"train","index":540},{"x":-4.9944,"y":2.7293,"z":6.2657,"label":"Anthracnose","split":"train","index":541},{"x":-4.7875,"y":2.549,"z":4.3826,"label":"Anthracnose","split":"train","index":542},{"x":-4.6331,"y":4.0345,"z":6.9604,"label":"Anthracnose","split":"train","index":543},{"x":-5.4906,"y":3.5688,"z":7.6672,"label":"Anthracnose","split":"test","index":544},{"x":-4.6306,"y":4.0168,"z":6.9314,"label":"Anthracnose","split":"train","index":545},{"x":-5.041,"y":2.6702,"z":6.05,"label":"Anthracnose","split":"train","index":546},{"x":-5.0316,"y":2.7528,"z":5.6652,"label":"Anthracnose","split":"val","index":547},{"x":-5.2515,"y":2.3468,"z":5.139,"label":"Anthracnose","split":"train","index":548},{"x":-4.7916,"y":2.5624,"z":4.388,"label":"Anthracnose","split":"train","index":549},{"x":-5.776,"y":3.3257,"z":8.1546,"label":"Anthracnose","split":"train","index":550},{"x":-6.3288,"y":4.3633,"z":8.055,"label":"Anthracnose","split":"test","index":551},{"x":-5.3491,"y":2.2657,"z":5.4067,"label":"Anthracnose","split":"train","index":552},{"x":-4.7129,"y":3.4061,"z":7.0953,"label":"Anthracnose","split":"train","index":553},{"x":-5.127,"y":2.6109,"z":5.3863,"label":"Anthracnose","split":"test","index":554},{"x":-5.7435,"y":3.3858,"z":8.0833,"label":"Anthracnose","split":"test","index":555},{"x":-6.382,"y":4.4026,"z":8.1094,"label":"Anthracnose","split":"val","index":556},{"x":-4.5555,"y":4.0893,"z":6.8919,"label":"Anthracnose","split":"val","index":557},{"x":-6.3494,"y":4.3794,"z":8.0753,"label":"Anthracnose","split":"val","index":558},{"x":-4.5558,"y":4.0797,"z":6.8883,"label":"Anthracnose","split":"train","index":559},{"x":-5.0456,"y":2.6601,"z":6.1794,"label":"Anthracnose","split":"train","index":560},{"x":-5.7638,"y":3.3366,"z":8.1389,"label":"Anthracnose","split":"train","index":561},{"x":-4.8874,"y":2.6424,"z":4.694,"label":"Anthracnose","split":"train","index":562},{"x":-4.6883,"y":3.4729,"z":7.0914,"label":"Anthracnose","split":"train","index":563},{"x":-4.7042,"y":3.4183,"z":7.097,"label":"Anthracnose","split":"train","index":564},{"x":-4.7352,"y":3.5947,"z":6.9524,"label":"Anthracnose","split":"val","index":565},{"x":-5.5953,"y":2.0129,"z":3.6062,"label":"Anthracnose","split":"train","index":566},{"x":-5.7036,"y":3.2893,"z":8.1835,"label":"Anthracnose","split":"test","index":567},{"x":-5.1554,"y":2.4253,"z":5.0072,"label":"Anthracnose","split":"train","index":568},{"x":-4.9354,"y":3.2021,"z":6.7848,"label":"Anthracnose","split":"train","index":569},{"x":16.6784,"y":5.5405,"z":8.6825,"label":"Downy_Mildew","split":"train","index":570},{"x":17.3512,"y":4.805,"z":8.3699,"label":"Downy_Mildew","split":"train","index":571},{"x":18.0084,"y":5.883,"z":9.8841,"label":"Downy_Mildew","split":"train","index":572},{"x":16.8802,"y":7.3333,"z":2.0606,"label":"Downy_Mildew","split":"train","index":573},{"x":17.3097,"y":6.0826,"z":7.73,"label":"Downy_Mildew","split":"test","index":574},{"x":16.2599,"y":6.8181,"z":1.4187,"label":"Downy_Mildew","split":"train","index":575},{"x":17.2759,"y":6.0676,"z":7.7399,"label":"Downy_Mildew","split":"train","index":576},{"x":17.7701,"y":5.2219,"z":9.0902,"label":"Downy_Mildew","split":"test","index":577},{"x":16.8896,"y":5.1221,"z":8.4774,"label":"Downy_Mildew","split":"train","index":578},{"x":13.0862,"y":1.4532,"z":-1.5175,"label":"Downy_Mildew","split":"val","index":579},{"x":18.2134,"y":6.3391,"z":10.7243,"label":"Downy_Mildew","split":"train","index":580},{"x":16.6075,"y":7.3496,"z":1.7843,"label":"Downy_Mildew","split":"test","index":581},{"x":17.2993,"y":5.4068,"z":9.0767,"label":"Downy_Mildew","split":"test","index":582},{"x":17.4068,"y":4.5816,"z":8.6868,"label":"Downy_Mildew","split":"val","index":583},{"x":17.6692,"y":5.1868,"z":9.2721,"label":"Downy_Mildew","split":"train","index":584},{"x":13.1048,"y":1.4601,"z":-1.4928,"label":"Downy_Mildew","split":"train","index":585},{"x":17.3207,"y":5.7729,"z":8.4773,"label":"Downy_Mildew","split":"train","index":586},{"x":18.0418,"y":5.4132,"z":8.1487,"label":"Downy_Mildew","split":"train","index":587},{"x":13.2373,"y":1.508,"z":-1.7757,"label":"Downy_Mildew","split":"val","index":588},{"x":17.8524,"y":5.8257,"z":9.847,"label":"Downy_Mildew","split":"train","index":589},{"x":18.2467,"y":6.3086,"z":10.7643,"label":"Downy_Mildew","split":"train","index":590},{"x":17.1815,"y":5.5827,"z":8.7381,"label":"Downy_Mildew","split":"train","index":591},{"x":17.1494,"y":5.6066,"z":8.4328,"label":"Downy_Mildew","split":"test","index":592},{"x":9.814,"y":-1.4748,"z":1.477,"label":"Downy_Mildew","split":"val","index":593},{"x":17.2044,"y":5.2419,"z":9.5162,"label":"Downy_Mildew","split":"train","index":594},{"x":18.498,"y":6.2021,"z":11.1067,"label":"Downy_Mildew","split":"val","index":595},{"x":17.3999,"y":5.4107,"z":9.3647,"label":"Downy_Mildew","split":"train","index":596},{"x":13.3276,"y":1.6057,"z":-1.3023,"label":"Downy_Mildew","split":"test","index":597},{"x":17.7336,"y":5.0643,"z":8.3821,"label":"Downy_Mildew","split":"train","index":598},{"x":13.6458,"y":1.4898,"z":-1.8581,"label":"Downy_Mildew","split":"train","index":599},{"x":17.9025,"y":5.9061,"z":8.0024,"label":"Downy_Mildew","split":"train","index":600},{"x":16.9068,"y":7.3053,"z":2.0878,"label":"Downy_Mildew","split":"train","index":601},{"x":18.1243,"y":5.8507,"z":9.0097,"label":"Downy_Mildew","split":"test","index":602},{"x":17.7726,"y":5.9668,"z":7.9486,"label":"Downy_Mildew","split":"train","index":603},{"x":13.6699,"y":1.4939,"z":-1.8835,"label":"Downy_Mildew","split":"train","index":604},{"x":17.6443,"y":3.8973,"z":8.2296,"label":"Downy_Mildew","split":"train","index":605},{"x":16.7288,"y":5.1557,"z":9.5985,"label":"Downy_Mildew","split":"train","index":606},{"x":18.5193,"y":6.1957,"z":11.1098,"label":"Downy_Mildew","split":"val","index":607},{"x":13.2859,"y":1.6032,"z":-1.3413,"label":"Downy_Mildew","split":"train","index":608},{"x":17.4532,"y":5.4092,"z":9.3234,"label":"Downy_Mildew","split":"train","index":609},{"x":18.048,"y":5.8454,"z":9.1377,"label":"Downy_Mildew","split":"train","index":610},{"x":13.7502,"y":1.5665,"z":-1.7751,"label":"Downy_Mildew","split":"train","index":611},{"x":17.6204,"y":3.9117,"z":8.2441,"label":"Downy_Mildew","split":"train","index":612},{"x":16.8006,"y":7.4108,"z":1.9844,"label":"Downy_Mildew","split":"test","index":613},{"x":18.1621,"y":5.8061,"z":10.2474,"label":"Downy_Mildew","split":"train","index":614},{"x":18.1566,"y":5.8001,"z":10.2408,"label":"Downy_Mildew","split":"train","index":615},{"x":17.7883,"y":6.0048,"z":7.9004,"label":"Downy_Mildew","split":"train","index":616},{"x":16.3041,"y":5.3058,"z":9.5321,"label":"Downy_Mildew","split":"train","index":617},{"x":16.8916,"y":7.3244,"z":2.0717,"label":"Downy_Mildew","split":"train","index":618},{"x":18.1244,"y":5.5696,"z":8.2004,"label":"Downy_Mildew","split":"train","index":619},{"x":16.5878,"y":7.4364,"z":1.7498,"label":"Downy_Mildew","split":"train","index":620},{"x":17.6298,"y":3.9058,"z":8.2445,"label":"Downy_Mildew","split":"train","index":621},{"x":16.9493,"y":4.5543,"z":8.5198,"label":"Downy_Mildew","split":"train","index":622},{"x":13.6543,"y":1.5548,"z":-1.8833,"label":"Downy_Mildew","split":"train","index":623},{"x":17.3679,"y":4.3805,"z":8.6226,"label":"Downy_Mildew","split":"val","index":624},{"x":16.1366,"y":7.0815,"z":1.623,"label":"Downy_Mildew","split":"train","index":625},{"x":17.0739,"y":5.1464,"z":8.5909,"label":"Downy_Mildew","split":"train","index":626},{"x":8.637,"y":-2.3276,"z":2.8214,"label":"Downy_Mildew","split":"train","index":627},{"x":16.5988,"y":4.8679,"z":8.8979,"label":"Downy_Mildew","split":"train","index":628},{"x":17.4983,"y":4.4143,"z":8.4849,"label":"Downy_Mildew","split":"val","index":629},{"x":17.8978,"y":5.8744,"z":12.2563,"label":"Downy_Mildew","split":"train","index":630},{"x":16.0905,"y":7.0178,"z":1.5818,"label":"Downy_Mildew","split":"train","index":631},{"x":17.6326,"y":5.1706,"z":8.0135,"label":"Downy_Mildew","split":"train","index":632},{"x":16.1763,"y":5.3612,"z":9.1404,"label":"Downy_Mildew","split":"val","index":633},{"x":18.2089,"y":6.1833,"z":9.5369,"label":"Downy_Mildew","split":"train","index":634},{"x":16.9646,"y":3.2269,"z":11.0351,"label":"Downy_Mildew","split":"train","index":635},{"x":16.2107,"y":5.3545,"z":9.0562,"label":"Downy_Mildew","split":"test","index":636},{"x":18.0853,"y":5.9756,"z":9.4314,"label":"Downy_Mildew","split":"test","index":637},{"x":16.9565,"y":3.241,"z":11.023,"label":"Downy_Mildew","split":"train","index":638},{"x":16.767,"y":7.4298,"z":1.941,"label":"Downy_Mildew","split":"train","index":639},{"x":9.8047,"y":-1.4852,"z":1.4854,"label":"Downy_Mildew","split":"test","index":640},{"x":16.9523,"y":4.5828,"z":8.4819,"label":"Downy_Mildew","split":"train","index":641},{"x":17.2617,"y":5.5692,"z":8.6056,"label":"Downy_Mildew","split":"train","index":642},{"x":18.454,"y":6.0465,"z":10.9031,"label":"Downy_Mildew","split":"train","index":643},{"x":13.4013,"y":2.0277,"z":-1.8712,"label":"Downy_Mildew","split":"train","index":644},{"x":17.0361,"y":4.9446,"z":7.8404,"label":"Downy_Mildew","split":"test","index":645},{"x":18.3948,"y":5.7661,"z":8.1467,"label":"Downy_Mildew","split":"test","index":646},{"x":8.6008,"y":-2.3117,"z":2.8531,"label":"Downy_Mildew","split":"train","index":647},{"x":18.2312,"y":6.1188,"z":9.4748,"label":"Downy_Mildew","split":"val","index":648},{"x":8.5688,"y":-2.2988,"z":2.8865,"label":"Downy_Mildew","split":"train","index":649},{"x":18.4949,"y":5.7821,"z":8.1246,"label":"Downy_Mildew","split":"train","index":650},{"x":17.4864,"y":5.7471,"z":7.9019,"label":"Downy_Mildew","split":"train","index":651},{"x":17.6485,"y":5.9939,"z":9.6525,"label":"Downy_Mildew","split":"train","index":652},{"x":17.9832,"y":5.8485,"z":9.9444,"label":"Downy_Mildew","split":"train","index":653},{"x":13.1805,"y":1.4783,"z":-1.589,"label":"Downy_Mildew","split":"train","index":654},{"x":16.5994,"y":5.4823,"z":8.7256,"label":"Downy_Mildew","split":"val","index":655},{"x":16.8124,"y":4.8573,"z":8.1182,"label":"Downy_Mildew","split":"train","index":656},{"x":9.7283,"y":-1.8085,"z":0.5654,"label":"Downy_Mildew","split":"train","index":657},{"x":13.1918,"y":1.4681,"z":-1.6929,"label":"Downy_Mildew","split":"test","index":658},{"x":16.3344,"y":5.4314,"z":8.8478,"label":"Downy_Mildew","split":"test","index":659},{"x":18.4595,"y":6.0925,"z":10.9525,"label":"Downy_Mildew","split":"train","index":660},{"x":18.1686,"y":5.5775,"z":8.2868,"label":"Downy_Mildew","split":"train","index":661},{"x":16.8418,"y":4.837,"z":8.0485,"label":"Downy_Mildew","split":"val","index":662},{"x":9.7619,"y":-1.7734,"z":0.6028,"label":"Downy_Mildew","split":"test","index":663},{"x":18.1439,"y":5.7893,"z":10.2113,"label":"Downy_Mildew","split":"test","index":664},{"x":18.4025,"y":5.833,"z":8.0868,"label":"Downy_Mildew","split":"val","index":665},{"x":16.3042,"y":5.2838,"z":9.5108,"label":"Downy_Mildew","split":"train","index":666},{"x":16.905,"y":7.311,"z":2.0865,"label":"Downy_Mildew","split":"train","index":667},{"x":18.1307,"y":5.9102,"z":9.1007,"label":"Downy_Mildew","split":"train","index":668},{"x":13.7171,"y":1.5467,"z":-1.8156,"label":"Downy_Mildew","split":"train","index":669},{"x":17.5965,"y":3.9072,"z":8.2791,"label":"Downy_Mildew","split":"train","index":670},{"x":16.8088,"y":7.4377,"z":1.9847,"label":"Downy_Mildew","split":"train","index":671},{"x":18.1249,"y":5.8126,"z":10.1244,"label":"Downy_Mildew","split":"train","index":672},{"x":18.1188,"y":5.6822,"z":8.7457,"label":"Downy_Mildew","split":"train","index":673},{"x":17.023,"y":4.6982,"z":8.7948,"label":"Downy_Mildew","split":"train","index":674},{"x":13.7286,"y":1.5138,"z":-1.8653,"label":"Downy_Mildew","split":"train","index":675},{"x":17.6274,"y":3.9554,"z":8.2084,"label":"Downy_Mildew","split":"train","index":676},{"x":16.7681,"y":5.1806,"z":9.6105,"label":"Downy_Mildew","split":"train","index":677},{"x":18.4807,"y":6.1793,"z":11.0836,"label":"Downy_Mildew","split":"train","index":678},{"x":13.0565,"y":1.4298,"z":-1.4718,"label":"Downy_Mildew","split":"test","index":679},{"x":17.9153,"y":5.5914,"z":9.4192,"label":"Downy_Mildew","split":"train","index":680},{"x":16.8106,"y":5.1893,"z":9.6887,"label":"Downy_Mildew","split":"train","index":681},{"x":18.5007,"y":6.154,"z":11.0866,"label":"Downy_Mildew","split":"val","index":682},{"x":17.7984,"y":5.8136,"z":9.2063,"label":"Downy_Mildew","split":"test","index":683},{"x":13.3295,"y":1.6248,"z":-1.2839,"label":"Downy_Mildew","split":"train","index":684},{"x":17.7015,"y":4.8395,"z":8.8024,"label":"Downy_Mildew","split":"train","index":685},{"x":13.6205,"y":1.4293,"z":-1.8688,"label":"Downy_Mildew","split":"train","index":686},{"x":17.8859,"y":5.9822,"z":7.9056,"label":"Downy_Mildew","split":"train","index":687},{"x":16.9185,"y":7.3001,"z":2.1008,"label":"Downy_Mildew","split":"train","index":688},{"x":17.8163,"y":5.2294,"z":8.0802,"label":"Downy_Mildew","split":"train","index":689},{"x":13.1832,"y":1.4947,"z":-1.7589,"label":"Downy_Mildew","split":"train","index":690},{"x":17.9289,"y":5.852,"z":9.8684,"label":"Downy_Mildew","split":"train","index":691},{"x":18.1567,"y":6.3779,"z":10.6762,"label":"Downy_Mildew","split":"val","index":692},{"x":16.9693,"y":5.2174,"z":9.0823,"label":"Downy_Mildew","split":"train","index":693},{"x":17.1139,"y":5.6195,"z":8.8733,"label":"Downy_Mildew","split":"train","index":694},{"x":16.646,"y":7.3333,"z":1.8239,"label":"Downy_Mildew","split":"train","index":695},{"x":18.1188,"y":6.387,"z":10.6067,"label":"Downy_Mildew","split":"train","index":696},{"x":16.6207,"y":7.3391,"z":1.8061,"label":"Downy_Mildew","split":"train","index":697},{"x":17.1733,"y":5.5689,"z":8.897,"label":"Downy_Mildew","split":"train","index":698},{"x":17.3046,"y":5.3234,"z":9.1822,"label":"Downy_Mildew","split":"train","index":699},{"x":17.0199,"y":5.2507,"z":9.1724,"label":"Downy_Mildew","split":"train","index":700},{"x":13.1222,"y":1.4796,"z":-1.5167,"label":"Downy_Mildew","split":"train","index":701},{"x":17.3639,"y":5.7029,"z":8.3597,"label":"Downy_Mildew","split":"train","index":702},{"x":16.2132,"y":6.8894,"z":1.4718,"label":"Downy_Mildew","split":"train","index":703},{"x":17.4169,"y":6.0253,"z":7.8058,"label":"Downy_Mildew","split":"val","index":704},{"x":17.8208,"y":5.1982,"z":9.1312,"label":"Downy_Mildew","split":"train","index":705},{"x":16.9494,"y":5.3948,"z":8.5323,"label":"Downy_Mildew","split":"test","index":706},{"x":13.0782,"y":1.4513,"z":-1.5116,"label":"Downy_Mildew","split":"val","index":707},{"x":16.7537,"y":5.5211,"z":8.6599,"label":"Downy_Mildew","split":"train","index":708},{"x":17.6921,"y":5.1056,"z":8.0531,"label":"Downy_Mildew","split":"train","index":709},{"x":17.9775,"y":5.8567,"z":9.9003,"label":"Downy_Mildew","split":"train","index":710},{"x":16.9438,"y":7.2829,"z":2.1235,"label":"Downy_Mildew","split":"train","index":711},{"x":17.391,"y":6.0164,"z":7.7981,"label":"Downy_Mildew","split":"train","index":712},{"x":18.5185,"y":6.0964,"z":10.9954,"label":"Downy_Mildew","split":"val","index":713},{"x":18.1558,"y":5.552,"z":8.2702,"label":"Downy_Mildew","split":"train","index":714},{"x":16.796,"y":4.7741,"z":8.2467,"label":"Downy_Mildew","split":"train","index":715},{"x":9.7251,"y":-1.8121,"z":0.5609,"label":"Downy_Mildew","split":"train","index":716},{"x":16.8214,"y":4.8658,"z":8.1195,"label":"Downy_Mildew","split":"train","index":717},{"x":9.7606,"y":-1.7731,"z":0.6093,"label":"Downy_Mildew","split":"test","index":718},{"x":13.1916,"y":1.4901,"z":-1.718,"label":"Downy_Mildew","split":"test","index":719},{"x":17.2964,"y":5.2402,"z":8.4869,"label":"Downy_Mildew","split":"train","index":720},{"x":17.375,"y":5.7235,"z":8.2771,"label":"Downy_Mildew","split":"train","index":721},{"x":8.5784,"y":-2.2978,"z":2.8744,"label":"Downy_Mildew","split":"train","index":722},{"x":17.1286,"y":4.9426,"z":7.8432,"label":"Downy_Mildew","split":"val","index":723},{"x":18.4307,"y":5.7816,"z":8.1231,"label":"Downy_Mildew","split":"train","index":724},{"x":17.9723,"y":6.0948,"z":9.6781,"label":"Downy_Mildew","split":"train","index":725},{"x":18.0592,"y":5.8566,"z":9.8773,"label":"Downy_Mildew","split":"train","index":726},{"x":13.3658,"y":2.0804,"z":-1.8284,"label":"Downy_Mildew","split":"val","index":727},{"x":16.338,"y":5.4589,"z":8.818,"label":"Downy_Mildew","split":"test","index":728},{"x":18.4571,"y":6.0432,"z":10.92,"label":"Downy_Mildew","split":"train","index":729},{"x":13.4147,"y":2.0089,"z":-1.8903,"label":"Downy_Mildew","split":"train","index":730},{"x":18.4201,"y":5.8122,"z":8.1024,"label":"Downy_Mildew","split":"val","index":731},{"x":17.0085,"y":4.8607,"z":7.925,"label":"Downy_Mildew","split":"train","index":732},{"x":8.6355,"y":-2.3376,"z":2.8204,"label":"Downy_Mildew","split":"train","index":733},{"x":18.1973,"y":6.1369,"z":9.5307,"label":"Downy_Mildew","split":"train","index":734},{"x":16.1441,"y":5.3224,"z":8.9797,"label":"Downy_Mildew","split":"test","index":735},{"x":18.0005,"y":5.9293,"z":9.6576,"label":"Downy_Mildew","split":"train","index":736},{"x":16.9561,"y":3.2449,"z":11.0204,"label":"Downy_Mildew","split":"train","index":737},{"x":16.5505,"y":7.4371,"z":1.6969,"label":"Downy_Mildew","split":"train","index":738},{"x":9.8211,"y":-1.4688,"z":1.4746,"label":"Downy_Mildew","split":"test","index":739},{"x":16.7856,"y":4.732,"z":8.5404,"label":"Downy_Mildew","split":"test","index":740},{"x":17.9887,"y":5.8201,"z":9.2032,"label":"Downy_Mildew","split":"train","index":741},{"x":17.4162,"y":4.2752,"z":8.5808,"label":"Downy_Mildew","split":"train","index":742},{"x":17.9174,"y":5.9033,"z":12.2704,"label":"Downy_Mildew","split":"val","index":743},{"x":16.1265,"y":7.0365,"z":1.5994,"label":"Downy_Mildew","split":"train","index":744},{"x":17.4785,"y":5.1771,"z":8.1352,"label":"Downy_Mildew","split":"test","index":745},{"x":16.1272,"y":5.3499,"z":9.0312,"label":"Downy_Mildew","split":"train","index":746},{"x":18.2388,"y":6.1819,"z":9.5221,"label":"Downy_Mildew","split":"test","index":747},{"x":16.9676,"y":3.23,"z":11.0332,"label":"Downy_Mildew","split":"train","index":748},{"x":13.6186,"y":1.652,"z":-1.907,"label":"Downy_Mildew","split":"train","index":749},{"x":17.4605,"y":4.2732,"z":8.5486,"label":"Downy_Mildew","split":"train","index":750},{"x":16.0946,"y":7.0429,"z":1.6247,"label":"Downy_Mildew","split":"test","index":751},{"x":16.8881,"y":4.9003,"z":8.0329,"label":"Downy_Mildew","split":"train","index":752},{"x":8.6483,"y":-2.3292,"z":2.8068,"label":"Downy_Mildew","split":"train","index":753},{"x":16.6113,"y":4.8346,"z":8.908,"label":"Downy_Mildew","split":"train","index":754},{"x":17.8178,"y":5.6232,"z":8.3441,"label":"Downy_Mildew","split":"train","index":755},{"x":16.5774,"y":7.4202,"z":1.7323,"label":"Downy_Mildew","split":"val","index":756},{"x":17.6351,"y":3.9436,"z":8.2444,"label":"Downy_Mildew","split":"train","index":757},{"x":17.0677,"y":4.5668,"z":8.4937,"label":"Downy_Mildew","split":"train","index":758},{"x":17.3455,"y":4.314,"z":8.6081,"label":"Downy_Mildew","split":"train","index":759},{"x":9.747,"y":-1.7895,"z":0.5861,"label":"Downy_Mildew","split":"train","index":760},{"x":17.094,"y":5.5052,"z":8.9138,"label":"Downy_Mildew","split":"train","index":761},{"x":17.9025,"y":5.8795,"z":12.2525,"label":"Downy_Mildew","split":"train","index":762},{"x":16.9359,"y":5.5163,"z":8.4681,"label":"Downy_Mildew","split":"train","index":763},{"x":18.1559,"y":5.608,"z":8.2617,"label":"Downy_Mildew","split":"train","index":764},{"x":16.7891,"y":4.6827,"z":8.4213,"label":"Downy_Mildew","split":"train","index":765},{"x":16.2167,"y":6.9253,"z":1.5132,"label":"Downy_Mildew","split":"val","index":766},{"x":16.9598,"y":5.2343,"z":9.137,"label":"Downy_Mildew","split":"train","index":767},{"x":16.5481,"y":7.2685,"z":1.6946,"label":"Downy_Mildew","split":"train","index":768},{"x":18.4649,"y":6.0972,"z":10.9744,"label":"Downy_Mildew","split":"train","index":769},{"x":13.4263,"y":1.9935,"z":-1.8964,"label":"Downy_Mildew","split":"train","index":770},{"x":16.8619,"y":4.8432,"z":8.0449,"label":"Downy_Mildew","split":"val","index":771},{"x":16.7371,"y":7.2922,"z":1.9169,"label":"Downy_Mildew","split":"train","index":772},{"x":18.4711,"y":5.796,"z":8.1127,"label":"Downy_Mildew","split":"train","index":773},{"x":17.0344,"y":5.1715,"z":7.9909,"label":"Downy_Mildew","split":"train","index":774},{"x":17.9768,"y":6.1578,"z":9.691,"label":"Downy_Mildew","split":"test","index":775},{"x":13.4098,"y":2.0598,"z":-1.8545,"label":"Downy_Mildew","split":"val","index":776},{"x":17.0291,"y":4.8904,"z":7.8822,"label":"Downy_Mildew","split":"val","index":777},{"x":18.4273,"y":5.7888,"z":8.1422,"label":"Downy_Mildew","split":"train","index":778},{"x":8.6401,"y":-2.3183,"z":2.8211,"label":"Downy_Mildew","split":"test","index":779},{"x":17.8939,"y":5.8691,"z":12.2554,"label":"Downy_Mildew","split":"val","index":780},{"x":17.8713,"y":5.8101,"z":9.9273,"label":"Downy_Mildew","split":"train","index":781},{"x":13.3923,"y":2.0569,"z":-1.8634,"label":"Downy_Mildew","split":"val","index":782},{"x":16.1384,"y":7.0547,"z":1.6138,"label":"Downy_Mildew","split":"train","index":783},{"x":17.9093,"y":5.8865,"z":12.2472,"label":"Downy_Mildew","split":"test","index":784},{"x":17.5873,"y":5.1987,"z":8.0425,"label":"Downy_Mildew","split":"val","index":785},{"x":16.2322,"y":5.316,"z":9.2197,"label":"Downy_Mildew","split":"val","index":786},{"x":18.2082,"y":6.0883,"z":9.5139,"label":"Downy_Mildew","split":"train","index":787},{"x":16.2198,"y":5.3576,"z":9.1558,"label":"Downy_Mildew","split":"train","index":788},{"x":16.958,"y":3.2372,"z":11.0256,"label":"Downy_Mildew","split":"train","index":789},{"x":17.3947,"y":4.306,"z":8.6389,"label":"Downy_Mildew","split":"train","index":790},{"x":18.1027,"y":5.5033,"z":8.2226,"label":"Downy_Mildew","split":"train","index":791},{"x":16.8316,"y":4.8105,"z":8.6191,"label":"Downy_Mildew","split":"train","index":792},{"x":9.8311,"y":-1.4611,"z":1.4608,"label":"Downy_Mildew","split":"val","index":793},{"x":17.7005,"y":5.1964,"z":8.0325,"label":"Downy_Mildew","split":"train","index":794},{"x":16.9575,"y":3.234,"z":11.0284,"label":"Downy_Mildew","split":"train","index":795},{"x":18.1783,"y":5.5882,"z":8.3238,"label":"Downy_Mildew","split":"train","index":796},{"x":13.7532,"y":1.5999,"z":-1.7789,"label":"Downy_Mildew","split":"test","index":797},{"x":17.5596,"y":3.9629,"z":8.317,"label":"Downy_Mildew","split":"test","index":798},{"x":13.5924,"y":1.6317,"z":-1.9634,"label":"Downy_Mildew","split":"val","index":799},{"x":17.2742,"y":4.4447,"z":8.7801,"label":"Downy_Mildew","split":"train","index":800},{"x":18.1779,"y":5.8238,"z":10.2868,"label":"Downy_Mildew","split":"train","index":801},{"x":18.1783,"y":6.145,"z":9.6587,"label":"Downy_Mildew","split":"train","index":802},{"x":16.3715,"y":5.0191,"z":8.9475,"label":"Downy_Mildew","split":"val","index":803},{"x":16.3481,"y":5.2884,"z":9.565,"label":"Downy_Mildew","split":"train","index":804},{"x":16.5539,"y":7.4242,"z":1.7329,"label":"Downy_Mildew","split":"train","index":805},{"x":18.1232,"y":5.8298,"z":10.1634,"label":"Downy_Mildew","split":"train","index":806},{"x":16.2718,"y":5.3011,"z":9.2541,"label":"Downy_Mildew","split":"train","index":807},{"x":17.4957,"y":5.4697,"z":9.4122,"label":"Downy_Mildew","split":"val","index":808},{"x":16.5418,"y":4.8541,"z":8.9445,"label":"Downy_Mildew","split":"train","index":809},{"x":17.1135,"y":4.4955,"z":8.5728,"label":"Downy_Mildew","split":"test","index":810},{"x":13.3778,"y":1.6383,"z":-1.3072,"label":"Downy_Mildew","split":"train","index":811},{"x":16.2869,"y":5.2934,"z":9.4962,"label":"Downy_Mildew","split":"train","index":812},{"x":16.6224,"y":7.4359,"z":1.7827,"label":"Downy_Mildew","split":"train","index":813},{"x":16.6396,"y":4.7569,"z":8.5927,"label":"Downy_Mildew","split":"train","index":814},{"x":17.2826,"y":4.4222,"z":8.7504,"label":"Downy_Mildew","split":"train","index":815},{"x":16.8718,"y":5.1895,"z":9.5322,"label":"Downy_Mildew","split":"train","index":816},{"x":13.3491,"y":1.6344,"z":-1.2868,"label":"Downy_Mildew","split":"test","index":817},{"x":18.4515,"y":6.1023,"z":10.9773,"label":"Downy_Mildew","split":"val","index":818},{"x":17.4388,"y":4.4302,"z":8.6337,"label":"Downy_Mildew","split":"val","index":819},{"x":17.844,"y":5.9396,"z":7.8804,"label":"Downy_Mildew","split":"test","index":820},{"x":13.5868,"y":1.5204,"z":-1.9347,"label":"Downy_Mildew","split":"test","index":821},{"x":18.1518,"y":5.7299,"z":8.8865,"label":"Downy_Mildew","split":"train","index":822},{"x":13.5039,"y":1.4507,"z":-1.9804,"label":"Downy_Mildew","split":"train","index":823},{"x":17.8349,"y":5.9864,"z":7.9215,"label":"Downy_Mildew","split":"train","index":824},{"x":18.4954,"y":6.2105,"z":11.1103,"label":"Downy_Mildew","split":"test","index":825},{"x":16.6216,"y":5.2564,"z":9.6523,"label":"Downy_Mildew","split":"train","index":826},{"x":17.8608,"y":5.5446,"z":9.4231,"label":"Downy_Mildew","split":"val","index":827},{"x":13.0993,"y":1.4678,"z":-1.4835,"label":"Downy_Mildew","split":"train","index":828},{"x":18.1332,"y":6.3793,"z":10.6265,"label":"Downy_Mildew","split":"train","index":829},{"x":17.6946,"y":4.7997,"z":8.5226,"label":"Downy_Mildew","split":"train","index":830},{"x":17.3955,"y":5.4329,"z":8.9249,"label":"Downy_Mildew","split":"train","index":831},{"x":16.8041,"y":7.3974,"z":1.984,"label":"Downy_Mildew","split":"train","index":832},{"x":16.305,"y":6.9565,"z":1.55,"label":"Downy_Mildew","split":"test","index":833},{"x":13.2237,"y":1.4968,"z":-1.6655,"label":"Downy_Mildew","split":"train","index":834},{"x":17.3975,"y":5.8497,"z":8.1453,"label":"Downy_Mildew","split":"test","index":835},{"x":13.2235,"y":1.487,"z":-1.7112,"label":"Downy_Mildew","split":"test","index":836},{"x":16.3061,"y":5.3177,"z":9.3972,"label":"Downy_Mildew","split":"train","index":837},{"x":18.1413,"y":6.3703,"z":10.6651,"label":"Downy_Mildew","split":"train","index":838},{"x":9.8184,"y":-1.4704,"z":1.4832,"label":"Downy_Mildew","split":"train","index":839},{"x":17.0,"y":5.4479,"z":8.4128,"label":"Downy_Mildew","split":"val","index":840},{"x":17.3186,"y":5.4697,"z":8.8806,"label":"Downy_Mildew","split":"train","index":841},{"x":16.3032,"y":5.3165,"z":9.423,"label":"Downy_Mildew","split":"train","index":842},{"x":17.7481,"y":5.1496,"z":9.1506,"label":"Downy_Mildew","split":"train","index":843},{"x":17.4569,"y":5.0464,"z":7.9894,"label":"Downy_Mildew","split":"train","index":844},{"x":17.0108,"y":5.3538,"z":8.4147,"label":"Downy_Mildew","split":"train","index":845},{"x":9.8016,"y":-1.485,"z":1.4724,"label":"Downy_Mildew","split":"val","index":846},{"x":16.8811,"y":7.3305,"z":2.0636,"label":"Downy_Mildew","split":"val","index":847},{"x":17.2859,"y":6.0721,"z":7.7493,"label":"Downy_Mildew","split":"train","index":848},{"x":18.0522,"y":6.0326,"z":9.511,"label":"Downy_Mildew","split":"train","index":849},{"x":17.7418,"y":4.9901,"z":8.374,"label":"Downy_Mildew","split":"test","index":850},{"x":16.2257,"y":6.8189,"z":1.4115,"label":"Downy_Mildew","split":"train","index":851},{"x":17.2688,"y":6.0701,"z":7.7229,"label":"Downy_Mildew","split":"train","index":852},{"x":17.756,"y":5.1734,"z":9.138,"label":"Downy_Mildew","split":"val","index":853},{"x":16.9578,"y":5.4909,"z":8.4881,"label":"Downy_Mildew","split":"train","index":854},{"x":13.6588,"y":1.6545,"z":-1.8681,"label":"Downy_Mildew","split":"train","index":855},{"x":17.428,"y":4.3035,"z":8.6209,"label":"Downy_Mildew","split":"val","index":856},{"x":18.1005,"y":5.8211,"z":10.1046,"label":"Downy_Mildew","split":"test","index":857},{"x":18.0991,"y":6.0177,"z":9.635,"label":"Downy_Mildew","split":"train","index":858},{"x":16.475,"y":4.8268,"z":8.8059,"label":"Downy_Mildew","split":"train","index":859},{"x":16.9577,"y":3.234,"z":11.0276,"label":"Downy_Mildew","split":"train","index":860},{"x":18.1775,"y":5.4904,"z":8.2282,"label":"Downy_Mildew","split":"test","index":861},{"x":13.681,"y":1.5422,"z":-1.7849,"label":"Downy_Mildew","split":"train","index":862},{"x":17.5999,"y":3.898,"z":8.2492,"label":"Downy_Mildew","split":"train","index":863},{"x":16.2388,"y":5.3245,"z":9.1177,"label":"Downy_Mildew","split":"train","index":864},{"x":16.9581,"y":3.234,"z":11.0281,"label":"Downy_Mildew","split":"train","index":865},{"x":17.3438,"y":4.2981,"z":8.7669,"label":"Downy_Mildew","split":"val","index":866},{"x":18.1985,"y":5.5706,"z":8.3647,"label":"Downy_Mildew","split":"val","index":867},{"x":16.868,"y":4.665,"z":8.8769,"label":"Downy_Mildew","split":"train","index":868},{"x":16.0992,"y":7.0619,"z":1.6251,"label":"Downy_Mildew","split":"train","index":869},{"x":17.6072,"y":5.3055,"z":8.073,"label":"Downy_Mildew","split":"train","index":870},{"x":16.1273,"y":7.0155,"z":1.5715,"label":"Downy_Mildew","split":"train","index":871},{"x":17.9106,"y":5.8872,"z":12.2436,"label":"Downy_Mildew","split":"train","index":872},{"x":17.7429,"y":5.1633,"z":8.1377,"label":"Downy_Mildew","split":"train","index":873},{"x":16.2571,"y":5.4061,"z":9.1248,"label":"Downy_Mildew","split":"train","index":874},{"x":18.1239,"y":6.0818,"z":9.6223,"label":"Downy_Mildew","split":"val","index":875},{"x":9.7409,"y":-1.7945,"z":0.5864,"label":"Downy_Mildew","split":"test","index":876},{"x":17.3685,"y":5.6791,"z":8.8103,"label":"Downy_Mildew","split":"val","index":877},{"x":16.9968,"y":4.9159,"z":7.883,"label":"Downy_Mildew","split":"train","index":878},{"x":8.6264,"y":-2.316,"z":2.8303,"label":"Downy_Mildew","split":"train","index":879},{"x":17.9169,"y":5.8901,"z":12.2264,"label":"Downy_Mildew","split":"train","index":880},{"x":17.6271,"y":5.544,"z":9.7263,"label":"Downy_Mildew","split":"train","index":881},{"x":13.4094,"y":2.0366,"z":-1.8875,"label":"Downy_Mildew","split":"train","index":882},{"x":18.4583,"y":6.056,"z":10.923,"label":"Downy_Mildew","split":"val","index":883},{"x":13.4385,"y":2.0146,"z":-1.8958,"label":"Downy_Mildew","split":"test","index":884},{"x":17.2767,"y":6.0859,"z":7.7444,"label":"Downy_Mildew","split":"test","index":885},{"x":16.5944,"y":7.3782,"z":1.7683,"label":"Downy_Mildew","split":"val","index":886},{"x":16.903,"y":5.1163,"z":9.2217,"label":"Downy_Mildew","split":"train","index":887},{"x":18.4677,"y":5.8209,"z":8.1051,"label":"Downy_Mildew","split":"val","index":888},{"x":18.1471,"y":6.1336,"z":9.6175,"label":"Downy_Mildew","split":"train","index":889},{"x":16.9592,"y":5.6057,"z":8.5472,"label":"Downy_Mildew","split":"train","index":890},{"x":16.768,"y":4.7743,"z":8.2806,"label":"Downy_Mildew","split":"train","index":891},{"x":16.2625,"y":6.8225,"z":1.4212,"label":"Downy_Mildew","split":"test","index":892},{"x":17.2965,"y":5.3882,"z":9.1287,"label":"Downy_Mildew","split":"train","index":893},{"x":16.7641,"y":7.3781,"z":1.945,"label":"Downy_Mildew","split":"train","index":894},{"x":17.2819,"y":4.2734,"z":8.5515,"label":"Downy_Mildew","split":"train","index":895},{"x":9.7484,"y":-1.7881,"z":0.587,"label":"Downy_Mildew","split":"train","index":896},{"x":17.1814,"y":5.543,"z":8.8851,"label":"Downy_Mildew","split":"train","index":897},{"x":17.9073,"y":5.8843,"z":12.2475,"label":"Downy_Mildew","split":"train","index":898},{"x":16.8865,"y":5.5758,"z":8.5059,"label":"Downy_Mildew","split":"train","index":899},{"x":17.3119,"y":5.8849,"z":9.6154,"label":"Downy_Mildew","split":"train","index":900},{"x":17.7407,"y":4.89,"z":8.4407,"label":"Downy_Mildew","split":"train","index":901},{"x":16.2687,"y":6.7901,"z":1.3995,"label":"Downy_Mildew","split":"test","index":902},{"x":17.2801,"y":6.0688,"z":7.7323,"label":"Downy_Mildew","split":"train","index":903},{"x":17.7914,"y":5.1144,"z":9.1833,"label":"Downy_Mildew","split":"val","index":904},{"x":17.3075,"y":5.3525,"z":8.5068,"label":"Downy_Mildew","split":"val","index":905},{"x":16.9681,"y":5.0307,"z":9.2163,"label":"Downy_Mildew","split":"train","index":906},{"x":17.7552,"y":5.1839,"z":8.0423,"label":"Downy_Mildew","split":"test","index":907},{"x":17.0247,"y":5.4246,"z":8.3876,"label":"Downy_Mildew","split":"train","index":908},{"x":9.8244,"y":-1.4583,"z":1.4986,"label":"Downy_Mildew","split":"test","index":909},{"x":16.8981,"y":7.3166,"z":2.0769,"label":"Downy_Mildew","split":"train","index":910},{"x":17.2503,"y":6.074,"z":7.6907,"label":"Downy_Mildew","split":"train","index":911},{"x":13.2249,"y":1.5025,"z":-1.7558,"label":"Downy_Mildew","split":"train","index":912},{"x":16.8674,"y":5.3489,"z":9.0699,"label":"Downy_Mildew","split":"train","index":913},{"x":18.1194,"y":6.3814,"z":10.6229,"label":"Downy_Mildew","split":"train","index":914},{"x":9.8199,"y":-1.4702,"z":1.4734,"label":"Downy_Mildew","split":"val","index":915},{"x":17.7598,"y":5.4728,"z":8.7754,"label":"Downy_Mildew","split":"train","index":916},{"x":17.1981,"y":5.4011,"z":8.3287,"label":"Downy_Mildew","split":"train","index":917},{"x":16.2886,"y":5.2815,"z":9.5127,"label":"Downy_Mildew","split":"test","index":918},{"x":18.0731,"y":6.3629,"z":10.5615,"label":"Downy_Mildew","split":"train","index":919},{"x":17.5662,"y":5.4275,"z":8.904,"label":"Downy_Mildew","split":"train","index":920},{"x":17.6441,"y":4.63,"z":8.5825,"label":"Downy_Mildew","split":"train","index":921},{"x":16.2767,"y":6.8383,"z":1.4382,"label":"Downy_Mildew","split":"test","index":922},{"x":13.0975,"y":1.4522,"z":-1.4797,"label":"Downy_Mildew","split":"train","index":923},{"x":17.3423,"y":5.8313,"z":8.2442,"label":"Downy_Mildew","split":"train","index":924},{"x":18.0502,"y":5.8643,"z":9.1981,"label":"Downy_Mildew","split":"test","index":925},{"x":13.6231,"y":1.5308,"z":-1.9496,"label":"Downy_Mildew","split":"val","index":926},{"x":17.7598,"y":6.0017,"z":7.9048,"label":"Downy_Mildew","split":"train","index":927},{"x":18.4272,"y":6.1799,"z":11.0325,"label":"Downy_Mildew","split":"train","index":928},{"x":17.1521,"y":5.298,"z":9.5329,"label":"Downy_Mildew","split":"train","index":929},{"x":17.8016,"y":5.5714,"z":9.4098,"label":"Downy_Mildew","split":"train","index":930},{"x":13.1113,"y":1.4831,"z":-1.4877,"label":"Downy_Mildew","split":"train","index":931},{"x":16.5526,"y":4.7601,"z":8.6934,"label":"Downy_Mildew","split":"test","index":932},{"x":17.3719,"y":4.3437,"z":8.7167,"label":"Downy_Mildew","split":"train","index":933},{"x":16.7256,"y":5.1937,"z":9.5964,"label":"Downy_Mildew","split":"train","index":934},{"x":13.3585,"y":1.6392,"z":-1.247,"label":"Downy_Mildew","split":"train","index":935},{"x":18.4769,"y":6.0482,"z":10.8965,"label":"Downy_Mildew","split":"val","index":936},{"x":17.8023,"y":5.7798,"z":8.9582,"label":"Downy_Mildew","split":"train","index":937},{"x":17.862,"y":5.9519,"z":7.9392,"label":"Downy_Mildew","split":"train","index":938},{"x":13.6192,"y":1.507,"z":-1.9087,"label":"Downy_Mildew","split":"test","index":939},{"x":16.5377,"y":4.8696,"z":8.8916,"label":"Downy_Mildew","split":"train","index":940},{"x":17.23,"y":4.465,"z":8.4781,"label":"Downy_Mildew","split":"train","index":941},{"x":13.4101,"y":1.6373,"z":-1.3057,"label":"Downy_Mildew","split":"train","index":942},{"x":16.278,"y":5.302,"z":9.5149,"label":"Downy_Mildew","split":"train","index":943},{"x":16.8427,"y":7.3137,"z":2.0236,"label":"Downy_Mildew","split":"train","index":944},{"x":16.3589,"y":5.2783,"z":9.5932,"label":"Downy_Mildew","split":"train","index":945},{"x":16.6821,"y":7.4513,"z":1.8442,"label":"Downy_Mildew","split":"val","index":946},{"x":18.168,"y":5.7938,"z":10.2686,"label":"Downy_Mildew","split":"val","index":947},{"x":16.3481,"y":5.2515,"z":9.3723,"label":"Downy_Mildew","split":"train","index":948},{"x":17.2884,"y":5.3403,"z":9.4484,"label":"Downy_Mildew","split":"train","index":949},{"x":4.8639,"y":-3.9617,"z":7.9571,"label":"Healthy","split":"train","index":950},{"x":5.5712,"y":-3.8721,"z":7.2609,"label":"Healthy","split":"train","index":951},{"x":4.0799,"y":-4.1242,"z":8.5193,"label":"Healthy","split":"train","index":952},{"x":4.1537,"y":-4.27,"z":7.8263,"label":"Healthy","split":"train","index":953},{"x":5.2783,"y":-3.9003,"z":7.0972,"label":"Healthy","split":"train","index":954},{"x":4.0992,"y":-3.996,"z":8.21,"label":"Healthy","split":"train","index":955},{"x":5.4943,"y":-3.8039,"z":7.058,"label":"Healthy","split":"train","index":956},{"x":4.036,"y":-3.9195,"z":7.7885,"label":"Healthy","split":"train","index":957},{"x":4.4082,"y":-4.3847,"z":9.0073,"label":"Healthy","split":"test","index":958},{"x":4.713,"y":-3.904,"z":8.1488,"label":"Healthy","split":"train","index":959},{"x":3.9734,"y":-3.8648,"z":7.9119,"label":"Healthy","split":"train","index":960},{"x":5.4708,"y":-4.7881,"z":7.9627,"label":"Healthy","split":"train","index":961},{"x":5.5205,"y":-3.7724,"z":6.984,"label":"Healthy","split":"train","index":962},{"x":4.0778,"y":-4.2467,"z":7.8768,"label":"Healthy","split":"val","index":963},{"x":5.25,"y":-4.6864,"z":7.5738,"label":"Healthy","split":"train","index":964},{"x":5.1818,"y":-4.5373,"z":7.6028,"label":"Healthy","split":"test","index":965},{"x":5.6203,"y":-3.9134,"z":7.0888,"label":"Healthy","split":"val","index":966},{"x":3.8803,"y":-4.0068,"z":8.4669,"label":"Healthy","split":"train","index":967},{"x":5.3479,"y":-4.3439,"z":7.2075,"label":"Healthy","split":"test","index":968},{"x":3.8953,"y":-4.1088,"z":8.9511,"label":"Healthy","split":"test","index":969},{"x":4.2168,"y":-3.97,"z":7.7929,"label":"Healthy","split":"val","index":970},{"x":5.3394,"y":-4.6358,"z":7.5579,"label":"Healthy","split":"train","index":971},{"x":5.0798,"y":-3.9178,"z":7.4274,"label":"Healthy","split":"train","index":972},{"x":3.8674,"y":-4.092,"z":8.9704,"label":"Healthy","split":"val","index":973},{"x":5.3096,"y":-4.5491,"z":7.3938,"label":"Healthy","split":"train","index":974},{"x":5.5964,"y":-4.7081,"z":7.5906,"label":"Healthy","split":"train","index":975},{"x":4.6798,"y":-4.5428,"z":8.7469,"label":"Healthy","split":"val","index":976},{"x":4.0336,"y":-4.2277,"z":8.4787,"label":"Healthy","split":"train","index":977},{"x":3.9986,"y":-3.9757,"z":7.7435,"label":"Healthy","split":"train","index":978},{"x":5.4167,"y":-3.8552,"z":7.0397,"label":"Healthy","split":"train","index":979},{"x":5.7689,"y":-4.6147,"z":7.3111,"label":"Healthy","split":"train","index":980},{"x":3.9976,"y":-3.9638,"z":7.8479,"label":"Healthy","split":"train","index":981},{"x":5.6447,"y":-3.8135,"z":7.5275,"label":"Healthy","split":"val","index":982},{"x":5.8985,"y":-5.1378,"z":7.4351,"label":"Healthy","split":"val","index":983},{"x":3.999,"y":-3.9366,"z":8.0968,"label":"Healthy","split":"train","index":984},{"x":5.6069,"y":-3.7967,"z":7.445,"label":"Healthy","split":"train","index":985},{"x":4.2893,"y":-4.0758,"z":9.0,"label":"Healthy","split":"train","index":986},{"x":3.8142,"y":-4.1163,"z":9.0035,"label":"Healthy","split":"train","index":987},{"x":5.5744,"y":-3.9737,"z":7.783,"label":"Healthy","split":"train","index":988},{"x":5.5463,"y":-4.0715,"z":7.7742,"label":"Healthy","split":"train","index":989},{"x":4.0855,"y":-3.9613,"z":7.7299,"label":"Healthy","split":"val","index":990},{"x":5.5742,"y":-3.8096,"z":7.3746,"label":"Healthy","split":"train","index":991},{"x":5.3423,"y":-3.9116,"z":7.9436,"label":"Healthy","split":"val","index":992},{"x":3.8968,"y":-4.0834,"z":8.5261,"label":"Healthy","split":"train","index":993},{"x":4.323,"y":-4.5808,"z":8.4922,"label":"Healthy","split":"val","index":994},{"x":3.8875,"y":-4.1133,"z":8.2784,"label":"Healthy","split":"train","index":995},{"x":4.0409,"y":-4.279,"z":7.9523,"label":"Healthy","split":"train","index":996},{"x":5.2354,"y":-4.5876,"z":7.5201,"label":"Healthy","split":"val","index":997},{"x":5.6393,"y":-4.0031,"z":6.9828,"label":"Healthy","split":"train","index":998},{"x":3.8048,"y":-4.0787,"z":8.9477,"label":"Healthy","split":"train","index":999},{"x":5.3677,"y":-4.5245,"z":7.3413,"label":"Healthy","split":"val","index":1000},{"x":5.8645,"y":-5.0851,"z":7.4023,"label":"Healthy","split":"train","index":1001},{"x":3.8807,"y":-4.1232,"z":8.968,"label":"Healthy","split":"train","index":1002},{"x":4.1106,"y":-3.9657,"z":7.9011,"label":"Healthy","split":"train","index":1003},{"x":5.4547,"y":-4.6859,"z":8.0866,"label":"Healthy","split":"test","index":1004},{"x":5.3291,"y":-4.652,"z":7.4717,"label":"Healthy","split":"train","index":1005},{"x":4.8779,"y":-4.3522,"z":7.7939,"label":"Healthy","split":"train","index":1006},{"x":5.605,"y":-4.4888,"z":7.2477,"label":"Healthy","split":"train","index":1007},{"x":4.2498,"y":-4.0143,"z":8.2029,"label":"Healthy","split":"test","index":1008},{"x":3.9728,"y":-3.9907,"z":8.5234,"label":"Healthy","split":"test","index":1009},{"x":5.5307,"y":-4.7731,"z":7.8002,"label":"Healthy","split":"val","index":1010},{"x":5.4402,"y":-3.9207,"z":7.1788,"label":"Healthy","split":"train","index":1011},{"x":4.0825,"y":-4.2736,"z":8.4794,"label":"Healthy","split":"train","index":1012},{"x":4.4698,"y":-4.14,"z":7.8134,"label":"Healthy","split":"train","index":1013},{"x":4.7232,"y":-3.8763,"z":8.2575,"label":"Healthy","split":"test","index":1014},{"x":4.9695,"y":-3.9125,"z":7.5124,"label":"Healthy","split":"test","index":1015},{"x":3.927,"y":-3.9501,"z":8.3357,"label":"Healthy","split":"train","index":1016},{"x":4.1118,"y":-4.3961,"z":7.982,"label":"Healthy","split":"val","index":1017},{"x":5.2852,"y":-3.9913,"z":7.192,"label":"Healthy","split":"val","index":1018},{"x":4.2525,"y":-4.3972,"z":8.7612,"label":"Healthy","split":"train","index":1019},{"x":5.106,"y":-4.0115,"z":7.5836,"label":"Healthy","split":"train","index":1020},{"x":5.0019,"y":-3.9641,"z":7.6321,"label":"Healthy","split":"train","index":1021},{"x":4.1746,"y":-4.1457,"z":8.5277,"label":"Healthy","split":"test","index":1022},{"x":5.0343,"y":-3.9248,"z":7.1239,"label":"Healthy","split":"train","index":1023},{"x":3.9709,"y":-4.2601,"z":8.2304,"label":"Healthy","split":"train","index":1024},{"x":5.2914,"y":-4.6928,"z":7.5609,"label":"Healthy","split":"train","index":1025},{"x":4.0872,"y":-4.353,"z":7.9814,"label":"Healthy","split":"train","index":1026},{"x":3.9806,"y":-3.9137,"z":7.8154,"label":"Healthy","split":"train","index":1027},{"x":5.4126,"y":-4.0312,"z":7.7462,"label":"Healthy","split":"train","index":1028},{"x":4.4184,"y":-4.2879,"z":7.9186,"label":"Healthy","split":"train","index":1029},{"x":3.9556,"y":-3.9501,"z":8.4149,"label":"Healthy","split":"train","index":1030},{"x":5.2742,"y":-4.1738,"z":7.2377,"label":"Healthy","split":"train","index":1031},{"x":4.1619,"y":-3.9448,"z":8.8159,"label":"Healthy","split":"train","index":1032},{"x":3.8093,"y":-4.082,"z":8.8907,"label":"Healthy","split":"train","index":1033},{"x":5.5905,"y":-4.028,"z":8.1492,"label":"Healthy","split":"train","index":1034},{"x":5.4766,"y":-3.7477,"z":7.0132,"label":"Healthy","split":"val","index":1035},{"x":5.6945,"y":-3.9364,"z":6.8959,"label":"Healthy","split":"train","index":1036},{"x":5.7484,"y":-4.8753,"z":7.3098,"label":"Healthy","split":"train","index":1037},{"x":4.0294,"y":-3.931,"z":8.5475,"label":"Healthy","split":"train","index":1038},{"x":5.514,"y":-3.9605,"z":7.8855,"label":"Healthy","split":"test","index":1039},{"x":3.851,"y":-4.1225,"z":8.385,"label":"Healthy","split":"train","index":1040},{"x":5.6001,"y":-3.8293,"z":7.1922,"label":"Healthy","split":"train","index":1041},{"x":4.5572,"y":-4.2817,"z":7.9305,"label":"Healthy","split":"train","index":1042},{"x":5.6574,"y":-4.6624,"z":7.365,"label":"Healthy","split":"test","index":1043},{"x":4.81,"y":-4.5263,"z":7.8086,"label":"Healthy","split":"train","index":1044},{"x":4.3611,"y":-4.469,"z":8.1589,"label":"Healthy","split":"train","index":1045},{"x":4.4277,"y":-4.6257,"z":8.616,"label":"Healthy","split":"train","index":1046},{"x":4.825,"y":-4.2316,"z":7.7358,"label":"Healthy","split":"train","index":1047},{"x":4.0586,"y":-4.4657,"z":8.2118,"label":"Healthy","split":"train","index":1048},{"x":4.2992,"y":-4.0982,"z":8.2745,"label":"Healthy","split":"test","index":1049},{"x":5.0237,"y":-4.3523,"z":8.5826,"label":"Healthy","split":"train","index":1050},{"x":5.555,"y":-3.9932,"z":8.1564,"label":"Healthy","split":"train","index":1051},{"x":4.0604,"y":-4.4207,"z":8.323,"label":"Healthy","split":"train","index":1052},{"x":5.5571,"y":-4.1227,"z":8.3116,"label":"Healthy","split":"train","index":1053},{"x":4.4782,"y":-4.3898,"z":8.8816,"label":"Healthy","split":"train","index":1054},{"x":5.3749,"y":-4.4826,"z":7.3757,"label":"Healthy","split":"test","index":1055},{"x":5.8774,"y":-5.1251,"z":7.4235,"label":"Healthy","split":"train","index":1056},{"x":4.2503,"y":-4.0297,"z":8.558,"label":"Healthy","split":"train","index":1057},{"x":4.0876,"y":-4.2978,"z":8.5966,"label":"Healthy","split":"test","index":1058},{"x":4.1867,"y":-4.067,"z":9.001,"label":"Healthy","split":"val","index":1059},{"x":5.4413,"y":-4.4547,"z":8.4275,"label":"Healthy","split":"train","index":1060},{"x":5.5104,"y":-4.3022,"z":8.2792,"label":"Healthy","split":"train","index":1061},{"x":3.9889,"y":-3.9615,"z":8.7039,"label":"Healthy","split":"train","index":1062},{"x":5.5609,"y":-4.4883,"z":8.3327,"label":"Healthy","split":"train","index":1063},{"x":5.0556,"y":-4.6401,"z":8.4632,"label":"Healthy","split":"train","index":1064},{"x":4.329,"y":-4.4425,"z":8.7463,"label":"Healthy","split":"train","index":1065},{"x":5.4158,"y":-4.6348,"z":8.2707,"label":"Healthy","split":"train","index":1066},{"x":4.504,"y":-4.0548,"z":8.149,"label":"Healthy","split":"val","index":1067},{"x":5.3175,"y":-4.6361,"z":8.4448,"label":"Healthy","split":"train","index":1068},{"x":5.9095,"y":-5.1698,"z":7.4471,"label":"Healthy","split":"val","index":1069},{"x":5.6046,"y":-4.6511,"z":8.0797,"label":"Healthy","split":"test","index":1070},{"x":4.0572,"y":-3.9978,"z":8.2126,"label":"Healthy","split":"val","index":1071},{"x":5.5269,"y":-4.1425,"z":7.7327,"label":"Healthy","split":"train","index":1072},{"x":5.4578,"y":-4.05,"z":7.8513,"label":"Healthy","split":"train","index":1073},{"x":3.8671,"y":-4.1338,"z":9.0251,"label":"Healthy","split":"val","index":1074},{"x":5.911,"y":-5.1659,"z":7.4513,"label":"Healthy","split":"train","index":1075},{"x":4.3328,"y":-4.2789,"z":8.3567,"label":"Healthy","split":"train","index":1076},{"x":5.3952,"y":-4.597,"z":8.4447,"label":"Healthy","split":"train","index":1077},{"x":4.0209,"y":-3.9078,"z":7.8491,"label":"Healthy","split":"val","index":1078},{"x":5.5149,"y":-4.7355,"z":7.4373,"label":"Healthy","split":"train","index":1079},{"x":4.4458,"y":-4.261,"z":8.9177,"label":"Healthy","split":"train","index":1080},{"x":4.1353,"y":-4.3219,"z":8.9789,"label":"Healthy","split":"train","index":1081},{"x":4.2198,"y":-3.9628,"z":8.4558,"label":"Healthy","split":"test","index":1082},{"x":5.2756,"y":-4.7586,"z":8.2166,"label":"Healthy","split":"val","index":1083},{"x":5.3987,"y":-4.611,"z":8.3832,"label":"Healthy","split":"train","index":1084},{"x":5.3772,"y":-4.6192,"z":8.4528,"label":"Healthy","split":"test","index":1085},{"x":5.5689,"y":-3.7068,"z":6.9285,"label":"Healthy","split":"train","index":1086},{"x":5.3559,"y":-4.5838,"z":8.4687,"label":"Healthy","split":"test","index":1087},{"x":4.6019,"y":-4.2878,"z":7.8797,"label":"Healthy","split":"train","index":1088},{"x":4.1662,"y":-4.4118,"z":8.803,"label":"Healthy","split":"train","index":1089},{"x":4.8506,"y":-3.9773,"z":7.9492,"label":"Healthy","split":"test","index":1090},{"x":4.6374,"y":-4.6054,"z":8.5711,"label":"Healthy","split":"train","index":1091},{"x":4.1918,"y":-4.04,"z":8.675,"label":"Healthy","split":"test","index":1092},{"x":4.933,"y":-3.9722,"z":7.8523,"label":"Healthy","split":"train","index":1093},{"x":4.3649,"y":-4.4543,"z":8.9656,"label":"Healthy","split":"train","index":1094},{"x":4.7859,"y":-4.2513,"z":8.8076,"label":"Healthy","split":"train","index":1095},{"x":5.2604,"y":-4.602,"z":8.4395,"label":"Healthy","split":"train","index":1096},{"x":4.2639,"y":-4.3577,"z":8.8023,"label":"Healthy","split":"train","index":1097},{"x":4.0224,"y":-4.2901,"z":8.2391,"label":"Healthy","split":"val","index":1098},{"x":5.1257,"y":-4.502,"z":8.116,"label":"Healthy","split":"test","index":1099},{"x":5.2812,"y":-4.4485,"z":7.5663,"label":"Healthy","split":"train","index":1100},{"x":4.5611,"y":-4.6048,"z":8.6497,"label":"Healthy","split":"train","index":1101},{"x":5.4141,"y":-4.5951,"z":8.4693,"label":"Healthy","split":"train","index":1102},{"x":5.9248,"y":-5.185,"z":7.4587,"label":"Healthy","split":"train","index":1103},{"x":5.6769,"y":-4.745,"z":7.6168,"label":"Healthy","split":"test","index":1104},{"x":3.8519,"y":-4.0409,"z":8.3447,"label":"Healthy","split":"test","index":1105},{"x":4.3147,"y":-3.862,"z":8.5567,"label":"Healthy","split":"val","index":1106},{"x":5.5029,"y":-4.6306,"z":8.0502,"label":"Healthy","split":"test","index":1107},{"x":4.998,"y":-4.6538,"z":8.6498,"label":"Healthy","split":"train","index":1108},{"x":4.848,"y":-4.6717,"z":8.6489,"label":"Healthy","split":"train","index":1109},{"x":4.2893,"y":-4.0198,"z":9.0235,"label":"Healthy","split":"train","index":1110},{"x":5.5952,"y":-3.9939,"z":8.1768,"label":"Healthy","split":"train","index":1111},{"x":5.5809,"y":-4.1864,"z":7.9919,"label":"Healthy","split":"test","index":1112},{"x":5.1377,"y":-4.5424,"z":7.5799,"label":"Healthy","split":"test","index":1113},{"x":5.8623,"y":-5.0928,"z":7.4124,"label":"Healthy","split":"train","index":1114},{"x":3.9978,"y":-4.035,"z":8.6308,"label":"Healthy","split":"train","index":1115},{"x":4.2178,"y":-4.4962,"z":8.0797,"label":"Healthy","split":"val","index":1116},{"x":5.5945,"y":-3.9913,"z":8.2398,"label":"Healthy","split":"train","index":1117},{"x":4.8071,"y":-4.5489,"z":8.8285,"label":"Healthy","split":"val","index":1118},{"x":4.5315,"y":-4.488,"z":8.8342,"label":"Healthy","split":"train","index":1119},{"x":5.2755,"y":-4.7416,"z":8.3542,"label":"Healthy","split":"train","index":1120},{"x":5.343,"y":-3.9235,"z":7.8532,"label":"Healthy","split":"train","index":1121},{"x":5.1302,"y":-4.5201,"z":7.847,"label":"Healthy","split":"train","index":1122},{"x":4.0591,"y":-4.474,"z":8.1291,"label":"Healthy","split":"train","index":1123},{"x":4.0732,"y":-4.0708,"z":8.684,"label":"Healthy","split":"val","index":1124},{"x":4.5574,"y":-4.6312,"z":8.609,"label":"Healthy","split":"val","index":1125},{"x":4.1313,"y":-4.5081,"z":8.4298,"label":"Healthy","split":"train","index":1126},{"x":5.1933,"y":-4.6271,"z":7.6639,"label":"Healthy","split":"train","index":1127},{"x":4.8633,"y":-4.383,"z":8.6784,"label":"Healthy","split":"train","index":1128},{"x":4.5716,"y":-4.4716,"z":8.7974,"label":"Healthy","split":"train","index":1129},{"x":4.9388,"y":-3.9514,"z":7.8603,"label":"Healthy","split":"train","index":1130},{"x":4.4437,"y":-4.4542,"z":8.901,"label":"Healthy","split":"train","index":1131},{"x":4.8086,"y":-4.2632,"z":8.7569,"label":"Healthy","split":"train","index":1132},{"x":4.6442,"y":-3.8969,"z":8.2729,"label":"Healthy","split":"train","index":1133},{"x":4.1079,"y":-4.5148,"z":8.3278,"label":"Healthy","split":"train","index":1134},{"x":3.9064,"y":-4.0519,"z":8.5875,"label":"Healthy","split":"test","index":1135},{"x":5.4486,"y":-4.0874,"z":7.5945,"label":"Healthy","split":"train","index":1136},{"x":5.1395,"y":-4.5554,"z":8.562,"label":"Healthy","split":"train","index":1137},{"x":5.1972,"y":-4.6938,"z":7.6811,"label":"Healthy","split":"train","index":1138},{"x":4.5031,"y":-4.4253,"z":8.6855,"label":"Healthy","split":"train","index":1139},{"x":4.3359,"y":-4.2175,"z":8.9256,"label":"Healthy","split":"val","index":1140},{"x":5.3701,"y":-4.7289,"z":8.2946,"label":"Healthy","split":"train","index":1141},{"x":5.0616,"y":-4.4311,"z":7.6557,"label":"Healthy","split":"train","index":1142},{"x":5.2997,"y":-4.6843,"z":8.4189,"label":"Healthy","split":"train","index":1143},{"x":4.0413,"y":-3.9198,"z":7.7805,"label":"Healthy","split":"train","index":1144},{"x":5.3309,"y":-4.6525,"z":7.5244,"label":"Healthy","split":"test","index":1145},{"x":4.4413,"y":-4.282,"z":8.8101,"label":"Healthy","split":"val","index":1146},{"x":5.326,"y":-4.4427,"z":7.4617,"label":"Healthy","split":"train","index":1147},{"x":3.824,"y":-4.1499,"z":9.0614,"label":"Healthy","split":"test","index":1148},{"x":5.5096,"y":-4.4226,"z":8.3018,"label":"Healthy","split":"train","index":1149},{"x":5.5909,"y":-4.1346,"z":8.153,"label":"Healthy","split":"train","index":1150},{"x":3.8813,"y":-4.157,"z":9.0214,"label":"Healthy","split":"train","index":1151},{"x":5.9035,"y":-5.1586,"z":7.438,"label":"Healthy","split":"test","index":1152},{"x":4.3054,"y":-4.2887,"z":7.7476,"label":"Healthy","split":"train","index":1153},{"x":5.4985,"y":-4.7423,"z":8.2427,"label":"Healthy","split":"train","index":1154}] \ No newline at end of file diff --git a/static/data/dataset-benchmarking/results.json b/static/data/dataset-benchmarking/results.json new file mode 100644 index 0000000..685545f --- /dev/null +++ b/static/data/dataset-benchmarking/results.json @@ -0,0 +1,539 @@ +{ + "watermelon_disease_classification": { + "dataset": "Project-AgML/watermelon_disease_classification", + "date": "2026-08-13", + "reproducibility": { + "split_seed": 42, + "train_ratio": 0.7, + "val_ratio": 0.15, + "test_ratio": 0.15, + "embed_model": "facebook/dinov2-base", + "near_dup_threshold": 0.98, + "backbone": "resnet18", + "cartography_epochs": 30, + "cartography_lr": 0.001, + "cv_folds": 5 + }, + "phases_completed": [ + 1, + 2, + 3 + ], + "metrics": { + "class_imbalance": { + "counts": { + "Anthracnose": 109, + "Downy_Mildew": 266, + "Healthy": 143, + "Mosaic_Virus": 290 + }, + "imbalance_ratio": 2.6606, + "normalized_entropy": 0.9452, + "most_frequent_class": "Mosaic_Virus", + "least_frequent_class": "Anthracnose", + "total_train_examples": 808 + }, + "exact_duplicate": { + "total_images": 1155, + "exact_duplicate_count": 0, + "exact_duplicate_rate": 0.0, + "duplicate_groups": 0, + "cross_split_duplicates": 0 + }, + "resolution_consistency": { + "total_images": 1155, + "width": { + "mean": 3024, + "std": 0.0, + "min": 3024, + "max": 3024 + }, + "height": { + "mean": 3091.2, + "std": 251.55, + "min": 3024, + "max": 4032 + }, + "aspect_ratio": { + "mean": 0.98, + "std": 0.06, + "min": 0.75, + "max": 1.0 + }, + "area_cv": 0.0814, + "mode_distribution": { + "RGB": 1155 + } + }, + "metadata_coverage": { + "skipped": true, + "reason": "No metadata columns detected in dataset schema." + }, + "near_duplicate": { + "total_images": 1155, + "embed_model": "facebook/dinov2-base", + "threshold": 0.98, + "near_duplicate_count": 46, + "near_duplicate_rate": 0.0398, + "near_duplicate_groups": 22, + "cross_split_near_duplicates": 27, + "faiss_index_type": "IndexFlatIP" + }, + "feature_separability": { + "embed_model": "facebook/dinov2-base", + "n_total": 1155, + "n_silhouette_samples": 1155, + "silhouette_score": 0.2629, + "silhouette_interpretation": "moderate separation", + "davies_bouldin_index": 1.9661, + "davies_bouldin_interpretation": "some overlap between clusters", + "per_class_silhouette": { + "Anthracnose": 0.6231, + "Downy_Mildew": 0.4447, + "Healthy": 0.6217, + "Mosaic_Virus": -0.2152 + } + }, + "intra_class_diversity": { + "embed_model": "facebook/dinov2-base", + "per_class_diversity": { + "Anthracnose": 0.5802, + "Downy_Mildew": 0.3971, + "Healthy": 0.3354, + "Mosaic_Virus": 0.5747 + }, + "mean_diversity": 0.4718, + "min_diversity_class": "Healthy", + "max_diversity_class": "Anthracnose" + }, + "dataset_cartography": { + "n_easy": 750, + "n_ambiguous": 58, + "n_hard": 0, + "pct_easy": 92.82, + "pct_ambiguous": 7.18, + "pct_hard": 0.0, + "mean_confidence": 0.9938, + "mean_variability": 0.0243, + "easy_threshold": 0.7, + "hard_threshold": 0.3, + "variability_threshold": 0.1, + "n_epochs": 30 + }, + "class_confusability": { + "accuracy": 1.0, + "per_class_accuracy": { + "Anthracnose": 1.0, + "Downy_Mildew": 1.0, + "Healthy": 1.0, + "Mosaic_Virus": 1.0 + }, + "confusion_matrix": [ + [1.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0], + [0.0, 0.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 1.0] + ], + "top_confused_pairs": [], + "n_top_pairs": 0, + "n_test_samples": 174 + }, + "label_noise": { + "estimated_noise_rate": 0.0, + "n_noisy_samples": 0, + "n_total_samples": 1155, + "flagged_orig_indices": [], + "per_class_noise_counts": { + "Anthracnose": 0, + "Downy_Mildew": 0, + "Healthy": 0, + "Mosaic_Virus": 0 + }, + "cv_folds": 5 + } + } + }, + "rice_variety_classification_bangladesh": { + "dataset": "Project-AgML/rice_variety_classification_bangladesh", + "date": "2026-08-03", + "reproducibility": { + "split_seed": 42, + "train_ratio": 0.7, + "val_ratio": 0.15, + "test_ratio": 0.15, + "embed_model": "facebook/dinov2-base", + "near_dup_threshold": 0.98 + }, + "phases_completed": [1, 2], + "metrics": { + "class_imbalance": { + "counts": { + "BD30": 350, + "BD33": 350, + "BD39": 350, + "BD49": 350, + "BD51": 350, + "BD52": 350, + "BD56": 350, + "BD57": 350, + "BD70": 350, + "BD72": 350, + "BD75": 350, + "BD76": 350, + "BD79": 350, + "BD85": 350, + "BD87": 350, + "BD91": 350, + "BD93": 350, + "BD95": 350, + "BR22": 350, + "BR23": 350, + "BRRI102": 350, + "BRRI67": 350, + "BRRI74": 350, + "Binadhan10": 350, + "Binadhan11": 350, + "Binadhan12": 350, + "Binadhan14": 350, + "Binadhan16": 350, + "Binadhan17": 350, + "Binadhan19": 350, + "Binadhan20": 350, + "Binadhan21": 350, + "Binadhan23": 350, + "Binadhan24": 350, + "Binadhan25": 349, + "Binadhan26": 350, + "Binadhan7": 350, + "Binadhan8": 350 + }, + "imbalance_ratio": 1.0029, + "normalized_entropy": 1.0, + "most_frequent_class": "BD30", + "least_frequent_class": "Binadhan25", + "total_train_examples": 13299 + }, + "exact_duplicate": { + "total_images": 19000, + "exact_duplicate_count": 0, + "exact_duplicate_rate": 0.0, + "duplicate_groups": 0, + "cross_split_duplicates": 0 + }, + "resolution_consistency": { + "total_images": 19000, + "width": { + "mean": 640, + "std": 0.0, + "min": 640, + "max": 640 + }, + "height": { + "mean": 480, + "std": 0.0, + "min": 480, + "max": 480 + }, + "aspect_ratio": { + "mean": 1.33, + "std": 0.0, + "min": 1.3333333333333333, + "max": 1.3333333333333333 + }, + "area_cv": 0.0, + "mode_distribution": { + "RGBA": 7500, + "RGB": 11500 + } + }, + "metadata_coverage": { + "skipped": true, + "reason": "No metadata columns detected in dataset schema." + }, + "near_duplicate": { + "total_images": 19000, + "embed_model": "facebook/dinov2-base", + "threshold": 0.98, + "near_duplicate_count": 36, + "near_duplicate_rate": 0.0019, + "near_duplicate_groups": 18, + "cross_split_near_duplicates": 20, + "faiss_index_type": "IndexFlatIP" + }, + "feature_separability": { + "embed_model": "facebook/dinov2-base", + "n_total": 19000, + "n_silhouette_samples": 9994, + "silhouette_score": -0.0172, + "silhouette_interpretation": "overlapping or no separation", + "davies_bouldin_index": 6.277, + "davies_bouldin_interpretation": "high overlap — classes not well-separated", + "per_class_silhouette": { + "BD30": -0.0048, + "BD33": -0.0348, + "BD39": 0.0449, + "BD49": -0.0861, + "BD51": -0.0316, + "BD52": -0.0291, + "BD56": -0.0434, + "BD57": -0.0479, + "BD70": -0.0623, + "BD72": 0.0167, + "BD75": -0.0805, + "BD76": 0.0543, + "BD79": -0.0197, + "BD85": -0.1005, + "BD87": 0.0829, + "BD91": -0.0505, + "BD93": -0.0357, + "BD95": -0.1184, + "BR22": 0.0376, + "BR23": 0.0062, + "BRRI102": -0.079, + "BRRI67": -0.0374, + "BRRI74": 0.0222, + "Binadhan10": 0.0131, + "Binadhan11": 0.0264, + "Binadhan12": -0.0271, + "Binadhan14": -0.0819, + "Binadhan16": -0.0121, + "Binadhan17": -0.0136, + "Binadhan19": -0.0176, + "Binadhan20": 0.2056, + "Binadhan21": -0.036, + "Binadhan23": -0.0188, + "Binadhan24": -0.0521, + "Binadhan25": -0.0142, + "Binadhan26": -0.0373, + "Binadhan7": 0.0181, + "Binadhan8": -0.009 + } + }, + "intra_class_diversity": { + "embed_model": "facebook/dinov2-base", + "per_class_diversity": { + "BD30": 0.4799, + "BD33": 0.5027, + "BD39": 0.492, + "BD49": 0.516, + "BD51": 0.4809, + "BD52": 0.4774, + "BD56": 0.4863, + "BD57": 0.4993, + "BD70": 0.5314, + "BD72": 0.4583, + "BD75": 0.5077, + "BD76": 0.4541, + "BD79": 0.4732, + "BD85": 0.5212, + "BD87": 0.4587, + "BD91": 0.4851, + "BD93": 0.4751, + "BD95": 0.5115, + "BR22": 0.4446, + "BR23": 0.4636, + "BRRI102": 0.5574, + "BRRI67": 0.5032, + "BRRI74": 0.4858, + "Binadhan10": 0.4951, + "Binadhan11": 0.4708, + "Binadhan12": 0.4991, + "Binadhan14": 0.5032, + "Binadhan16": 0.488, + "Binadhan17": 0.4875, + "Binadhan19": 0.4997, + "Binadhan20": 0.523, + "Binadhan21": 0.4837, + "Binadhan23": 0.4981, + "Binadhan24": 0.507, + "Binadhan25": 0.519, + "Binadhan26": 0.4948, + "Binadhan7": 0.4746, + "Binadhan8": 0.511 + }, + "mean_diversity": 0.4926, + "min_diversity_class": "BR22", + "max_diversity_class": "BRRI102" + } + } + }, + "ACHENY_variety_classification": { + "dataset": "Project-AgML/ACHENY_variety_classification", + "date": "2026-08-03", + "reproducibility": { + "split_seed": 42, + "train_ratio": 0.7, + "val_ratio": 0.15, + "test_ratio": 0.15, + "embed_model": "facebook/dinov2-base", + "near_dup_threshold": 0.98 + }, + "phases_completed": [1, 2], + "metrics": { + "class_imbalance": { + "counts": { + "AnaHau": 538, + "AnaSet": 897, + "AtrCan": 505, + "AtrLen": 936, + "AtrLeu": 440, + "CerAre": 565, + "CheAlb": 456, + "CorMon": 769, + "GirOpp": 217, + "HalAmm": 650, + "HalBel": 440, + "HalPer": 812, + "HalStr": 594, + "HalSub": 677, + "HamSal": 834, + "KocSco": 637, + "KocSte": 596, + "SalAba": 513, + "SalDen": 1023, + "SalInc": 812, + "SalKal": 210, + "SalKer": 633, + "SalPra": 650, + "SalTom": 678, + "SalTur": 685, + "SalYaz": 734, + "SeiCin": 385, + "SeiRos": 700, + "SuaAcu": 820, + "SuaAeg": 514 + }, + "imbalance_ratio": 4.8714, + "normalized_entropy": 0.9857, + "most_frequent_class": "SalDen", + "least_frequent_class": "SalKal", + "total_train_examples": 18920 + }, + "exact_duplicate": { + "total_images": 27030, + "exact_duplicate_count": 0, + "exact_duplicate_rate": 0.0, + "duplicate_groups": 0, + "cross_split_duplicates": 0 + }, + "resolution_consistency": { + "total_images": 27030, + "width": { + "mean": 224, + "std": 0.0, + "min": 224, + "max": 224 + }, + "height": { + "mean": 224, + "std": 0.0, + "min": 224, + "max": 224 + }, + "aspect_ratio": { + "mean": 1.0, + "std": 0.0, + "min": 1.0, + "max": 1.0 + }, + "area_cv": 0.0, + "mode_distribution": { + "RGB": 27030 + } + }, + "metadata_coverage": { + "skipped": true, + "reason": "No metadata columns detected in dataset schema." + }, + "near_duplicate": { + "total_images": 27030, + "embed_model": "facebook/dinov2-base", + "threshold": 0.98, + "near_duplicate_count": 8, + "near_duplicate_rate": 0.0003, + "near_duplicate_groups": 4, + "cross_split_near_duplicates": 6, + "faiss_index_type": "IndexFlatIP" + }, + "feature_separability": { + "embed_model": "facebook/dinov2-base", + "n_total": 27030, + "n_silhouette_samples": 10000, + "silhouette_score": 0.0851, + "silhouette_interpretation": "weak separation", + "davies_bouldin_index": 2.9768, + "davies_bouldin_interpretation": "high overlap — classes not well-separated", + "per_class_silhouette": { + "AnaHau": 0.1234, + "AnaSet": 0.2493, + "AtrCan": 0.0097, + "AtrLen": 0.0487, + "AtrLeu": 0.0222, + "CerAre": 0.3038, + "CheAlb": 0.1869, + "CorMon": 0.1051, + "GirOpp": 0.221, + "HalAmm": 0.0616, + "HalBel": 0.2117, + "HalPer": 0.0156, + "HalStr": 0.2143, + "HalSub": -0.0415, + "HamSal": 0.1021, + "KocSco": -0.0639, + "KocSte": 0.203, + "SalAba": -0.0611, + "SalDen": -0.0028, + "SalInc": -0.0389, + "SalKal": 0.0784, + "SalKer": 0.0476, + "SalPra": 0.3901, + "SalTom": 0.2113, + "SalTur": -0.0844, + "SalYaz": 0.0653, + "SeiCin": 0.0781, + "SeiRos": 0.0033, + "SuaAcu": 0.0433, + "SuaAeg": 0.0561 + } + }, + "intra_class_diversity": { + "embed_model": "facebook/dinov2-base", + "per_class_diversity": { + "AnaHau": 0.5733, + "AnaSet": 0.5439, + "AtrCan": 0.6505, + "AtrLen": 0.631, + "AtrLeu": 0.5972, + "CerAre": 0.5711, + "CheAlb": 0.7238, + "CorMon": 0.5252, + "GirOpp": 0.5125, + "HalAmm": 0.6213, + "HalBel": 0.5918, + "HalPer": 0.5619, + "HalStr": 0.6569, + "HalSub": 0.5981, + "HamSal": 0.5068, + "KocSco": 0.6997, + "KocSte": 0.5007, + "SalAba": 0.624, + "SalDen": 0.5772, + "SalInc": 0.6843, + "SalKal": 0.6593, + "SalKer": 0.5971, + "SalPra": 0.5797, + "SalTom": 0.5858, + "SalTur": 0.7058, + "SalYaz": 0.512, + "SeiCin": 0.6223, + "SeiRos": 0.5881, + "SuaAcu": 0.6384, + "SuaAeg": 0.5694 + }, + "mean_diversity": 0.6003, + "min_diversity_class": "KocSte", + "max_diversity_class": "CheAlb" + } + } + } +} diff --git a/static/data/datasets.json b/static/data/datasets.json index e208a53..4f90191 100644 --- a/static/data/datasets.json +++ b/static/data/datasets.json @@ -124334,7 +124334,7 @@ "machine_learning_task": "image_classification", "agricultural_task": "papaya_leaf_disease_classification", "location": "Bangladesh, Asia", - "sensor_modality": "RGB", + "sensor_modality": "rgb", "real_or_synthetic": "real", "platform": "uav", "input_data_format": "JPG", @@ -124357,7 +124357,7 @@ "machine_learning_task": "object_detection", "agricultural_task": "None", "location": "None", - "sensor_modality": "RGB", + "sensor_modality": "rgb", "real_or_synthetic": "real", "platform": "None", "input_data_format": "jpg", diff --git a/static/data/embeddings/meta.json b/static/data/embeddings/meta.json index 659db51..8e3c660 100644 --- a/static/data/embeddings/meta.json +++ b/static/data/embeddings/meta.json @@ -1 +1 @@ -{"model":"Xenova/all-MiniLM-L6-v2","dtype":"q8","dim":384,"count":6186,"generatedAt":"2026-08-13T21:12:32.257Z","contentHash":"76622341623868a7bc0d190d32903679db7d867258274f727bd5369cd2928077","names":["ACHENY_variety_classification","african_plum_grading_classification","AFruitDB_fruit_grade_classification","agarwood_leaf_disease_classification","AgriVision4_disease_classification","almond_bloom_2023","almond_harvest_2021","apple_detection_drone_brazil","apple_detection_spain","apple_detection_usa","apple_flower_segmentation","apple_leaf_disease_classification","apple_segmentation_minnesota","arabica_coffee_leaf_disease_classification","ash_gourd_disease_classification","autonomous_greenhouse_regression","bacterial_grain_rot_classification","banana_bunch_detection","banana_bunch_maturity_classification_classification","banana_grade_variety_classification","banana_guava_quality_classification","banana_leaf_disease_classification","banana_leaf_nutrient_classification","banana_variety_classification","BananaImageBD_ripeness_classification","BananaImageBD_variety_classification","BananaLSD_leaf_disease_classification","Basmati_rice_seed_varitey_classification","bay_leaf_disease_classification","BDHerbalPlants_variety_classification","BDMANGO_variety_classification","BDMediLeaves_variety_classification","bean_cowpea_leaf_disease_classification","bean_disease_classification_tanzania","bean_disease_uganda","bean_synthetic_earlygrowth_aerial","betel_leaf_disease_classification","betel_leaf_disease_classification_2","black_gram_disease_classification","blackgram_plant_leaf_disease_classification","BPLD_leaf_disease_classification","BrinjalFruitX_disease_classification","bruised_vegetable_classification","cabbage_instance_segmentation","carambola_disease_classification","carrot_weeds_germany","cashew_detection","cauliflower_leaf_disease_classification","centella_asiatica_leaves","chitrak_leaf_disease_classification","citrus_fruit_leaf_disease_classification","citrus_fruit_variety_classification","citrusuat_disease_classification","CocoaMFDB_detection","coconut_tree_disease_classification","coffee_bean_quality_classification","coffee_detection","CoFly-Weed-DB_weed_segmentation","COLD_chili_leaf_disease_classification","COLD_onion_leaf_disease_classification","CoLeaf_nutritional_deficiency_classification","corn_leaf_pest_classification","corn_maize_leaf_disease","cotton_leaf_disease_classification","cotton_leaf_disease_classification_bangladesh_2","cotton_weed_detection","crop_pest_disease_classification","crop_weed_detection_latvia","crop_weeds_greece","CS-D_tea_leaf_disease_classification","cucumber_disease_classification","custard_apple_disease_classification","date_cluster_detection","date_fruit_maturity_detection","date_grade_variety_classification","date_palm_leaf_disease_classification","date_palm_leaf_disease_classification_iraq","DIMPSAR_medicinal_leaf_classification","DIMPSAR_medicinal_plant_classification","dragonfruit_disease_classification","dragonfruit_maturity_classification","dragonfruit_quality_classification","durian_disease_classification","durian_disease_classification_vietnam","EfficientMaize_classification","eggplant_disease_classification","eggplant_leaf_disease_classification","embrapa_wgisd_grape_detection","ERWIAM_blight_detection","fig_leaf_ficus_worm_classification","fortunella_margarita_growth_detection","fresh_rotten_fruit_classification","fruit_detection_worldwide","fruit_leaf_variety_classification","FruitNet_quality_classification","fruitseg30_segmentation","FruitVision_quality_classification","GEMINI_cowpea_flower_detection","GEMINI_cowpea_pod_detection","gemini_flower_detection","gemini_leaf_detection","gemini_plant_detection","gemini_pod_detection","ghai_broccoli_detection","ghai_green_cabbage_detection","ghai_iceberg_lettuce_detection","ghai_romaine_detection","ghai_strawberry_fruit_detection","grape_detection_californiaday","grape_detection_californianight","grape_detection_syntheticday","grape_leaf_disease_classification","grape_variety_classification","grapevine_development_stage_classification","grapevine_disease_classification","grapevine_esca_classification","grapevine_growth_detection","greenhouse_crop_weed_classification","greenhouse_crop_weed_detection","groundnut_leaf_disease_classification","groundnut_leaf_disease_classification_2","growliflower_cauliflower_segmentation","guava_disease_classification","guava_disease_classification_bangladesh","guava_disease_pakistan","guava_maturity_classification","GYMNSA_pear_rust_detection","Hibiscus_Tea_disease_classification","hog_plum_leaf_disease_classification","ICPTC_pistachio_tree_variety_classification","IDDMSLD_spinach_leaf_disease_classification","ImageWeeds_aerial_weed_detection","ImageWeeds_weed_detection","iNatAg","iNatAg-mini","iNatAg-mini/abelmoschus_esculentus","iNatAg-mini/abelmoschus_manihot","iNatAg-mini/abelmoschus_moschatus","iNatAg-mini/abies_alba","iNatAg-mini/abies_amabilis","iNatAg-mini/abies_balsamea","iNatAg-mini/abies_concolor","iNatAg-mini/abies_pindrow","iNatAg-mini/abroma_augustum","iNatAg-mini/abrus_pecatorius","iNatAg-mini/abrus_precatorius","iNatAg-mini/abutilon_theophrasti","iNatAg-mini/acacia_abyssinica","iNatAg-mini/acacia_acradenia","iNatAg-mini/acacia_acuminata","iNatAg-mini/acacia_ampliceps","iNatAg-mini/acacia_anceps","iNatAg-mini/acacia_ancistrocarpa","iNatAg-mini/acacia_aneura","iNatAg-mini/acacia_angustissima","iNatAg-mini/acacia_ataxacantha","iNatAg-mini/acacia_aulacocarpa","iNatAg-mini/acacia_auriculiformis","iNatAg-mini/acacia_bidwillii","iNatAg-mini/acacia_brachystachya","iNatAg-mini/acacia_brevispica","iNatAg-mini/acacia_burkei","iNatAg-mini/acacia_caffra","iNatAg-mini/acacia_cambagei","iNatAg-mini/acacia_catechu","iNatAg-mini/acacia_catenulata","iNatAg-mini/acacia_caven","iNatAg-mini/acacia_cincinnata","iNatAg-mini/acacia_coriacea","iNatAg-mini/acacia_cowleana","iNatAg-mini/acacia_crassicarpa","iNatAg-mini/acacia_cyclops","iNatAg-mini/acacia_cyperophylla","iNatAg-mini/acacia_dealbata","iNatAg-mini/acacia_deanei","iNatAg-mini/acacia_decurrens","iNatAg-mini/acacia_difficilis","iNatAg-mini/acacia_doratoxylon","iNatAg-mini/acacia_ehrenbergiana","iNatAg-mini/acacia_erioloba","iNatAg-mini/acacia_estrophiolata","iNatAg-mini/acacia_excelsa","iNatAg-mini/acacia_falciformis","iNatAg-mini/acacia_farnesiana","iNatAg-mini/acacia_fasciculifera","iNatAg-mini/acacia_flavescens","iNatAg-mini/acacia_georginae","iNatAg-mini/acacia_gerrardii","iNatAg-mini/acacia_glaucocarpa","iNatAg-mini/acacia_gourmaensis","iNatAg-mini/acacia_harpophylla","iNatAg-mini/acacia_holosericea","iNatAg-mini/acacia_irrorata","iNatAg-mini/acacia_ixiophylla","iNatAg-mini/acacia_karroo","iNatAg-mini/acacia_koa","iNatAg-mini/acacia_leptocarpa","iNatAg-mini/acacia_leucophloea","iNatAg-mini/acacia_ligulata","iNatAg-mini/acacia_maidenii","iNatAg-mini/acacia_mangium","iNatAg-mini/acacia_mearnsii","iNatAg-mini/acacia_melanoxylon","iNatAg-mini/acacia_mellifera","iNatAg-mini/acacia_murrayana","iNatAg-mini/acacia_neriifolia","iNatAg-mini/acacia_nigrescens","iNatAg-mini/acacia_nilotica","iNatAg-mini/acacia_occidentalis","iNatAg-mini/acacia_oraria","iNatAg-mini/acacia_oswaldii","iNatAg-mini/acacia_pachycarpa","iNatAg-mini/acacia_papyrocarpa","iNatAg-mini/acacia_paradoxa","iNatAg-mini/acacia_pendula","iNatAg-mini/acacia_peuce","iNatAg-mini/acacia_podalyriifolia","iNatAg-mini/acacia_polyacantha","iNatAg-mini/acacia_polystachya","iNatAg-mini/acacia_pruinocarpa","iNatAg-mini/acacia_pycnantha","iNatAg-mini/acacia_salicina","iNatAg-mini/acacia_saligna","iNatAg-mini/acacia_sclerosperma","iNatAg-mini/acacia_senegal","iNatAg-mini/acacia_seyal","iNatAg-mini/acacia_shirleyi","iNatAg-mini/acacia_sieberiana","iNatAg-mini/acacia_silvestris","iNatAg-mini/acacia_simsii","iNatAg-mini/acacia_stenophylla","iNatAg-mini/acacia_tetragonophylla","iNatAg-mini/acacia_tortilis","iNatAg-mini/acacia_torulosa","iNatAg-mini/acacia_trachycarpa","iNatAg-mini/acacia_victoriae","iNatAg-mini/acaena_novae-zelandiae","iNatAg-mini/acalypha_rhomboidea","iNatAg-mini/acalypha_virginica","iNatAg-mini/acanthosicyos_horridus","iNatAg-mini/acanthosicyos_naudinianus","iNatAg-mini/acanthospermum_hispidum","iNatAg-mini/acanthus_ilicifolius","iNatAg-mini/acanthus_mollis","iNatAg-mini/acca_sellowiana","iNatAg-mini/acer_caesium","iNatAg-mini/acer_campestre","iNatAg-mini/acer_platanoides","iNatAg-mini/acer_pseudoplatanus","iNatAg-mini/acer_saccharum","iNatAg-mini/achillea_fragrantissima","iNatAg-mini/achillea_millefolium","iNatAg-mini/achillea_ptarmica","iNatAg-mini/achnatherum_pekinense","iNatAg-mini/achyranthes_aspera","iNatAg-mini/acmena_smithii","iNatAg-mini/aconitum_napellus","iNatAg-mini/acorus_calamus","iNatAg-mini/acrocarpus_fraxinifolius","iNatAg-mini/acrocomia_aculeata","iNatAg-mini/acrocomia_totai","iNatAg-mini/actaea_racemosa","iNatAg-mini/actinidia_arguta","iNatAg-mini/actinidia_chinensis","iNatAg-mini/adansonia_digitata","iNatAg-mini/adansonia_grandidieri","iNatAg-mini/adansonia_gregorii","iNatAg-mini/adenanthera_pavonina","iNatAg-mini/adesmia_bicolor","iNatAg-mini/adesmia_latifolia","iNatAg-mini/adesmia_punctata","iNatAg-mini/adesmia_securigerifolia","iNatAg-mini/adiantum_capillus-veneris","iNatAg-mini/adina_cordifolia","iNatAg-mini/adonis_annua","iNatAg-mini/adonis_vernalis","iNatAg-mini/aechmea_magdalenae","iNatAg-mini/aegiceras_corniculatum","iNatAg-mini/aegilops_biuncialis","iNatAg-mini/aegilops_cylindrica","iNatAg-mini/aegilops_geniculata","iNatAg-mini/aegilops_triuncialis","iNatAg-mini/aegle_marmelos","iNatAg-mini/aegopodium_podagraria","iNatAg-mini/aeschynomene_americana","iNatAg-mini/aeschynomene_brasiliana","iNatAg-mini/aeschynomene_falcata","iNatAg-mini/aeschynomene_histrix","iNatAg-mini/aeschynomene_indica","iNatAg-mini/aeschynomene_villosa","iNatAg-mini/aesculus_hippocastanum","iNatAg-mini/aesculus_indica","iNatAg-mini/aethusa_cynapium","iNatAg-mini/afzelia_africana","iNatAg-mini/afzelia_quanzensis","iNatAg-mini/agathis_australis","iNatAg-mini/agathis_dammara","iNatAg-mini/agathis_macrophylla","iNatAg-mini/agathis_microstachya","iNatAg-mini/agathis_robusta","iNatAg-mini/agave_fourcroydes","iNatAg-mini/agave_lecheguilla","iNatAg-mini/agave_sisalana","iNatAg-mini/ageratum_conyzoides","iNatAg-mini/agrimonia_eupatoria","iNatAg-mini/agrimonia_gryposepala","iNatAg-mini/agrimonia_parviflora","iNatAg-mini/agropyron_cristatum","iNatAg-mini/agropyron_dasyanthum","iNatAg-mini/agropyron_desertorum","iNatAg-mini/agropyron_scabrum","iNatAg-mini/agrostemma_githago","iNatAg-mini/agrostis_canina","iNatAg-mini/agrostis_capillaris","iNatAg-mini/agrostis_gigantea","iNatAg-mini/agrostis_stolonifera","iNatAg-mini/agrostis_tenuis","iNatAg-mini/ailanthus_altissima","iNatAg-mini/ailanthus_excelsa","iNatAg-mini/aiphanes_aculeata","iNatAg-mini/aira_caryophyllea","iNatAg-mini/ajuga_genevensis","iNatAg-mini/ajuga_reptans","iNatAg-mini/alania_cunninghamii","iNatAg-mini/albizia_adianthifolia","iNatAg-mini/albizia_amara","iNatAg-mini/albizia_chinensis","iNatAg-mini/albizia_falcataria","iNatAg-mini/albizia_harveyi","iNatAg-mini/albizia_lebbeck","iNatAg-mini/albizia_lophantha","iNatAg-mini/albizia_lucida","iNatAg-mini/albizia_odoratissima","iNatAg-mini/albizia_procera","iNatAg-mini/alcea_rosea","iNatAg-mini/alchemilla_monticola","iNatAg-mini/alchemilla_occidentalis","iNatAg-mini/alchemilla_vulgaris","iNatAg-mini/alchemilla_xanthochlora","iNatAg-mini/aleurites_fordii","iNatAg-mini/aleurites_moluccana","iNatAg-mini/alisma_gramineum","iNatAg-mini/alisma_lanceolatum","iNatAg-mini/alisma_plantago-aquatica","iNatAg-mini/alkanna_tinctoria","iNatAg-mini/alliaria_petiolata","iNatAg-mini/allionia_incarnata","iNatAg-mini/allium_ampeloprasum","iNatAg-mini/allium_canadense","iNatAg-mini/allium_cepa","iNatAg-mini/allium_chinense","iNatAg-mini/allium_fistulosum","iNatAg-mini/allium_paniculatum","iNatAg-mini/allium_sativum","iNatAg-mini/allium_schoenoprasum","iNatAg-mini/allium_triquetrum","iNatAg-mini/allium_tuberosum","iNatAg-mini/allium_ursinum","iNatAg-mini/allocasuarina_campestris","iNatAg-mini/allocasuarina_decaisneana","iNatAg-mini/allocasuarina_fraseriana","iNatAg-mini/allocasuarina_huegeliana","iNatAg-mini/allocasuarina_littoralis","iNatAg-mini/allocasuarina_luehmannii","iNatAg-mini/allocasuarina_torulosa","iNatAg-mini/alloteropsis_semialata","iNatAg-mini/alnus_acuminata","iNatAg-mini/alnus_glutinosa","iNatAg-mini/alnus_japonica","iNatAg-mini/alnus_maritima","iNatAg-mini/alnus_nepalensis","iNatAg-mini/alnus_rubra","iNatAg-mini/alocasia_macrorrhizos","iNatAg-mini/aloe_arborescens","iNatAg-mini/aloe_barbadensis","iNatAg-mini/aloe_ferox","iNatAg-mini/aloe_perryi","iNatAg-mini/alopecurus_arundinaceus","iNatAg-mini/alopecurus_carolinianus","iNatAg-mini/alopecurus_geniculatus","iNatAg-mini/alopecurus_myosuroides","iNatAg-mini/alopecurus_pratensis","iNatAg-mini/alopecurus_rendlei","iNatAg-mini/aloysia_triphylla","iNatAg-mini/alphitonia_excelsa","iNatAg-mini/alpinia_galanga","iNatAg-mini/alstonia_scholaris","iNatAg-mini/alternanthera_pungens","iNatAg-mini/althaea_officinalis","iNatAg-mini/altingia_excelsa","iNatAg-mini/alysicarpus_monilifer","iNatAg-mini/alysicarpus_ovalifolius","iNatAg-mini/alysicarpus_rugosus","iNatAg-mini/alysicarpus_vaginalis","iNatAg-mini/alyssum_desertorum","iNatAg-mini/amaranthus_albus","iNatAg-mini/amaranthus_blitum","iNatAg-mini/amaranthus_caudatus","iNatAg-mini/amaranthus_cruentus","iNatAg-mini/amaranthus_dubius","iNatAg-mini/amaranthus_hybridus","iNatAg-mini/amaranthus_hypochondriacus","iNatAg-mini/amaranthus_lividus","iNatAg-mini/amaranthus_retroflexus","iNatAg-mini/amaranthus_speciosus","iNatAg-mini/amaranthus_spinosus","iNatAg-mini/amaranthus_tricolor","iNatAg-mini/amaranthus_viridis","iNatAg-mini/ambelania_acida","iNatAg-mini/ambrosia_acanthicarpa","iNatAg-mini/ambrosia_artemisiifolia","iNatAg-mini/ambrosia_confertiflora","iNatAg-mini/ambrosia_psilostachya","iNatAg-mini/ambrosia_tomentosa","iNatAg-mini/ambrosia_trifida","iNatAg-mini/ammannia_latifolia","iNatAg-mini/ammi_majus","iNatAg-mini/ammophila_arenaria","iNatAg-mini/ammophila_breviligulata","iNatAg-mini/amorpha_fruticosa","iNatAg-mini/amorphophallus_paeoniifolius","iNatAg-mini/amsinckia_douglasiana","iNatAg-mini/amsinckia_lycopsoides","iNatAg-mini/anacardium_occidentale","iNatAg-mini/anagallis_arvensis","iNatAg-mini/ananas_comosus","iNatAg-mini/anchusa_azurea","iNatAg-mini/andrographis_paniculata","iNatAg-mini/andropogon_barbinodis","iNatAg-mini/andropogon_bicornis","iNatAg-mini/andropogon_brachystachyus","iNatAg-mini/andropogon_gayanus","iNatAg-mini/andropogon_gyrans","iNatAg-mini/andropogon_hallii","iNatAg-mini/andropogon_leucostachyus","iNatAg-mini/andropogon_ternarius","iNatAg-mini/androsace_septentrionalis","iNatAg-mini/anemone_hepatica","iNatAg-mini/anemone_nemorosa","iNatAg-mini/anethum_graveolens","iNatAg-mini/angelica_archangelica","iNatAg-mini/angelica_atropurpurea","iNatAg-mini/angelica_sylvestris","iNatAg-mini/angophora_costata","iNatAg-mini/angophora_floribunda","iNatAg-mini/annona_atemoya","iNatAg-mini/annona_cherimola","iNatAg-mini/annona_diversifolia","iNatAg-mini/annona_montana","iNatAg-mini/annona_muricata","iNatAg-mini/annona_purpurea","iNatAg-mini/annona_reticulata","iNatAg-mini/annona_senegalensis","iNatAg-mini/annona_squamosa","iNatAg-mini/anogeissus_acuminata","iNatAg-mini/anogeissus_latifolia","iNatAg-mini/anogeissus_pendula","iNatAg-mini/antennaria_dioica","iNatAg-mini/anthemis_arvensis","iNatAg-mini/anthemis_cotula","iNatAg-mini/anthemis_tinctoria","iNatAg-mini/anthephora_pubescens","iNatAg-mini/anthoxanthum_odoratum","iNatAg-mini/anthriscus_cerefolium","iNatAg-mini/anthyllis_vulneraria","iNatAg-mini/antidesma_bunius","iNatAg-mini/antirrhinum_majus","iNatAg-mini/aphandra_natalia","iNatAg-mini/aphanes_arvensis","iNatAg-mini/apios_americana","iNatAg-mini/apium_graveolens","iNatAg-mini/apocynum_cannabinum","iNatAg-mini/apocynum_sibiricum","iNatAg-mini/aponogeton_distachyos","iNatAg-mini/aquilaria_malaccensis","iNatAg-mini/aquilegia_canadensis","iNatAg-mini/aquilegia_vulgaris","iNatAg-mini/arachis_glabrata","iNatAg-mini/arachis_hypogaea","iNatAg-mini/arachis_pintoi","iNatAg-mini/arachis_villosa","iNatAg-mini/araucaria_angustifolia","iNatAg-mini/araucaria_bidwillii","iNatAg-mini/araucaria_cunninghamii","iNatAg-mini/araucaria_hunsteinii","iNatAg-mini/arbutus_unedo","iNatAg-mini/archidendron_jiringa","iNatAg-mini/arctium_lappa","iNatAg-mini/arctostaphylos_glandulosa","iNatAg-mini/arctostaphylos_manzanita","iNatAg-mini/arctostaphylos_patula","iNatAg-mini/arctostaphylos_uva-ursi","iNatAg-mini/arctostaphylos_viscida","iNatAg-mini/ardisia_crenata","iNatAg-mini/areca_catechu","iNatAg-mini/arenaria_serpyllifolia","iNatAg-mini/arenga_pinnata","iNatAg-mini/argemone_mexicana","iNatAg-mini/argyrodendron_actinophyllum","iNatAg-mini/argyrodendron_peralatum","iNatAg-mini/aria_alnifolia","iNatAg-mini/aristida_adscensionis","iNatAg-mini/aristida_behriana","iNatAg-mini/aristida_congesta","iNatAg-mini/aristida_junciformis","iNatAg-mini/aristida_lanosa","iNatAg-mini/aristida_latifolia","iNatAg-mini/aristida_longispica","iNatAg-mini/aristida_personata","iNatAg-mini/aristida_purpurascens","iNatAg-mini/aristida_schiedeana","iNatAg-mini/aristida_transvaalensis","iNatAg-mini/aristolochia_rotunda","iNatAg-mini/armoracia_rusticana","iNatAg-mini/arnica_montana","iNatAg-mini/arrhenatherum_elatius","iNatAg-mini/artemisia_abrotanum","iNatAg-mini/artemisia_absinthium","iNatAg-mini/artemisia_afra","iNatAg-mini/artemisia_annua","iNatAg-mini/artemisia_campestris","iNatAg-mini/artemisia_dracunculus","iNatAg-mini/artemisia_filifolia","iNatAg-mini/artemisia_glacialis","iNatAg-mini/artemisia_herba-alba","iNatAg-mini/artemisia_ludoviciana","iNatAg-mini/artemisia_stelleriana","iNatAg-mini/artemisia_tridentata","iNatAg-mini/artemisia_vulgaris","iNatAg-mini/artocarpus_altilis","iNatAg-mini/artocarpus_heterophyllus","iNatAg-mini/artocarpus_hirsutus","iNatAg-mini/artocarpus_integer","iNatAg-mini/artocarpus_lakoocha","iNatAg-mini/arundinella_hirta","iNatAg-mini/arundo_donax","iNatAg-mini/asarina_stricta","iNatAg-mini/asarum_europaeum","iNatAg-mini/asclepias_curassavica","iNatAg-mini/asclepias_fascicularis","iNatAg-mini/asclepias_incarnata","iNatAg-mini/asclepias_lanceolata","iNatAg-mini/asclepias_purpurascens","iNatAg-mini/asclepias_speciosa","iNatAg-mini/asclepias_subverticillata","iNatAg-mini/asclepias_tuberosa","iNatAg-mini/asclepias_verticillata","iNatAg-mini/asclepias_viridiflora","iNatAg-mini/asimina_angustifolia","iNatAg-mini/asimina_triloba","iNatAg-mini/asparagus_densiflorus","iNatAg-mini/asparagus_officinalis","iNatAg-mini/asperula_arvensis","iNatAg-mini/asphodelus_albus","iNatAg-mini/asphodelus_tenuifolius","iNatAg-mini/aspilia_angustifolia","iNatAg-mini/asplenium_ruta-muraria","iNatAg-mini/aster_ericoides","iNatAg-mini/astragalus_adsurgens","iNatAg-mini/astragalus_asymmetricus","iNatAg-mini/astragalus_canadensis","iNatAg-mini/astragalus_cicer","iNatAg-mini/astragalus_gummifer","iNatAg-mini/astragalus_mollissimus","iNatAg-mini/astragalus_nuttallianus","iNatAg-mini/astragalus_sinicus","iNatAg-mini/astragalus_tweedyi","iNatAg-mini/astrantia_major","iNatAg-mini/astrebla_lappacea","iNatAg-mini/astrebla_pectinata","iNatAg-mini/astrebla_squarrosa","iNatAg-mini/astrocaryum_jauari","iNatAg-mini/astrocaryum_vulgare","iNatAg-mini/asystasia_gangetica","iNatAg-mini/atalaya_hemiglauca","iNatAg-mini/atherosperma_moschatum","iNatAg-mini/athrotaxis_selaginoides","iNatAg-mini/atriplex_canescens","iNatAg-mini/atriplex_confertifolia","iNatAg-mini/atriplex_gardneri","iNatAg-mini/atriplex_glauca","iNatAg-mini/atriplex_halimus","iNatAg-mini/atriplex_hortensis","iNatAg-mini/atriplex_lentiformis","iNatAg-mini/atriplex_nummularia","iNatAg-mini/atriplex_patula","iNatAg-mini/atriplex_rosea","iNatAg-mini/atriplex_semibaccata","iNatAg-mini/atriplex_vesicaria","iNatAg-mini/atropa_belladonna","iNatAg-mini/attalea_cohune","iNatAg-mini/avena_fatua","iNatAg-mini/avena_sativa","iNatAg-mini/avena_sterilis","iNatAg-mini/avenula_pubescens","iNatAg-mini/averrhoa_bilimbi","iNatAg-mini/averrhoa_carambola","iNatAg-mini/avicennia_germinans","iNatAg-mini/avicennia_marina","iNatAg-mini/avicennia_officinalis","iNatAg-mini/axonopus_affinis","iNatAg-mini/axonopus_compressus","iNatAg-mini/axonopus_fissifolius","iNatAg-mini/axyris_amaranthoides","iNatAg-mini/azadirachta_indica","iNatAg-mini/azanza_garckeana","iNatAg-mini/azolla_filiculoides","iNatAg-mini/azolla_pinnata","iNatAg-mini/baccaurea_motleyana","iNatAg-mini/baccaurea_ramiflora","iNatAg-mini/baccharis_glutinosa","iNatAg-mini/baccharis_pilularis","iNatAg-mini/bactris_gasipaes","iNatAg-mini/baikiaea_plurijuga","iNatAg-mini/balanites_aegyptiaca","iNatAg-mini/bambusa_arundinacea","iNatAg-mini/bambusa_balcooa","iNatAg-mini/bambusa_blumeana","iNatAg-mini/bambusa_tulda","iNatAg-mini/bambusa_vulgaris","iNatAg-mini/banksia_integrifolia","iNatAg-mini/banksia_occidentalis","iNatAg-mini/baphia_nitida","iNatAg-mini/barringtonia_racemosa","iNatAg-mini/basella_alba","iNatAg-mini/bauhinia_aculeata","iNatAg-mini/bauhinia_petersiana","iNatAg-mini/bauhinia_racemosa","iNatAg-mini/bauhinia_rufescens","iNatAg-mini/bauhinia_thonningii","iNatAg-mini/bauhinia_tomentosa","iNatAg-mini/bauhinia_variegata","iNatAg-mini/beckmannia_eruciformis","iNatAg-mini/beckmannia_syzigachne","iNatAg-mini/bellis_perennis","iNatAg-mini/benincasa_hispida","iNatAg-mini/berberis_aquifolium","iNatAg-mini/berberis_thunbergii","iNatAg-mini/berberis_vulgaris","iNatAg-mini/berchemia_discolor","iNatAg-mini/berrya_cordifolia","iNatAg-mini/bersama_lucens","iNatAg-mini/bertholletia_excelsa","iNatAg-mini/beta_vulgaris","iNatAg-mini/betula_nigra","iNatAg-mini/betula_pendula","iNatAg-mini/betula_pubescens","iNatAg-mini/bidens_bipinnata","iNatAg-mini/bidens_cernua","iNatAg-mini/bidens_frondosa","iNatAg-mini/bidens_pilosa","iNatAg-mini/bidens_tripartita","iNatAg-mini/bignonia_capreolata","iNatAg-mini/biserrula_pelecinus","iNatAg-mini/bixa_orellana","iNatAg-mini/blighia_sapida","iNatAg-mini/blumea_balsamifera","iNatAg-mini/bocconia_frutescens","iNatAg-mini/boehmeria_nivea","iNatAg-mini/boerhavia_coccinea","iNatAg-mini/boerhavia_diffusa","iNatAg-mini/boerhavia_erecta","iNatAg-mini/boesenbergia_rotunda","iNatAg-mini/bolusanthus_speciosus","iNatAg-mini/bombacopsis_quinata","iNatAg-mini/bombax_ceiba","iNatAg-mini/bombax_insigne","iNatAg-mini/borago_officinalis","iNatAg-mini/borassus_aethiopum","iNatAg-mini/borassus_flabellifer","iNatAg-mini/borojoa_patinoi","iNatAg-mini/boronia_glabra","iNatAg-mini/boscia_angustifolia","iNatAg-mini/boswellia_serrata","iNatAg-mini/bothriochloa_bladhii","iNatAg-mini/bothriochloa_insculpta","iNatAg-mini/bothriochloa_ischaemum","iNatAg-mini/bothriochloa_pertusa","iNatAg-mini/bougainvillea_glabra","iNatAg-mini/bouteloua_curtipendula","iNatAg-mini/bouteloua_gracilis","iNatAg-mini/brachiaria_brizantha","iNatAg-mini/brachiaria_decumbens","iNatAg-mini/brachiaria_deflexa","iNatAg-mini/brachiaria_distachya","iNatAg-mini/brachiaria_humidicola","iNatAg-mini/brachiaria_mutica","iNatAg-mini/brachiaria_ramosa","iNatAg-mini/brachiaria_serrata","iNatAg-mini/brachychiton_acerifolius","iNatAg-mini/brachychiton_populneus","iNatAg-mini/brachylaena_huillensis","iNatAg-mini/brachystegia_spiciformis","iNatAg-mini/brassica_campestris","iNatAg-mini/brassica_chinensis","iNatAg-mini/brassica_incana","iNatAg-mini/brassica_juncea","iNatAg-mini/brassica_napus","iNatAg-mini/brassica_nigra","iNatAg-mini/brassica_rapa","iNatAg-mini/brassica_tournefortii","iNatAg-mini/bridelia_micrantha","iNatAg-mini/briza_maxima","iNatAg-mini/briza_media","iNatAg-mini/briza_minor","iNatAg-mini/bromus_arvensis","iNatAg-mini/bromus_carinatus","iNatAg-mini/bromus_catharticus","iNatAg-mini/bromus_diandrus","iNatAg-mini/bromus_erectus","iNatAg-mini/bromus_hordeaceus","iNatAg-mini/bromus_inermis","iNatAg-mini/bromus_madritensis","iNatAg-mini/bromus_marginatus","iNatAg-mini/bromus_racemosus","iNatAg-mini/bromus_rubens","iNatAg-mini/bromus_secalinus","iNatAg-mini/bromus_sterilis","iNatAg-mini/bromus_tectorum","iNatAg-mini/bromus_unioloides","iNatAg-mini/bromus_willdenowii","iNatAg-mini/brosimum_alicastrum","iNatAg-mini/broussonetia_papyrifera","iNatAg-mini/bruguiera_gymnorrhiza","iNatAg-mini/bryonia_alba","iNatAg-mini/bryonia_cretica","iNatAg-mini/buchloe_dactyloides","iNatAg-mini/buckinghamia_celsissima","iNatAg-mini/bunias_erucago","iNatAg-mini/bunias_orientalis","iNatAg-mini/burkea_africana","iNatAg-mini/bursera_simaruba","iNatAg-mini/butea_monosperma","iNatAg-mini/butomus_umbellatus","iNatAg-mini/buxus_sempervirens","iNatAg-mini/cacalia_atriplicifolia","iNatAg-mini/caesalpinia_coriaria","iNatAg-mini/caesalpinia_sappan","iNatAg-mini/cajanus_cajan","iNatAg-mini/calamagrostis_epigeios","iNatAg-mini/calathea_allouia","iNatAg-mini/calendula_arvensis","iNatAg-mini/calendula_officinalis","iNatAg-mini/calliandra_calothyrsus","iNatAg-mini/calliandra_tweedii","iNatAg-mini/callisia_angustifolia","iNatAg-mini/callitriche_palustris","iNatAg-mini/callitriche_stagnalis","iNatAg-mini/callitriche_verna","iNatAg-mini/callitris_columellaris","iNatAg-mini/callitris_endlicheri","iNatAg-mini/callitris_macleayana","iNatAg-mini/calluna_vulgaris","iNatAg-mini/calodendrum_capense","iNatAg-mini/calophyllum_apetalum","iNatAg-mini/calophyllum_brasiliense","iNatAg-mini/calophyllum_inophyllum","iNatAg-mini/calopogonium_caeruleum","iNatAg-mini/calopogonium_mucunoides","iNatAg-mini/calotropis_procera","iNatAg-mini/caltha_palustris","iNatAg-mini/calystegia_hederacea","iNatAg-mini/calystegia_occidentalis","iNatAg-mini/calystegia_pubescens","iNatAg-mini/camelina_sativa","iNatAg-mini/camellia_sinensis","iNatAg-mini/campanula_americana","iNatAg-mini/campanula_rapunculus","iNatAg-mini/campanula_rotundifolia","iNatAg-mini/cananga_odorata","iNatAg-mini/canavalia_brasiliensis","iNatAg-mini/canavalia_ensiformis","iNatAg-mini/canavalia_gladiata","iNatAg-mini/canna_indica","iNatAg-mini/canthium_spinosum","iNatAg-mini/capparis_decidua","iNatAg-mini/capparis_spinosa","iNatAg-mini/capparis_tomentosa","iNatAg-mini/capsella_bursa-pastoris","iNatAg-mini/capsicum_annuum","iNatAg-mini/capsicum_chinense","iNatAg-mini/capsicum_frutescens","iNatAg-mini/capsicum_pubescens","iNatAg-mini/caragana_arborescens","iNatAg-mini/caragana_microphylla","iNatAg-mini/carapa_guianensis","iNatAg-mini/cardamine_flexuosa","iNatAg-mini/cardamine_hirsuta","iNatAg-mini/cardamine_impatiens","iNatAg-mini/cardamine_oligosperma","iNatAg-mini/cardamine_parviflora","iNatAg-mini/cardamine_pratensis","iNatAg-mini/cardiospermum_halicacabum","iNatAg-mini/carduus_acanthoides","iNatAg-mini/carduus_crispus","iNatAg-mini/carduus_lanceolatus","iNatAg-mini/carduus_pycnocephalus","iNatAg-mini/carex_nebrascensis","iNatAg-mini/carex_pallescens","iNatAg-mini/carica_cauliflora","iNatAg-mini/carica_papaya","iNatAg-mini/carica_pubescens","iNatAg-mini/cariniana_pyriformis","iNatAg-mini/carissa_carandas","iNatAg-mini/carissa_edulis","iNatAg-mini/carissa_macrocarpa","iNatAg-mini/carlina_acaulis","iNatAg-mini/carludovica_palmata","iNatAg-mini/caroxylon_aphyllum","iNatAg-mini/carpinus_betulus","iNatAg-mini/carthamus_creticus","iNatAg-mini/carthamus_lanatus","iNatAg-mini/carthamus_tinctorius","iNatAg-mini/carum_carvi","iNatAg-mini/carya_illinoensis","iNatAg-mini/caryodendron_orinocense","iNatAg-mini/caryota_urens","iNatAg-mini/casimiroa_edulis","iNatAg-mini/cassia_articulata","iNatAg-mini/cassia_brewsteri","iNatAg-mini/cassia_fistula","iNatAg-mini/cassia_marilandica","iNatAg-mini/cassia_nictitans","iNatAg-mini/cassia_reticulata","iNatAg-mini/cassia_senna","iNatAg-mini/cassia_siamea","iNatAg-mini/cassia_sieberiana","iNatAg-mini/cassia_tomentosa","iNatAg-mini/cassia_tora","iNatAg-mini/castanea_crenata","iNatAg-mini/castanea_dentata","iNatAg-mini/castanea_mollissima","iNatAg-mini/castanea_pumila","iNatAg-mini/castanea_sativa","iNatAg-mini/castanospermum_australe","iNatAg-mini/castilla_elastica","iNatAg-mini/castilleja_angustifolia","iNatAg-mini/castilleja_occidentalis","iNatAg-mini/casuarina_cristata","iNatAg-mini/casuarina_cunninghamiana","iNatAg-mini/casuarina_equisetifolia","iNatAg-mini/casuarina_glauca","iNatAg-mini/casuarina_junghuhniana","iNatAg-mini/casuarina_obesa","iNatAg-mini/catalpa_bignonioides","iNatAg-mini/catha_edulis","iNatAg-mini/catharanthus_roseus","iNatAg-mini/ceanothus_americanus","iNatAg-mini/ceanothus_prostratus","iNatAg-mini/cedrela_odorata","iNatAg-mini/cedrus_deodara","iNatAg-mini/ceiba_pentandra","iNatAg-mini/celastrus_orbiculatus","iNatAg-mini/celastrus_scandens","iNatAg-mini/celosia_argentea","iNatAg-mini/celtis_australis","iNatAg-mini/cenchrus_biflorus","iNatAg-mini/cenchrus_ciliaris","iNatAg-mini/cenchrus_echinatus","iNatAg-mini/cenchrus_setigerus","iNatAg-mini/cenchrus_spinifex","iNatAg-mini/cenchrus_tribuloides","iNatAg-mini/centaurea_biebersteinii","iNatAg-mini/centaurea_calcitrapa","iNatAg-mini/centaurea_cyanus","iNatAg-mini/centaurea_diluta","iNatAg-mini/centaurea_jacea","iNatAg-mini/centaurea_melitensis","iNatAg-mini/centaurea_nigra","iNatAg-mini/centaurea_nigrescens","iNatAg-mini/centaurea_solstitalis","iNatAg-mini/centaurea_solstitialis","iNatAg-mini/centaurea_stoebe","iNatAg-mini/centaurea_virgata","iNatAg-mini/centella_asiatica","iNatAg-mini/centropodia_glauca","iNatAg-mini/centrosema_brasilianum","iNatAg-mini/centrosema_macrocarpum","iNatAg-mini/centrosema_pascuorum","iNatAg-mini/centrosema_plumieri","iNatAg-mini/centrosema_pubescens","iNatAg-mini/centrosema_virginianum","iNatAg-mini/cephalanthus_occidentalis","iNatAg-mini/cerastium_arvense","iNatAg-mini/cerastium_nutans","iNatAg-mini/cerastium_vulgatum","iNatAg-mini/ceratonia_siliqua","iNatAg-mini/ceratopetalum_apetalum","iNatAg-mini/ceratophyllum_demersum","iNatAg-mini/ceratophyllum_echinatum","iNatAg-mini/ceriops_tagal","iNatAg-mini/cestrum_diurnum","iNatAg-mini/ceterach_officinarum","iNatAg-mini/chaerophyllum_tainturieri","iNatAg-mini/chamaebatia_foliolosa","iNatAg-mini/chamaecrista_nictitans","iNatAg-mini/chamaecrista_rotundifolia","iNatAg-mini/chamaedorea_tepejilote","iNatAg-mini/chamaerops_humilis","iNatAg-mini/chara_intermedia","iNatAg-mini/chelidonium_majus","iNatAg-mini/chenopodium_album","iNatAg-mini/chenopodium_ambrosioides","iNatAg-mini/chenopodium_ambrosoides","iNatAg-mini/chenopodium_berlandieri","iNatAg-mini/chenopodium_bonus-henricus","iNatAg-mini/chenopodium_botrys","iNatAg-mini/chenopodium_ficifolium","iNatAg-mini/chenopodium_gigantospermum","iNatAg-mini/chenopodium_glaucum","iNatAg-mini/chenopodium_missouriense","iNatAg-mini/chenopodium_multifidum","iNatAg-mini/chenopodium_murale","iNatAg-mini/chenopodium_polyspermum","iNatAg-mini/chenopodium_quinoa","iNatAg-mini/chenopodium_rubrum","iNatAg-mini/chenopodium_urbicum","iNatAg-mini/chloris_ciliata","iNatAg-mini/chloris_gayana","iNatAg-mini/chloris_roxburghiana","iNatAg-mini/chloris_verticillata","iNatAg-mini/chloris_virgata","iNatAg-mini/chlorogalum_pomeridianum","iNatAg-mini/chlorophora_excelsa","iNatAg-mini/chlorophytum_comosum","iNatAg-mini/chloroxylon_swietenia","iNatAg-mini/chromolaena_odorata","iNatAg-mini/chrysanthemum_coronarium","iNatAg-mini/chrysanthemum_leucanthemum","iNatAg-mini/chrysophyllum_cainito","iNatAg-mini/chrysopogon_aciculatus","iNatAg-mini/chukrasia_velutina","iNatAg-mini/cicer_arietinum","iNatAg-mini/cichorium_endivia","iNatAg-mini/cichorium_intybus","iNatAg-mini/cicuta_bulbifera","iNatAg-mini/cicuta_mackenzieana","iNatAg-mini/cicuta_maculata","iNatAg-mini/cicuta_virosa","iNatAg-mini/cimicifuga_racemosa","iNatAg-mini/cinchona_officinalis","iNatAg-mini/cinchona_pubescens","iNatAg-mini/cinnamomum_burmannii","iNatAg-mini/cinnamomum_camphora","iNatAg-mini/cinnamomum_cassia","iNatAg-mini/cinnamomum_verum","iNatAg-mini/cistus_creticus","iNatAg-mini/citrofortunella_microcarpa","iNatAg-mini/citrullus_colocynthis","iNatAg-mini/citrullus_lanatus","iNatAg-mini/citrus_aurantifolia","iNatAg-mini/citrus_aurantium","iNatAg-mini/citrus_deliciosa","iNatAg-mini/citrus_latifolia","iNatAg-mini/citrus_limon","iNatAg-mini/citrus_madurensis","iNatAg-mini/citrus_medica","iNatAg-mini/citrus_paradisi","iNatAg-mini/citrus_reticulata","iNatAg-mini/citrus_sinensis","iNatAg-mini/citrus_unshiu","iNatAg-mini/clausena_lansium","iNatAg-mini/claytonia_caroliniana","iNatAg-mini/claytonia_virginica","iNatAg-mini/cleistogenes_squarrosa","iNatAg-mini/clematis_ligusticifolia","iNatAg-mini/clematis_orientalis","iNatAg-mini/clematis_virginiana","iNatAg-mini/clematis_vitalba","iNatAg-mini/cleome_gynandra","iNatAg-mini/cleome_hassleriana","iNatAg-mini/cleome_viscosa","iNatAg-mini/clitoria_laurifolia","iNatAg-mini/clitoria_ternatea","iNatAg-mini/clusia_occidentalis","iNatAg-mini/cnicus_benedictus","iNatAg-mini/coccoloba_uvifera","iNatAg-mini/cochlospermum_religiosum","iNatAg-mini/cocos_nucifera","iNatAg-mini/coffea_arabica","iNatAg-mini/coffea_canephora","iNatAg-mini/coffea_liberica","iNatAg-mini/coix_lacryma-jobi","iNatAg-mini/cola_acuminata","iNatAg-mini/cola_nitida","iNatAg-mini/colchicum_autumnale","iNatAg-mini/coleus_amboinicus","iNatAg-mini/colocasia_esculenta","iNatAg-mini/colophospermum_mopane","iNatAg-mini/combretum_aculeatum","iNatAg-mini/combretum_micranthum","iNatAg-mini/combretum_molle","iNatAg-mini/commelina_bengalensis","iNatAg-mini/commelina_benghalensis","iNatAg-mini/commelina_communis","iNatAg-mini/commelina_erecta","iNatAg-mini/commiphora_africana","iNatAg-mini/conium_maculatum","iNatAg-mini/conocarpus_erectus","iNatAg-mini/conocarpus_lancifolius","iNatAg-mini/convallaria_majalis","iNatAg-mini/convolvulus_althaeoides","iNatAg-mini/convolvulus_arvensis","iNatAg-mini/convolvulus_equitans","iNatAg-mini/convolvulus_sepium","iNatAg-mini/copaifera_langsdorffii","iNatAg-mini/corchorus_aestuans","iNatAg-mini/corchorus_capsularis","iNatAg-mini/cordia_africana","iNatAg-mini/cordia_alliodora","iNatAg-mini/coreopsis_lanceolata","iNatAg-mini/coreopsis_tinctoria","iNatAg-mini/coreopsis_verticillata","iNatAg-mini/coriandrum_sativum","iNatAg-mini/corispermum_hyssopifolium","iNatAg-mini/corispermum_villosum","iNatAg-mini/cornus_canadensis","iNatAg-mini/cornus_florida","iNatAg-mini/cornus_mas","iNatAg-mini/cornus_sanguinea","iNatAg-mini/coronilla_varia","iNatAg-mini/corylus_avellana","iNatAg-mini/corylus_maxima","iNatAg-mini/cotoneaster_franchetii","iNatAg-mini/cotula_coronopifolia","iNatAg-mini/crambe_cordifolia","iNatAg-mini/crambe_maritima","iNatAg-mini/crassula_sieberiana","iNatAg-mini/crataegus_crus-galli","iNatAg-mini/crataegus_crus-gallii","iNatAg-mini/crataegus_marshallii","iNatAg-mini/crataegus_monogyna","iNatAg-mini/crataegus_oxyacantha","iNatAg-mini/crataegus_rivularis","iNatAg-mini/cratylia_argentea","iNatAg-mini/crepis_biennis","iNatAg-mini/crepis_occidentalis","iNatAg-mini/crepis_vesicaria","iNatAg-mini/cressa_truxillensis","iNatAg-mini/crinum_americanum","iNatAg-mini/crithmum_maritimum","iNatAg-mini/crocus_sativus","iNatAg-mini/crotalaria_juncea","iNatAg-mini/crotalaria_lanceolata","iNatAg-mini/crotalaria_pallida","iNatAg-mini/crotalaria_podocarpa","iNatAg-mini/crotalaria_retusa","iNatAg-mini/crotalaria_sagittalis","iNatAg-mini/crotalaria_spectabilis","iNatAg-mini/croton_monanthogynus","iNatAg-mini/crucianella_angustifolia","iNatAg-mini/cryptocarya_erythroxylon","iNatAg-mini/cryptomeria_japonica","iNatAg-mini/cryptotaenia_japonica","iNatAg-mini/ctenium_concinnum","iNatAg-mini/cucumis_anguria","iNatAg-mini/cucumis_melo","iNatAg-mini/cucumis_sativus","iNatAg-mini/cucurbita_argyrosperma","iNatAg-mini/cucurbita_digitata","iNatAg-mini/cucurbita_ficifolia","iNatAg-mini/cucurbita_foetidissima","iNatAg-mini/cucurbita_maxima","iNatAg-mini/cucurbita_mixta","iNatAg-mini/cucurbita_moschata","iNatAg-mini/cucurbita_pepo","iNatAg-mini/cunninghamia_lanceolata","iNatAg-mini/cupania_auriculata","iNatAg-mini/cuphea_viscosissima","iNatAg-mini/cupressus_arizonica","iNatAg-mini/cupressus_lusitanica","iNatAg-mini/cupressus_macrocarpa","iNatAg-mini/cupressus_sempervirens","iNatAg-mini/cupressus_torulosa","iNatAg-mini/curcuma_longa","iNatAg-mini/curcuma_zedoaria","iNatAg-mini/cuscuta_approximata","iNatAg-mini/cuscuta_epithymum","iNatAg-mini/cuscuta_obtusiflora","iNatAg-mini/cuscuta_planiflora","iNatAg-mini/cuscuta_sandwichiana","iNatAg-mini/cydonia_oblonga","iNatAg-mini/cymbalaria_muralis","iNatAg-mini/cymbopogon_citratus","iNatAg-mini/cynanchum_scoparium","iNatAg-mini/cynara_cardunculus","iNatAg-mini/cynara_scolymus","iNatAg-mini/cynodon_dactylon","iNatAg-mini/cynodon_nlemfuensis","iNatAg-mini/cynoglossum_officinale","iNatAg-mini/cynometra_cauliflora","iNatAg-mini/cynosurus_cristatus","iNatAg-mini/cyperus_alopecuroides","iNatAg-mini/cyperus_articulatus","iNatAg-mini/cyperus_compressus","iNatAg-mini/cyperus_croceus","iNatAg-mini/cyperus_cuspidatus","iNatAg-mini/cyperus_difformis","iNatAg-mini/cyperus_eragrostis","iNatAg-mini/cyperus_erythrorhizos","iNatAg-mini/cyperus_esculentus","iNatAg-mini/cyperus_flavescens","iNatAg-mini/cyperus_fuscus","iNatAg-mini/cyperus_hyalinus","iNatAg-mini/cyperus_involucratus","iNatAg-mini/cyperus_iria","iNatAg-mini/cyperus_lanceolatus","iNatAg-mini/cyperus_longus","iNatAg-mini/cyperus_odoratus","iNatAg-mini/cyperus_pilosus","iNatAg-mini/cyperus_prolifer","iNatAg-mini/cyperus_pseudovegetus","iNatAg-mini/cyperus_rotundus","iNatAg-mini/cyperus_sanguinolentus","iNatAg-mini/cyperus_squarrosus","iNatAg-mini/cyperus_strigosus","iNatAg-mini/cyperus_subsquarrosus","iNatAg-mini/cyperus_surinamensis","iNatAg-mini/cyphomandra_betacea","iNatAg-mini/cytisus_albus","iNatAg-mini/cytisus_proliferus","iNatAg-mini/cytisus_supinus","iNatAg-mini/dacrydium_franklinii","iNatAg-mini/dactylis_glomerata","iNatAg-mini/dactyloctenium_aegyptium","iNatAg-mini/dactyloctenium_giganteum","iNatAg-mini/dalbergia_latifolia","iNatAg-mini/dalbergia_melanoxylon","iNatAg-mini/dalbergia_sissoo","iNatAg-mini/daphne_laureola","iNatAg-mini/daphne_mezereum","iNatAg-mini/datura_ferox","iNatAg-mini/datura_quercifolia","iNatAg-mini/datura_stramonium","iNatAg-mini/daucus_carota","iNatAg-mini/daucus_carrota","iNatAg-mini/delairea_odorata","iNatAg-mini/delonix_regia","iNatAg-mini/delphinium_bicolor","iNatAg-mini/delphinium_carolinianum","iNatAg-mini/delphinium_menziesii","iNatAg-mini/delphinium_trolliifolium","iNatAg-mini/dendrocalamus_asper","iNatAg-mini/dendrocalamus_giganteus","iNatAg-mini/dendrocalamus_strictus","iNatAg-mini/dendrolobium_umbellatum","iNatAg-mini/derris_elliptica","iNatAg-mini/deschampsia_caespitosa","iNatAg-mini/deschampsia_flexuosa","iNatAg-mini/desmanthus_leptophyllus","iNatAg-mini/desmanthus_virgatus","iNatAg-mini/desmodium_affine","iNatAg-mini/desmodium_barbatum","iNatAg-mini/desmodium_cuneatum","iNatAg-mini/desmodium_cuspidatum","iNatAg-mini/desmodium_distortum","iNatAg-mini/desmodium_gyroides","iNatAg-mini/desmodium_heterophyllum","iNatAg-mini/desmodium_incanum","iNatAg-mini/desmodium_intortum","iNatAg-mini/desmodium_paniculatum","iNatAg-mini/desmodium_psilocarpum","iNatAg-mini/desmodium_reticulatum","iNatAg-mini/desmodium_sandwicense","iNatAg-mini/desmodium_scorpiurus","iNatAg-mini/desmodium_tortuosum","iNatAg-mini/desmodium_triflorum","iNatAg-mini/desmodium_uncinatum","iNatAg-mini/desmodium_velutinum","iNatAg-mini/dialium_guineense","iNatAg-mini/dianthus_armeria","iNatAg-mini/dichanthium_annulatum","iNatAg-mini/dichanthium_aristatum","iNatAg-mini/dichanthium_caricosum","iNatAg-mini/dichanthium_sericeum","iNatAg-mini/dichondra_carolinensis","iNatAg-mini/dichondra_micrantha","iNatAg-mini/dichrostachys_cinerea","iNatAg-mini/dictamnus_albus","iNatAg-mini/didymopanax_morototoni","iNatAg-mini/diervilla_lonicera","iNatAg-mini/digitalis_lanata","iNatAg-mini/digitalis_lutea","iNatAg-mini/digitalis_purpurea","iNatAg-mini/digitaria_argyrograpta","iNatAg-mini/digitaria_ciliaris","iNatAg-mini/digitaria_decumbens","iNatAg-mini/digitaria_didactyla","iNatAg-mini/digitaria_eriantha","iNatAg-mini/digitaria_tricholaenoides","iNatAg-mini/digitaria_violascens","iNatAg-mini/dillenia_indica","iNatAg-mini/dillenia_pentagyna","iNatAg-mini/diodia_virginiana","iNatAg-mini/dioscorea_alata","iNatAg-mini/dioscorea_bulbifera","iNatAg-mini/dioscorea_esculenta","iNatAg-mini/dioscorea_opposita","iNatAg-mini/dioscorea_oppositifolia","iNatAg-mini/dioscorea_trifida","iNatAg-mini/diospyros_digyna","iNatAg-mini/diospyros_kaki","iNatAg-mini/diospyros_malabarica","iNatAg-mini/diospyros_melanoxylon","iNatAg-mini/diospyros_mespiliformis","iNatAg-mini/diospyros_virginiana","iNatAg-mini/diplachne_fusca","iNatAg-mini/diploglottis_cunninghamii","iNatAg-mini/dipsacus_fullonum","iNatAg-mini/dipsacus_laciniatus","iNatAg-mini/dipsacus_sylvestris","iNatAg-mini/dipterocarpus_alatus","iNatAg-mini/dipterocarpus_indicus","iNatAg-mini/dipterocarpus_turbinatus","iNatAg-mini/dodonaea_viscosa","iNatAg-mini/dovyalis_caffra","iNatAg-mini/dovyalis_hebecarpa","iNatAg-mini/draba_nemorosa","iNatAg-mini/draba_verna","iNatAg-mini/dracocephalum_parviflorum","iNatAg-mini/dracocephalum_thymiflorum","iNatAg-mini/drosera_rotundifolia","iNatAg-mini/dryopteris_filix-mas","iNatAg-mini/duboisia_myoporoides","iNatAg-mini/durio_zibethinus","iNatAg-mini/dysoxylum_fraserianum","iNatAg-mini/ecballium_elaterium","iNatAg-mini/echinacea_purpurea","iNatAg-mini/echinochloa_colona","iNatAg-mini/echinochloa_crus-galli","iNatAg-mini/echinochloa_frumentacea","iNatAg-mini/echinochloa_polystachya","iNatAg-mini/echinochloa_pyramidalis","iNatAg-mini/echinops_sphaerocephalus","iNatAg-mini/echium_plantagineum","iNatAg-mini/echium_vulgare","iNatAg-mini/ehrharta_calycina","iNatAg-mini/ehrharta_erecta","iNatAg-mini/ehrharta_longiflora","iNatAg-mini/ehrharta_villosa","iNatAg-mini/eichhornia_crassipes","iNatAg-mini/ekebergia_capensis","iNatAg-mini/elaeagnus_angustifolia","iNatAg-mini/elaeagnus_multiflora","iNatAg-mini/elaeis_guineensis","iNatAg-mini/elaeis_oleifera","iNatAg-mini/elaeocarpus_grandis","iNatAg-mini/eleagnus_angustifolia","iNatAg-mini/elegia_cuspidata","iNatAg-mini/eleocharis_cellulosa","iNatAg-mini/eleocharis_dulcis","iNatAg-mini/eleocharis_macrostachya","iNatAg-mini/eleocharis_montevidensis","iNatAg-mini/eleocharis_vivipara","iNatAg-mini/elephantopus_mollis","iNatAg-mini/elephantorrhiza_elephantina","iNatAg-mini/elettaria_cardamomum","iNatAg-mini/eleusine_indica","iNatAg-mini/ellisia_nyctelea","iNatAg-mini/elsholtzia_ciliata","iNatAg-mini/elymus_canadensis","iNatAg-mini/elymus_caput-medusae","iNatAg-mini/elymus_cinereus","iNatAg-mini/elymus_condensatus","iNatAg-mini/elymus_dahuricus","iNatAg-mini/elymus_glaucus","iNatAg-mini/elymus_viginicus","iNatAg-mini/elymus_virginicus","iNatAg-mini/emilia_sonchifolia","iNatAg-mini/encalypta_intermedia","iNatAg-mini/enneapogon_scoparius","iNatAg-mini/ensete_ventricosum","iNatAg-mini/entada_abyssinica","iNatAg-mini/entada_africana","iNatAg-mini/enterolobium_cyclocarpum","iNatAg-mini/epilobium_angustifolium","iNatAg-mini/epilobium_ciliatum","iNatAg-mini/equisetum_arvense","iNatAg-mini/equisetum_hyemale","iNatAg-mini/equisetum_palustre","iNatAg-mini/equisetum_sylvaticum","iNatAg-mini/equisetum_telmateia","iNatAg-mini/eragrostis_amabilis","iNatAg-mini/eragrostis_barrelieri","iNatAg-mini/eragrostis_capillaris","iNatAg-mini/eragrostis_chloromelas","iNatAg-mini/eragrostis_cilianensis","iNatAg-mini/eragrostis_curvula","iNatAg-mini/eragrostis_interrupta","iNatAg-mini/eragrostis_lehmanniana","iNatAg-mini/eragrostis_minor","iNatAg-mini/eragrostis_obtusa","iNatAg-mini/eragrostis_pilosa","iNatAg-mini/eragrostis_racemosa","iNatAg-mini/eragrostis_superba","iNatAg-mini/eragrostis_tef","iNatAg-mini/eragrostis_tremula","iNatAg-mini/eragrostis_trichodes","iNatAg-mini/eragrostis_unioloides","iNatAg-mini/eremochloa_ophiuroides","iNatAg-mini/erigeron_canadensis","iNatAg-mini/erigeron_cascadensis","iNatAg-mini/erigeron_divaricatus","iNatAg-mini/erigeron_philadelphicus","iNatAg-mini/eriobotrya_japonica","iNatAg-mini/eriochloa_punctata","iNatAg-mini/eriogonum_deflexum","iNatAg-mini/eriogonum_longifolium","iNatAg-mini/eriosema_psoraleoides","iNatAg-mini/eruca_sativa","iNatAg-mini/eryngium_campestre","iNatAg-mini/eryngium_yuccifolium","iNatAg-mini/erysimum_cheiranthoides","iNatAg-mini/erysimum_hieracifolium","iNatAg-mini/erysimum_hieraciifolium","iNatAg-mini/erysimum_repandum","iNatAg-mini/erythrina_abyssinica","iNatAg-mini/erythrina_caffra","iNatAg-mini/erythrina_edulis","iNatAg-mini/erythrina_fusca","iNatAg-mini/erythrina_poeppigiana","iNatAg-mini/erythrina_variegata","iNatAg-mini/erythrina_vespertilio","iNatAg-mini/erythrophleum_chlorostachys","iNatAg-mini/erythroxylum_coca","iNatAg-mini/eucalyptus_accedens","iNatAg-mini/eucalyptus_agglomerata","iNatAg-mini/eucalyptus_albens","iNatAg-mini/eucalyptus_astringens","iNatAg-mini/eucalyptus_bosistoana","iNatAg-mini/eucalyptus_botryoides","iNatAg-mini/eucalyptus_brockwayi","iNatAg-mini/eucalyptus_calophylla","iNatAg-mini/eucalyptus_camaldulensis","iNatAg-mini/eucalyptus_cinerea","iNatAg-mini/eucalyptus_citriodora","iNatAg-mini/eucalyptus_cladocalyx","iNatAg-mini/eucalyptus_cloeziana","iNatAg-mini/eucalyptus_consideniana","iNatAg-mini/eucalyptus_cornuta","iNatAg-mini/eucalyptus_crebra","iNatAg-mini/eucalyptus_cypellocarpa","iNatAg-mini/eucalyptus_dalrympleana","iNatAg-mini/eucalyptus_deglupta","iNatAg-mini/eucalyptus_delegatensis","iNatAg-mini/eucalyptus_diversicolor","iNatAg-mini/eucalyptus_dumosa","iNatAg-mini/eucalyptus_elata","iNatAg-mini/eucalyptus_eremophila","iNatAg-mini/eucalyptus_eugenioides","iNatAg-mini/eucalyptus_exserta","iNatAg-mini/eucalyptus_fastigata","iNatAg-mini/eucalyptus_fraxinoides","iNatAg-mini/eucalyptus_globoidea","iNatAg-mini/eucalyptus_globulus","iNatAg-mini/eucalyptus_gomphocephala","iNatAg-mini/eucalyptus_gongylocarpa","iNatAg-mini/eucalyptus_grandis","iNatAg-mini/eucalyptus_guilfoylei","iNatAg-mini/eucalyptus_gummifera","iNatAg-mini/eucalyptus_intertexta","iNatAg-mini/eucalyptus_jacksonii","iNatAg-mini/eucalyptus_johnstonii","iNatAg-mini/eucalyptus_kessellii","iNatAg-mini/eucalyptus_laophila","iNatAg-mini/eucalyptus_largiflorens","iNatAg-mini/eucalyptus_leucoxylon","iNatAg-mini/eucalyptus_longifolia","iNatAg-mini/eucalyptus_loxophleba","iNatAg-mini/eucalyptus_maculata","iNatAg-mini/eucalyptus_marginata","iNatAg-mini/eucalyptus_melliodora","iNatAg-mini/eucalyptus_microcarpa","iNatAg-mini/eucalyptus_microcorys","iNatAg-mini/eucalyptus_microtheca","iNatAg-mini/eucalyptus_mitchelliana","iNatAg-mini/eucalyptus_moluccana","iNatAg-mini/eucalyptus_muelleriana","iNatAg-mini/eucalyptus_nigrifunda","iNatAg-mini/eucalyptus_niphophila","iNatAg-mini/eucalyptus_nitens","iNatAg-mini/eucalyptus_obliqua","iNatAg-mini/eucalyptus_occidentalis","iNatAg-mini/eucalyptus_ochrophloia","iNatAg-mini/eucalyptus_oreades","iNatAg-mini/eucalyptus_paniculata","iNatAg-mini/eucalyptus_papuana","iNatAg-mini/eucalyptus_patens","iNatAg-mini/eucalyptus_pauciflora","iNatAg-mini/eucalyptus_pellita","iNatAg-mini/eucalyptus_phoenicea","iNatAg-mini/eucalyptus_pilularis","iNatAg-mini/eucalyptus_piperita","iNatAg-mini/eucalyptus_planchoniana","iNatAg-mini/eucalyptus_pleurocarpa","iNatAg-mini/eucalyptus_polyanthemos","iNatAg-mini/eucalyptus_populnea","iNatAg-mini/eucalyptus_propinqua","iNatAg-mini/eucalyptus_pulchella","iNatAg-mini/eucalyptus_punctata","iNatAg-mini/eucalyptus_pyrocarpa","iNatAg-mini/eucalyptus_quadrangulata","iNatAg-mini/eucalyptus_regnans","iNatAg-mini/eucalyptus_resinifera","iNatAg-mini/eucalyptus_robusta","iNatAg-mini/eucalyptus_rubida","iNatAg-mini/eucalyptus_rudis","iNatAg-mini/eucalyptus_saligna","iNatAg-mini/eucalyptus_salmonophloia","iNatAg-mini/eucalyptus_salubris","iNatAg-mini/eucalyptus_sargentii","iNatAg-mini/eucalyptus_scias","iNatAg-mini/eucalyptus_sideroxylon","iNatAg-mini/eucalyptus_sieberi","iNatAg-mini/eucalyptus_socialis","iNatAg-mini/eucalyptus_subcrenulata","iNatAg-mini/eucalyptus_tereticornis","iNatAg-mini/eucalyptus_thozetiana","iNatAg-mini/eucalyptus_transcontinentalis","iNatAg-mini/eucalyptus_trivalva","iNatAg-mini/eucalyptus_urnigera","iNatAg-mini/eucalyptus_urophylla","iNatAg-mini/eucalyptus_utilis","iNatAg-mini/eucalyptus_viminalis","iNatAg-mini/eucalyptus_wandoo","iNatAg-mini/eucalyptus_woollsiana","iNatAg-mini/eucryphia_lucida","iNatAg-mini/eugenia_aromatica","iNatAg-mini/eugenia_stipitata","iNatAg-mini/eugenia_uniflora","iNatAg-mini/euonymus_atropurpureus","iNatAg-mini/euonymus_europaeus","iNatAg-mini/euonymus_japonicus","iNatAg-mini/eupatorium_album","iNatAg-mini/eupatorium_altissimum","iNatAg-mini/eupatorium_cannabinum","iNatAg-mini/eupatorium_compositifolium","iNatAg-mini/eupatorium_hyssopifolium","iNatAg-mini/eupatorium_maculatum","iNatAg-mini/eupatorium_perfoliatum","iNatAg-mini/eupatorium_purpureum","iNatAg-mini/eupatorium_serotinum","iNatAg-mini/euphorbia_cyathophora","iNatAg-mini/euphorbia_cyparissias","iNatAg-mini/euphorbia_dendroides","iNatAg-mini/euphorbia_epicyparissias","iNatAg-mini/euphorbia_esula","iNatAg-mini/euphorbia_helioscopia","iNatAg-mini/euphorbia_heterophylla","iNatAg-mini/euphorbia_hirsuta","iNatAg-mini/euphorbia_hirta","iNatAg-mini/euphorbia_hyssopifolia","iNatAg-mini/euphorbia_lathyris","iNatAg-mini/euphorbia_lathyrus","iNatAg-mini/euphorbia_maculata","iNatAg-mini/euphorbia_marginata","iNatAg-mini/euphorbia_nutans","iNatAg-mini/euphorbia_peplis","iNatAg-mini/euphorbia_peplus","iNatAg-mini/euphorbia_platyphyllos","iNatAg-mini/euphorbia_prostata","iNatAg-mini/euphorbia_prostrata","iNatAg-mini/euphorbia_serphyllifolia","iNatAg-mini/euphorbia_serpyllifolia","iNatAg-mini/euphorbia_serrata","iNatAg-mini/euphorbia_serrulata","iNatAg-mini/euphorbia_spathulata","iNatAg-mini/euphorbia_terracina","iNatAg-mini/euphorbia_tirucalli","iNatAg-mini/euphorbia_vermiculata","iNatAg-mini/eurycoma_longifolia","iNatAg-mini/eusideroxylon_zwageri","iNatAg-mini/eustachys_paspaloides","iNatAg-mini/euterpe_edulis","iNatAg-mini/euterpe_oleracea","iNatAg-mini/euthamia_occidentalis","iNatAg-mini/evax_multicaulis","iNatAg-mini/evonymus_europaeus","iNatAg-mini/excoecaria_agallocha","iNatAg-mini/fagopyrum_esculentum","iNatAg-mini/fagopyrum_tataricum","iNatAg-mini/fagraea_fragrans","iNatAg-mini/fagus_grandifolia","iNatAg-mini/fagus_sylvatica","iNatAg-mini/faidherbia_albida","iNatAg-mini/faurea_saligna","iNatAg-mini/feijoa_sellowiana","iNatAg-mini/festuca_arundinacea","iNatAg-mini/festuca_gigantea","iNatAg-mini/festuca_idahoensis","iNatAg-mini/festuca_microstachys","iNatAg-mini/festuca_myuros","iNatAg-mini/festuca_ovina","iNatAg-mini/festuca_pratensis","iNatAg-mini/festuca_rubra","iNatAg-mini/festuca_scabra","iNatAg-mini/fibraurea_tinctoria","iNatAg-mini/ficus_abutilifolia","iNatAg-mini/ficus_auriculata","iNatAg-mini/ficus_benghalensis","iNatAg-mini/ficus_carica","iNatAg-mini/ficus_elastica","iNatAg-mini/ficus_glumosa","iNatAg-mini/ficus_macrophylla","iNatAg-mini/ficus_sycomorus","iNatAg-mini/ficus_thonningii","iNatAg-mini/filago_gallica","iNatAg-mini/filipendula_vulgaris","iNatAg-mini/flacourtia_indica","iNatAg-mini/flemingia_macrophylla","iNatAg-mini/flindersia_bourjotiana","iNatAg-mini/flindersia_brayleyana","iNatAg-mini/flindersia_pimenteliana","iNatAg-mini/foeniculum_vulgare","iNatAg-mini/fortunella_hindsii","iNatAg-mini/fortunella_japonica","iNatAg-mini/fortunella_margarita","iNatAg-mini/fragaria_ananassa","iNatAg-mini/fragaria_chiloensis","iNatAg-mini/fragaria_vesca","iNatAg-mini/fragaria_virginiana","iNatAg-mini/frangula_alnus","iNatAg-mini/fraxinus_americana","iNatAg-mini/fraxinus_excelsior","iNatAg-mini/frithia_humilis","iNatAg-mini/fuirena_simplex","iNatAg-mini/fumaria_capreolata","iNatAg-mini/fumaria_officinalis","iNatAg-mini/fumaria_parviflora","iNatAg-mini/gaillardia_pulchella","iNatAg-mini/galactia_marginalis","iNatAg-mini/galactia_striata","iNatAg-mini/galega_officinalis","iNatAg-mini/galega_orientalis","iNatAg-mini/galeopsis_ladanum","iNatAg-mini/galeopsis_tetrahit","iNatAg-mini/galinsoga_quadriradiata","iNatAg-mini/galium_aparine","iNatAg-mini/galium_mollugo","iNatAg-mini/galium_paniculatum","iNatAg-mini/galium_parisiense","iNatAg-mini/galium_saxatile","iNatAg-mini/galium_spurium","iNatAg-mini/galium_tricornutum","iNatAg-mini/galium_verum","iNatAg-mini/garcinia_dulcis","iNatAg-mini/garcinia_mangostana","iNatAg-mini/garcinia_multiflora","iNatAg-mini/garcinia_xanthochymus","iNatAg-mini/garuga_pinnata","iNatAg-mini/gaultheria_procumbens","iNatAg-mini/gaura_biennis","iNatAg-mini/geissois_benthamii","iNatAg-mini/genipa_americana","iNatAg-mini/genista_canariensis","iNatAg-mini/genista_tinctoria","iNatAg-mini/gentiana_acaulis","iNatAg-mini/gentiana_lutea","iNatAg-mini/geranium_carolinianum","iNatAg-mini/geranium_dissectum","iNatAg-mini/geranium_molle","iNatAg-mini/geranium_pratense","iNatAg-mini/geranium_pusillum","iNatAg-mini/geranium_robertianum","iNatAg-mini/girardinia_diversifolia","iNatAg-mini/glechoma_hederacea","iNatAg-mini/glecoma_hederacea","iNatAg-mini/gleditsia_triacanthos","iNatAg-mini/gliricidia_sepium","iNatAg-mini/globularia_vulgaris","iNatAg-mini/glyceria_fluitans","iNatAg-mini/glyceria_septentrionalis","iNatAg-mini/glycine_max","iNatAg-mini/glycyrrhiza_glabra","iNatAg-mini/glycyrrhiza_lepidota","iNatAg-mini/gmelina_arborea","iNatAg-mini/gmelina_leichhardtii","iNatAg-mini/gnaphalium_calviceps","iNatAg-mini/gnaphalium_luteo-album","iNatAg-mini/gnaphalium_luteoalbum","iNatAg-mini/gnaphalium_palustre","iNatAg-mini/gnaphalium_pensylvanicum","iNatAg-mini/gnaphalium_purpureum","iNatAg-mini/gnaphalium_uliginosum","iNatAg-mini/gossypium_barbadense","iNatAg-mini/gossypium_herbaceum","iNatAg-mini/gossypium_hirsutum","iNatAg-mini/grevillea_parallela","iNatAg-mini/grevillea_robusta","iNatAg-mini/grewia_asiatica","iNatAg-mini/grewia_bicolor","iNatAg-mini/grewia_tiliifolia","iNatAg-mini/guaiacum_officinale","iNatAg-mini/guaiacum_sanctum","iNatAg-mini/guazuma_ulmifolia","iNatAg-mini/guizotia_abyssinica","iNatAg-mini/gunnera_tinctoria","iNatAg-mini/gypsophila_paniculata","iNatAg-mini/hagenia_abyssinica","iNatAg-mini/hamamelis_virginiana","iNatAg-mini/hardwickia_binata","iNatAg-mini/harpagophytum_procumbens","iNatAg-mini/harpochloa_falx","iNatAg-mini/harungana_madagascariensis","iNatAg-mini/hedera_helix","iNatAg-mini/hedysarum_coronarium","iNatAg-mini/hedysarum_pallidum","iNatAg-mini/hedysarum_spinosissimum","iNatAg-mini/helenium_autumnale","iNatAg-mini/helenium_tenuifolium","iNatAg-mini/helianthus_annus","iNatAg-mini/helianthus_annuus","iNatAg-mini/helianthus_ciliaris","iNatAg-mini/helianthus_pauciflorus","iNatAg-mini/helianthus_petiolaris","iNatAg-mini/helianthus_tuberosus","iNatAg-mini/helictotrichon_turgidulum","iNatAg-mini/heliotropium_amplexicaule","iNatAg-mini/heliotropium_curassavicum","iNatAg-mini/heliotropium_europaeum","iNatAg-mini/hemarthria_altissima","iNatAg-mini/hemizonia_congesta","iNatAg-mini/heracleum_sphondylium","iNatAg-mini/heritiera_littoralis","iNatAg-mini/heteropogon_contortus","iNatAg-mini/heterotheca_grandiflora","iNatAg-mini/heuchera_mexicana","iNatAg-mini/hevea_brasiliensis","iNatAg-mini/hibiscus_cannabinus","iNatAg-mini/hibiscus_sabdariffa","iNatAg-mini/hibiscus_syriacus","iNatAg-mini/hibiscus_tiliaceus","iNatAg-mini/hibiscus_tilliaceus","iNatAg-mini/hieracium_aurantiacum","iNatAg-mini/hieracium_gronovii","iNatAg-mini/hieracium_lachenalii","iNatAg-mini/hieracium_laevigatum","iNatAg-mini/hieracium_murorum","iNatAg-mini/hieracium_pilosella","iNatAg-mini/hieracium_piloselloides","iNatAg-mini/hieracium_umbellatum","iNatAg-mini/hieracium_venosum","iNatAg-mini/hieracium_vulgatum","iNatAg-mini/hierochloe_odorata","iNatAg-mini/hilaria_jamesii","iNatAg-mini/hilaria_mutica","iNatAg-mini/hippophae_rhamnoides","iNatAg-mini/hippophae_salicifolia","iNatAg-mini/hippuris_vulgaris","iNatAg-mini/holcus_lanatus","iNatAg-mini/holcus_mollis","iNatAg-mini/hopea_odorata","iNatAg-mini/hopea_parviflora","iNatAg-mini/hopea_wightiana","iNatAg-mini/hordeum_brachyantherum","iNatAg-mini/hordeum_brevisubulatum","iNatAg-mini/hordeum_bulbosum","iNatAg-mini/hordeum_distichon","iNatAg-mini/hordeum_geniculatum","iNatAg-mini/hordeum_jubatum","iNatAg-mini/hordeum_murinum","iNatAg-mini/hordeum_vulgare","iNatAg-mini/houstonia_caerulea","iNatAg-mini/humulus_lupulus","iNatAg-mini/hydnocarpus_alpina","iNatAg-mini/hydrocotyle_americana","iNatAg-mini/hydrocotyle_mexicana","iNatAg-mini/hydrocotyle_ranunculoides","iNatAg-mini/hydrocotyle_sibthorpioides","iNatAg-mini/hydrocotyle_umbellata","iNatAg-mini/hydrocotyle_verticillata","iNatAg-mini/hydrolea_uniflora","iNatAg-mini/hylocereus_undatus","iNatAg-mini/hymenaea_courbaril","iNatAg-mini/hymenopappus_scabiosaeus","iNatAg-mini/hymenoxys_odorata","iNatAg-mini/hyosciamus_niger","iNatAg-mini/hyoscyamus_niger","iNatAg-mini/hyparrhenia_dregeana","iNatAg-mini/hyparrhenia_filipendula","iNatAg-mini/hyparrhenia_hirta","iNatAg-mini/hyparrhenia_rufa","iNatAg-mini/hypericum_canadense","iNatAg-mini/hypericum_canariense","iNatAg-mini/hypericum_mutilum","iNatAg-mini/hypericum_mutlium","iNatAg-mini/hypericum_perforatum","iNatAg-mini/hypericum_prolificum","iNatAg-mini/hypericum_punctatum","iNatAg-mini/hyperthelia_dissoluta","iNatAg-mini/hyphaene_compressa","iNatAg-mini/hyphaene_thebaica","iNatAg-mini/hypochaeris_glabra","iNatAg-mini/hypochaeris_radicata","iNatAg-mini/hypoxis_hemerocallidea","iNatAg-mini/hyssopus_officinalis","iNatAg-mini/ilex_aquifolium","iNatAg-mini/ilex_dipyrena","iNatAg-mini/ilex_paraguariensis","iNatAg-mini/impatiens_balsamina","iNatAg-mini/impatiens_parviflora","iNatAg-mini/imperata_brevifolia","iNatAg-mini/imperata_cylindrica","iNatAg-mini/indigofera_arrecta","iNatAg-mini/indigofera_hirsuta","iNatAg-mini/indigofera_oblongifolia","iNatAg-mini/indigofera_schimperi","iNatAg-mini/indigofera_spicata","iNatAg-mini/indigofera_suffruticosa","iNatAg-mini/indigofera_tinctoria","iNatAg-mini/inga_edulis","iNatAg-mini/inga_vera","iNatAg-mini/intsia_bijuga","iNatAg-mini/inula_britannica","iNatAg-mini/inula_helenium","iNatAg-mini/ipomoea_alba","iNatAg-mini/ipomoea_aquatica","iNatAg-mini/ipomoea_batatas","iNatAg-mini/ipomoea_coccinea","iNatAg-mini/ipomoea_hederifolia","iNatAg-mini/ipomoea_lacunosa","iNatAg-mini/ipomoea_quamoclit","iNatAg-mini/ipomoea_tricolor","iNatAg-mini/ipomoea_triloba","iNatAg-mini/ipomoea_turbinata","iNatAg-mini/iris_germanica","iNatAg-mini/iris_missouriensis","iNatAg-mini/iris_pseudacorus","iNatAg-mini/iris_pseudoacorus","iNatAg-mini/iris_virginica","iNatAg-mini/isatis_tinctoria","iNatAg-mini/ischaemum_ciliare","iNatAg-mini/ischaemum_muticum","iNatAg-mini/ischaemum_rugosum","iNatAg-mini/iseilema_vaginiflorum","iNatAg-mini/iva_angustifolia","iNatAg-mini/iva_annua","iNatAg-mini/jacaranda_copaia","iNatAg-mini/jacaranda_mimosifolia","iNatAg-mini/jatropha_curcas","iNatAg-mini/jatropha_gossypifolia","iNatAg-mini/jatropha_gossypiifolia","iNatAg-mini/juglans_hindsii","iNatAg-mini/juglans_nigra","iNatAg-mini/juglans_regia","iNatAg-mini/juncus_bufonius","iNatAg-mini/juncus_effusus","iNatAg-mini/juniperus_communis","iNatAg-mini/juniperus_occidentalis","iNatAg-mini/juniperus_pinchotii","iNatAg-mini/juniperus_procera","iNatAg-mini/juniperus_sabina","iNatAg-mini/justicia_adhatoda","iNatAg-mini/kalmia_angustifolia","iNatAg-mini/khaya_anthotheca","iNatAg-mini/khaya_senegalensis","iNatAg-mini/kigelia_pinnata","iNatAg-mini/kyllinga_gracillima","iNatAg-mini/kyllinga_odorata","iNatAg-mini/lablab_purpureus","iNatAg-mini/lactuca_canadensis","iNatAg-mini/lactuca_indica","iNatAg-mini/lactuca_saligna","iNatAg-mini/lactuca_serriola","iNatAg-mini/lactuca_virosa","iNatAg-mini/lagascea_mollis","iNatAg-mini/lagenaria_siceraria","iNatAg-mini/lagerstroemia_flos-reginae","iNatAg-mini/lagerstroemia_lanceolata","iNatAg-mini/lagerstroemia_parviflora","iNatAg-mini/laguncularia_racemosa","iNatAg-mini/lamium_album","iNatAg-mini/lamium_amplexicaule","iNatAg-mini/lamium_maculatum","iNatAg-mini/lamium_purpureum","iNatAg-mini/lannea_coromandelica","iNatAg-mini/lannea_edulis","iNatAg-mini/lansium_domesticum","iNatAg-mini/lantana_camara","iNatAg-mini/lapsana_communis","iNatAg-mini/larix_decidua","iNatAg-mini/larrea_divaricata","iNatAg-mini/lathyrus_angulatus","iNatAg-mini/lathyrus_cicera","iNatAg-mini/lathyrus_hirsutus","iNatAg-mini/lathyrus_latifolius","iNatAg-mini/lathyrus_ochrus","iNatAg-mini/lathyrus_odoratus","iNatAg-mini/lathyrus_palustris","iNatAg-mini/lathyrus_pratensis","iNatAg-mini/lathyrus_pubescens","iNatAg-mini/lathyrus_sativus","iNatAg-mini/lathyrus_tingitanus","iNatAg-mini/lathyrus_tuberosus","iNatAg-mini/laurus_nobilis","iNatAg-mini/lavandula_angustifolia","iNatAg-mini/lavandula_dentata","iNatAg-mini/lavandula_latifolia","iNatAg-mini/lawsonia_inermis","iNatAg-mini/ledum_groenlandicum","iNatAg-mini/leersia_hexandra","iNatAg-mini/leersia_lenticularis","iNatAg-mini/lemna_aequinoctialis","iNatAg-mini/lemna_gibba","iNatAg-mini/lemna_minor","iNatAg-mini/lemna_trisulca","iNatAg-mini/lens_culinaris","iNatAg-mini/leontodon_autumnale","iNatAg-mini/leontodon_autumnalis","iNatAg-mini/leontodon_hirtus","iNatAg-mini/leontodon_saxatilis","iNatAg-mini/leontopodium_alpinum","iNatAg-mini/leonurus_cardiaca","iNatAg-mini/leonurus_marrubiastrum","iNatAg-mini/leonurus_sibericus","iNatAg-mini/leonurus_sibiricus","iNatAg-mini/lepidium_austrinum","iNatAg-mini/lepidium_chalepense","iNatAg-mini/lepidium_didymum","iNatAg-mini/lepidium_draba","iNatAg-mini/lepidium_lasiocarpum","iNatAg-mini/lepidium_latifolium","iNatAg-mini/lepidium_perfoliatum","iNatAg-mini/lepidium_ruderale","iNatAg-mini/lepidium_sativum","iNatAg-mini/lepidium_virginicum","iNatAg-mini/leptochloa_chinensis","iNatAg-mini/leptochloa_fusca","iNatAg-mini/leptochloa_nealleyi","iNatAg-mini/lespedeza_cuneata","iNatAg-mini/lespedeza_striata","iNatAg-mini/lesquerella_fendleri","iNatAg-mini/leucaena_diversifolia","iNatAg-mini/leucaena_leucocephala","iNatAg-mini/leucanthemum_vulgare","iNatAg-mini/leucojum_aestivum","iNatAg-mini/levisticum_officinale","iNatAg-mini/liatris_mucronata","iNatAg-mini/licuala_ramsayi","iNatAg-mini/ligustrum_ovalifolium","iNatAg-mini/ligustrum_vulgare","iNatAg-mini/lilium_canadense","iNatAg-mini/lilium_candidum","iNatAg-mini/limnanthes_alba","iNatAg-mini/limnophila_sessiliflora","iNatAg-mini/linaria_vulgaris","iNatAg-mini/lindernia_grandiflora","iNatAg-mini/linum_usitatissimum","iNatAg-mini/lippia_alba","iNatAg-mini/liquidambar_styraciflua","iNatAg-mini/liriodendron_tulipifera","iNatAg-mini/litchi_chinensis","iNatAg-mini/lithospermum_arvense","iNatAg-mini/lithospermum_officinale","iNatAg-mini/livistona_australis","iNatAg-mini/lobelia_inflata","iNatAg-mini/lobelia_siphilitica","iNatAg-mini/lolium_multiflorum","iNatAg-mini/lolium_perenne","iNatAg-mini/lolium_rigidum","iNatAg-mini/lolium_temulentum","iNatAg-mini/lonchocarpus_laxiflorus","iNatAg-mini/lonicera_caerulea","iNatAg-mini/lonicera_caprifolium","iNatAg-mini/lonicera_periclymenum","iNatAg-mini/lonicera_sempervirens","iNatAg-mini/lonicera_tartarica","iNatAg-mini/lonicera_tatarica","iNatAg-mini/lonicera_xylosteum","iNatAg-mini/lophostemon_suaveolens","iNatAg-mini/lotus_corniculatus","iNatAg-mini/lotus_creticus","iNatAg-mini/lotus_edulis","iNatAg-mini/lotus_halophilus","iNatAg-mini/lotus_parviflorus","iNatAg-mini/lotus_tenuis","iNatAg-mini/lotus_uliginosus","iNatAg-mini/loudetia_simplex","iNatAg-mini/ludwigia_adscendens","iNatAg-mini/ludwigia_alternifolia","iNatAg-mini/luffa_acutangula","iNatAg-mini/luffa_cylindrica","iNatAg-mini/lumnitzera_littorea","iNatAg-mini/lumnitzera_racemosa","iNatAg-mini/lunaria_annua","iNatAg-mini/lupinus_albus","iNatAg-mini/lupinus_angustifolius","iNatAg-mini/lupinus_arboreus","iNatAg-mini/lupinus_cosentinii","iNatAg-mini/lupinus_luteus","iNatAg-mini/lupinus_mutabilis","iNatAg-mini/lupinus_pilosus","iNatAg-mini/lychnis_chalcedonica","iNatAg-mini/lychnis_flos-cuculi","iNatAg-mini/lychnis_viscaria","iNatAg-mini/lycium_barbarum","iNatAg-mini/lycium_berlandieri","iNatAg-mini/lycium_chinense","iNatAg-mini/lycium_ferocissimum","iNatAg-mini/lycium_halimifolium","iNatAg-mini/lycopersicon_esculentum","iNatAg-mini/lycopodium_clavatum","iNatAg-mini/lycopus_europaeus","iNatAg-mini/lysimachia_ciliata","iNatAg-mini/lysimachia_nummularia","iNatAg-mini/lysimachia_punctata","iNatAg-mini/lysimachia_vulgaris","iNatAg-mini/lythrum_hyssopifolia","iNatAg-mini/lythrum_salicaria","iNatAg-mini/lythrum_virgatum","iNatAg-mini/macadamia_integrifolia","iNatAg-mini/macadamia_tetraphylla","iNatAg-mini/macaranga_tanarius","iNatAg-mini/macroptilium_atropurpureum","iNatAg-mini/macroptilium_erythroloma","iNatAg-mini/macroptilium_gracile","iNatAg-mini/macroptilium_lathyroides","iNatAg-mini/macroptilium_longepedunculatum","iNatAg-mini/macrotyloma_axillare","iNatAg-mini/maesopsis_eminii","iNatAg-mini/maianthemum_canadense","iNatAg-mini/majorana_hortensis","iNatAg-mini/malachra_alceifolia","iNatAg-mini/mallotus_philippensis","iNatAg-mini/malpighia_glabra","iNatAg-mini/malus_domestica","iNatAg-mini/malus_sylvestris","iNatAg-mini/malva_alcea","iNatAg-mini/malva_moschata","iNatAg-mini/malva_nicaeensis","iNatAg-mini/malva_parviflora","iNatAg-mini/malva_pusilla","iNatAg-mini/malva_rotundifolia","iNatAg-mini/malva_silvestris","iNatAg-mini/malva_sylvestris","iNatAg-mini/mammea_americana","iNatAg-mini/mangifera_indica","iNatAg-mini/manihot_esculenta","iNatAg-mini/manilkara_zapota","iNatAg-mini/maranta_arundinacea","iNatAg-mini/markhamia_lutea","iNatAg-mini/marrubium_vulgare","iNatAg-mini/marsilea_quadrifolia","iNatAg-mini/matricaria_chamomila","iNatAg-mini/matricaria_chamomilla","iNatAg-mini/matricaria_discoidea","iNatAg-mini/matricaria_perforata","iNatAg-mini/matricaria_recutita","iNatAg-mini/mauritia_flexuosa","iNatAg-mini/mayaca_fluviatilis","iNatAg-mini/medicago_arabica","iNatAg-mini/medicago_falcata","iNatAg-mini/medicago_intertexta","iNatAg-mini/medicago_laciniata","iNatAg-mini/medicago_littoralis","iNatAg-mini/medicago_lupulina","iNatAg-mini/medicago_marina","iNatAg-mini/medicago_minima","iNatAg-mini/medicago_orbicularis","iNatAg-mini/medicago_polymorpha","iNatAg-mini/medicago_rigidula","iNatAg-mini/medicago_rugosa","iNatAg-mini/medicago_sativa","iNatAg-mini/medicago_scutellata","iNatAg-mini/medicago_tornata","iNatAg-mini/medicago_truncatula","iNatAg-mini/medicago_turbinata","iNatAg-mini/melaleuca_bracteata","iNatAg-mini/melaleuca_cajuputi","iNatAg-mini/melaleuca_dealbata","iNatAg-mini/melaleuca_lanceolata","iNatAg-mini/melaleuca_leucadendron","iNatAg-mini/melaleuca_nervosa","iNatAg-mini/melaleuca_quinquenervia","iNatAg-mini/melaleuca_viridiflora","iNatAg-mini/melampyrum_lineare","iNatAg-mini/melastoma_malabathricum","iNatAg-mini/melastoma_melabathricum","iNatAg-mini/melia_azedarach","iNatAg-mini/melica_decumbens","iNatAg-mini/melicoccus_bijugatus","iNatAg-mini/melilotus_albus","iNatAg-mini/melilotus_indica","iNatAg-mini/melilotus_officinalis","iNatAg-mini/melilotus_suaveolens","iNatAg-mini/melinis_minutiflora","iNatAg-mini/melissa_officinalis","iNatAg-mini/melochia_corchorifolia","iNatAg-mini/melothria_pendula","iNatAg-mini/mentha_arvensis","iNatAg-mini/mentha_longifolia","iNatAg-mini/mentha_piperita","iNatAg-mini/mentha_pulegium","iNatAg-mini/mentha_rotundifolia","iNatAg-mini/mentha_spicata","iNatAg-mini/menyanthes_trifoliata","iNatAg-mini/mercurialis_annua","iNatAg-mini/mesembryanthemum_cristallinum","iNatAg-mini/mesembryanthemum_noctiflorum","iNatAg-mini/mespilus_germanica","iNatAg-mini/mesua_ferrea","iNatAg-mini/metroxylon_sagu","iNatAg-mini/michelia_champaca","iNatAg-mini/microstegium_ciliatum","iNatAg-mini/miliusa_velutina","iNatAg-mini/mimosa_casta","iNatAg-mini/mimosa_dutrae","iNatAg-mini/mimosa_pigra","iNatAg-mini/mimosa_pudica","iNatAg-mini/mirabilis_jalapa","iNatAg-mini/molinia_caerulea","iNatAg-mini/mollugo_verticillata","iNatAg-mini/momordica_charantia","iNatAg-mini/momordica_cochinchinensis","iNatAg-mini/monarda_fistulosa","iNatAg-mini/monarda_punctata","iNatAg-mini/monochoria_hastata","iNatAg-mini/monochoria_vaginalis","iNatAg-mini/monocymbium_ceresiiforme","iNatAg-mini/monstera_deliciosa","iNatAg-mini/montanoa_hibiscifolia","iNatAg-mini/morinda_citrifolia","iNatAg-mini/moringa_oleifera","iNatAg-mini/morus_alba","iNatAg-mini/morus_nigra","iNatAg-mini/morus_rubra","iNatAg-mini/mucuna_pruriens","iNatAg-mini/muntingia_calabura","iNatAg-mini/murraya_koenigii","iNatAg-mini/musa_acuminata","iNatAg-mini/musa_acuminata_×_balbisiana","iNatAg-mini/musa_balbisiana","iNatAg-mini/musa_sapientium","iNatAg-mini/musanga_cecropioides","iNatAg-mini/muscari_comosum","iNatAg-mini/myosotis_alpestris","iNatAg-mini/myosurus_minimus","iNatAg-mini/myrica_cerifera","iNatAg-mini/myriophyllum_heterophyllum","iNatAg-mini/myriophyllum_implicatum","iNatAg-mini/myriophyllum_sibiricum","iNatAg-mini/myriophyllum_spicatum","iNatAg-mini/myriophyllum_verticillatum","iNatAg-mini/myristica_fragrans","iNatAg-mini/myroxylon_balsamum","iNatAg-mini/myrsine_africana","iNatAg-mini/myrtus_communis","iNatAg-mini/nardus_stricta","iNatAg-mini/nasturtium_officinale","iNatAg-mini/nauclea_orientalis","iNatAg-mini/nelumbo_nucifera","iNatAg-mini/neofabricia_myrtifolia","iNatAg-mini/neoglaziovia_variegata","iNatAg-mini/neonotonia_wightii","iNatAg-mini/nepeta_cataria","iNatAg-mini/nephelium_lappaceum","iNatAg-mini/nephelium_mutabile","iNatAg-mini/nerium_oleander","iNatAg-mini/nicotiana_quadrivalvis","iNatAg-mini/nicotiana_rustica","iNatAg-mini/nicotiana_trigonophylla","iNatAg-mini/nigella_sativa","iNatAg-mini/nothofagus_cunninghamii","iNatAg-mini/nothofagus_moorei","iNatAg-mini/nothoscordum_borbonicum","iNatAg-mini/nuphar_advena","iNatAg-mini/nuphar_lutea","iNatAg-mini/nymphaea_alba","iNatAg-mini/nypa_fruticans","iNatAg-mini/ochroma_pyramidale","iNatAg-mini/ocimum_americanum","iNatAg-mini/ocimum_basilicum","iNatAg-mini/ocimum_tenuiflorum","iNatAg-mini/octomeles_sumatrana","iNatAg-mini/oenanthe_javanica","iNatAg-mini/oenothera_albicaulis","iNatAg-mini/oenothera_biennis","iNatAg-mini/oenothera_parviflora","iNatAg-mini/oenothera_perennis","iNatAg-mini/oldenlandia_corymbosa","iNatAg-mini/olea_africana","iNatAg-mini/olea_capensis","iNatAg-mini/olea_europaea","iNatAg-mini/olea_europea","iNatAg-mini/oncosperma_tigillarium","iNatAg-mini/onobrychis_viciifolia","iNatAg-mini/ononis_alopecuroides","iNatAg-mini/ononis_spinosa","iNatAg-mini/onopordum_acanthium","iNatAg-mini/onopordum_illyricum","iNatAg-mini/onosmodium_discolor","iNatAg-mini/opuntia_ficus-indica","iNatAg-mini/opuntia_leptocaulis","iNatAg-mini/opuntia_polyacantha","iNatAg-mini/opuntia_polycantha","iNatAg-mini/origanum_majorana","iNatAg-mini/origanum_onites","iNatAg-mini/origanum_vulgare","iNatAg-mini/ornithogalum_nutans","iNatAg-mini/ornithogalum_umbellatum","iNatAg-mini/ornithopus_compressus","iNatAg-mini/ornithopus_sativus","iNatAg-mini/orobanche_flava","iNatAg-mini/orobanche_ludoviciana","iNatAg-mini/orobanche_minor","iNatAg-mini/orobanche_ramosa","iNatAg-mini/orontium_aquaticum","iNatAg-mini/orthosiphon_aristatus","iNatAg-mini/oryza_sativa","iNatAg-mini/oryzopsis_holciformis","iNatAg-mini/oryzopsis_miliacea","iNatAg-mini/osmorhiza_berteroi","iNatAg-mini/osmunda_regalis","iNatAg-mini/ottochloa_nodosa","iNatAg-mini/oxalis_acetosella","iNatAg-mini/oxalis_corniculata","iNatAg-mini/oxalis_pes-caprae","iNatAg-mini/oxalis_pescaprae","iNatAg-mini/oxalis_stricta","iNatAg-mini/oxalis_tuberosa","iNatAg-mini/oxytropis_lambertii","iNatAg-mini/pachyrhizus_erosus","iNatAg-mini/paederia_cruddasiana","iNatAg-mini/paederia_foetida","iNatAg-mini/paeonia_officinalis","iNatAg-mini/panax_ginseng","iNatAg-mini/panax_quinquefolius","iNatAg-mini/pangium_edule","iNatAg-mini/panicum_antidotale","iNatAg-mini/panicum_capillare","iNatAg-mini/panicum_coloratum","iNatAg-mini/panicum_ecklonii","iNatAg-mini/panicum_gattingeri","iNatAg-mini/panicum_maximum","iNatAg-mini/panicum_miliaceum","iNatAg-mini/panicum_natalense","iNatAg-mini/panicum_obtusum","iNatAg-mini/panicum_pilosum","iNatAg-mini/panicum_racemosum","iNatAg-mini/panicum_repens","iNatAg-mini/panicum_sphaerocarpon","iNatAg-mini/panicum_trichocladum","iNatAg-mini/panicum_turgidum","iNatAg-mini/panicum_virgatum","iNatAg-mini/papaver_argemone","iNatAg-mini/papaver_bracteatum","iNatAg-mini/papaver_dubium","iNatAg-mini/papaver_rhoeas","iNatAg-mini/papaver_somniferum","iNatAg-mini/parietaria_floridana","iNatAg-mini/parietaria_officinalis","iNatAg-mini/parinari_curatellifolia","iNatAg-mini/parkia_biglobosa","iNatAg-mini/parkia_speciosa","iNatAg-mini/parkinsonia_aculeata","iNatAg-mini/parnassia_palustris","iNatAg-mini/parsonsia_latifolia","iNatAg-mini/parthenium_argentatum","iNatAg-mini/parthenium_hysterophorus","iNatAg-mini/paspalum_conjugatum","iNatAg-mini/paspalum_dilatatum","iNatAg-mini/paspalum_distichum","iNatAg-mini/paspalum_nicorae","iNatAg-mini/paspalum_notatum","iNatAg-mini/paspalum_plicatulum","iNatAg-mini/paspalum_scrobiculatum","iNatAg-mini/paspalum_separatum","iNatAg-mini/paspalum_urvillei","iNatAg-mini/paspalum_vaginatum","iNatAg-mini/passiflora_bicornis","iNatAg-mini/passiflora_edulis","iNatAg-mini/passiflora_foetida","iNatAg-mini/passiflora_incarnata","iNatAg-mini/passiflora_laurifolia","iNatAg-mini/passiflora_ligularis","iNatAg-mini/passiflora_lutea","iNatAg-mini/passiflora_mollissima","iNatAg-mini/passiflora_quadrangularis","iNatAg-mini/passiflora_suberosa","iNatAg-mini/pastinaca_sativa","iNatAg-mini/paullinia_cupana","iNatAg-mini/paulownia_tomentosa","iNatAg-mini/peganum_harmala","iNatAg-mini/pelargonium_graveolens","iNatAg-mini/peltandra_sagittifolia","iNatAg-mini/peltandra_virginica","iNatAg-mini/peltophorum_africanum","iNatAg-mini/peltophorum_pterocarpum","iNatAg-mini/pennisetum_clandestinum","iNatAg-mini/pennisetum_glaucum","iNatAg-mini/pennisetum_macrourum","iNatAg-mini/pennisetum_pedicellatum","iNatAg-mini/pennisetum_polystachyon","iNatAg-mini/pennisetum_purpureum","iNatAg-mini/pennisetum_setaceum","iNatAg-mini/pennisetum_villosum","iNatAg-mini/perilla_frutescens","iNatAg-mini/persea_americana","iNatAg-mini/persicaria_maculosa","iNatAg-mini/persoonia_falcata","iNatAg-mini/petalostigma_pubescens","iNatAg-mini/petasites_albus","iNatAg-mini/petasites_hybridus","iNatAg-mini/petroselinum_crispum","iNatAg-mini/petunia_parviflora","iNatAg-mini/peucedanum_ostruthium","iNatAg-mini/phalaris_aquatica","iNatAg-mini/phalaris_arundinacea","iNatAg-mini/phalaris_arundinaceae","iNatAg-mini/phalaris_brachystachys","iNatAg-mini/phalaris_canariensis","iNatAg-mini/phalaris_caroliniana","iNatAg-mini/phalaris_coerulescens","iNatAg-mini/phalaris_paradoxa","iNatAg-mini/phaseolus_acutifolius","iNatAg-mini/phaseolus_coccineus","iNatAg-mini/phaseolus_lunatus","iNatAg-mini/phaseolus_vulgaris","iNatAg-mini/phleum_alpinum","iNatAg-mini/phleum_pratense","iNatAg-mini/phoenix_dactylifera","iNatAg-mini/phoenix_reclinata","iNatAg-mini/phoenix_sylvestris","iNatAg-mini/phormium_tenax","iNatAg-mini/phragmites_australis","iNatAg-mini/phragmites_communis","iNatAg-mini/phragmites_karka","iNatAg-mini/phyllanthus_niruri","iNatAg-mini/phyllanthus_tenellus","iNatAg-mini/phyllanthus_urinaria","iNatAg-mini/phyllocladus_aspleniifolius","iNatAg-mini/physalis_alkekengi","iNatAg-mini/physalis_angulata","iNatAg-mini/physalis_heterophylla","iNatAg-mini/physalis_lancifolia","iNatAg-mini/physalis_peruviana","iNatAg-mini/physalis_philadelphica","iNatAg-mini/physalis_pubescens","iNatAg-mini/physalis_virginiana","iNatAg-mini/physalis_viscosa","iNatAg-mini/phytolacca_acinosa","iNatAg-mini/phytolacca_americana","iNatAg-mini/phytolacca_dioica","iNatAg-mini/picea_abies","iNatAg-mini/picea_omorica","iNatAg-mini/picea_omorika","iNatAg-mini/picris_echioides","iNatAg-mini/picris_hieracioides","iNatAg-mini/piliostigma_reticulatum","iNatAg-mini/piliostigma_thonningii","iNatAg-mini/pimenta_dioica","iNatAg-mini/pimenta_racemosa","iNatAg-mini/pimpinella_anisum","iNatAg-mini/pimpinella_saxifraga","iNatAg-mini/pinguicula_vulgaris","iNatAg-mini/pinus_ayacahuite","iNatAg-mini/pinus_brutia","iNatAg-mini/pinus_canariensis","iNatAg-mini/pinus_caribaea","iNatAg-mini/pinus_chiapensis","iNatAg-mini/pinus_douglasiana","iNatAg-mini/pinus_durangensis","iNatAg-mini/pinus_greggii","iNatAg-mini/pinus_halepensis","iNatAg-mini/pinus_hartwegii","iNatAg-mini/pinus_kesiya","iNatAg-mini/pinus_merkusii","iNatAg-mini/pinus_montezumae","iNatAg-mini/pinus_mugo","iNatAg-mini/pinus_occidentalis","iNatAg-mini/pinus_oocarpa","iNatAg-mini/pinus_palustris","iNatAg-mini/pinus_patula","iNatAg-mini/pinus_pinaster","iNatAg-mini/pinus_pinea","iNatAg-mini/pinus_ponderosa","iNatAg-mini/pinus_pseudostrobus","iNatAg-mini/pinus_radiata","iNatAg-mini/pinus_roxburghii","iNatAg-mini/pinus_sylvestris","iNatAg-mini/pinus_tabuliformis","iNatAg-mini/pinus_taeda","iNatAg-mini/pinus_teocote","iNatAg-mini/piper_aduncum","iNatAg-mini/piper_betle","iNatAg-mini/piper_longum","iNatAg-mini/piper_methysticum","iNatAg-mini/piper_nigrum","iNatAg-mini/pistacia_atlantica","iNatAg-mini/pistacia_lentiscus","iNatAg-mini/pistacia_vera","iNatAg-mini/pistia_stratiotes","iNatAg-mini/pisum_sativum","iNatAg-mini/pithecellobium_dulce","iNatAg-mini/pittosporum_resiniferum","iNatAg-mini/pittosporum_undulatum","iNatAg-mini/plagiobothrys_canescens","iNatAg-mini/plantago_coronopus","iNatAg-mini/plantago_heterophylla","iNatAg-mini/plantago_indica","iNatAg-mini/plantago_lanceolata","iNatAg-mini/plantago_major","iNatAg-mini/plantago_media","iNatAg-mini/plantago_ovata","iNatAg-mini/plantago_psyllium","iNatAg-mini/plantago_virginica","iNatAg-mini/platanus_orientalis","iNatAg-mini/poa_alpina","iNatAg-mini/poa_annua","iNatAg-mini/poa_bulbosa","iNatAg-mini/poa_compressa","iNatAg-mini/poa_cuspidata","iNatAg-mini/poa_fendleriana","iNatAg-mini/poa_nemoralis","iNatAg-mini/poa_pratensis","iNatAg-mini/poa_trivialis","iNatAg-mini/podocarpus_elatus","iNatAg-mini/podocarpus_falcatus","iNatAg-mini/poeciloneuron_indicum","iNatAg-mini/pogostemon_cablin","iNatAg-mini/polemonium_caeruleum","iNatAg-mini/polemonium_micranthum","iNatAg-mini/polyalthia_fragrans","iNatAg-mini/polycarpon_tetraphyllum","iNatAg-mini/polygonatum_orientale","iNatAg-mini/polygonum_achoreum","iNatAg-mini/polygonum_arenastrum","iNatAg-mini/polygonum_aviculare","iNatAg-mini/polygonum_bistorta","iNatAg-mini/polygonum_convolvulus","iNatAg-mini/polygonum_equisetiforme","iNatAg-mini/polygonum_erectum","iNatAg-mini/polygonum_hydropiper","iNatAg-mini/polygonum_hydropiperoides","iNatAg-mini/polygonum_lapathifolium","iNatAg-mini/polygonum_orientale","iNatAg-mini/polygonum_pensylvanicum","iNatAg-mini/polygonum_perfoliatum","iNatAg-mini/polygonum_persicaria","iNatAg-mini/polygonum_punctatum","iNatAg-mini/polygonum_ramosissimum","iNatAg-mini/polygonum_scandens","iNatAg-mini/polymnia_sonchifolia","iNatAg-mini/polypodium_vulgare","iNatAg-mini/polypogon_interruptus","iNatAg-mini/polypremum_procumbens","iNatAg-mini/polyscias_fulva","iNatAg-mini/polytrichum_commune","iNatAg-mini/pongamia_pinnata","iNatAg-mini/pontederia_cordata","iNatAg-mini/pontederia_rotundifolia","iNatAg-mini/populus_balsamifera","iNatAg-mini/populus_ciliata","iNatAg-mini/populus_deltoides","iNatAg-mini/populus_euphratica","iNatAg-mini/populus_simonii","iNatAg-mini/portulaca_oleracea","iNatAg-mini/portulaca_pilosa","iNatAg-mini/portulaca_pilosa_pilosa","iNatAg-mini/portulaca_quadrifida","iNatAg-mini/potamogeton_diversifolius","iNatAg-mini/potamogeton_epihydrus","iNatAg-mini/potamogeton_filiformis","iNatAg-mini/potamogeton_foliosus","iNatAg-mini/potamogeton_friesii","iNatAg-mini/potamogeton_gramineus","iNatAg-mini/potamogeton_illinoensis","iNatAg-mini/potamogeton_natans","iNatAg-mini/potamogeton_nodosus","iNatAg-mini/potamogeton_pectinatus","iNatAg-mini/potamogeton_praelongus","iNatAg-mini/potamogeton_pusillus","iNatAg-mini/potamogeton_zosteriformis","iNatAg-mini/potentilla_anserina","iNatAg-mini/potentilla_argentea","iNatAg-mini/potentilla_erecta","iNatAg-mini/potentilla_fruticosa","iNatAg-mini/potentilla_intermedia","iNatAg-mini/potentilla_norvegica","iNatAg-mini/potentilla_norvegicae","iNatAg-mini/potentilla_recta","iNatAg-mini/potentilla_reptans","iNatAg-mini/potentilla_tridentata","iNatAg-mini/poterium_sanguisorba","iNatAg-mini/pouteria_campechiana","iNatAg-mini/pouteria_lucuma","iNatAg-mini/pouteria_sapota","iNatAg-mini/prasophyllum_elatum","iNatAg-mini/primula_veris","iNatAg-mini/proserpinaca_palustris","iNatAg-mini/proserpinaca_pectinata","iNatAg-mini/prosopis_affinis","iNatAg-mini/prosopis_africana","iNatAg-mini/prosopis_alba","iNatAg-mini/prosopis_chilensis","iNatAg-mini/prosopis_cineraria","iNatAg-mini/prosopis_glandulosa","iNatAg-mini/prosopis_juliflora","iNatAg-mini/prosopis_nigra","iNatAg-mini/prosopis_pallida","iNatAg-mini/prosopis_tamarugo","iNatAg-mini/prosopis_velutina","iNatAg-mini/prunella_vulgaris","iNatAg-mini/prunus_africana","iNatAg-mini/prunus_amygdalus","iNatAg-mini/prunus_armeniaca","iNatAg-mini/prunus_avium","iNatAg-mini/prunus_capuli","iNatAg-mini/prunus_cerasus","iNatAg-mini/prunus_domestica","iNatAg-mini/prunus_laurocerasus","iNatAg-mini/prunus_mahaleb","iNatAg-mini/prunus_mume","iNatAg-mini/prunus_padus","iNatAg-mini/prunus_pensylvanica","iNatAg-mini/prunus_persica","iNatAg-mini/prunus_salicina","iNatAg-mini/prunus_spinosa","iNatAg-mini/prunus_virginiana","iNatAg-mini/psathyrostachys_juncea","iNatAg-mini/psidium_cattleianum","iNatAg-mini/psidium_friedrichsthalianum","iNatAg-mini/psidium_guajava","iNatAg-mini/psophocarpus_tetragonolobus","iNatAg-mini/psoralea_repens","iNatAg-mini/ptelea_trifoliata","iNatAg-mini/pterocarpus_angolensis","iNatAg-mini/pterocarpus_dalbergioides","iNatAg-mini/pterocarpus_erinaceus","iNatAg-mini/pterocarpus_indicus","iNatAg-mini/pterocarpus_lucens","iNatAg-mini/pterocarpus_macrocarpus","iNatAg-mini/pterocarpus_marsupium","iNatAg-mini/pterocarpus_santalinoides","iNatAg-mini/pterocarpus_santalinus","iNatAg-mini/pueraria_lobata","iNatAg-mini/pueraria_phaseoloides","iNatAg-mini/pulmonaria_officinalis","iNatAg-mini/punica_granatum","iNatAg-mini/pycnanthus_angolensis","iNatAg-mini/pyrola_rotundifolia","iNatAg-mini/pyrus_communis","iNatAg-mini/pyrus_pyrifolia","iNatAg-mini/quercus_agrifolia","iNatAg-mini/quercus_alba","iNatAg-mini/quercus_bicolor","iNatAg-mini/quercus_chrysolepis","iNatAg-mini/quercus_dumosa","iNatAg-mini/quercus_fusiformis","iNatAg-mini/quercus_ilex","iNatAg-mini/quercus_incana","iNatAg-mini/quercus_lanata","iNatAg-mini/quercus_nigra","iNatAg-mini/quercus_phellos","iNatAg-mini/quercus_robur","iNatAg-mini/quercus_semecarpifolia","iNatAg-mini/quercus_suber","iNatAg-mini/quercus_virginiana","iNatAg-mini/quisqualis_indica","iNatAg-mini/ranunculus_abortivus","iNatAg-mini/ranunculus_acris","iNatAg-mini/ranunculus_arbortivus","iNatAg-mini/ranunculus_arvensis","iNatAg-mini/ranunculus_bulbosus","iNatAg-mini/ranunculus_californicus","iNatAg-mini/ranunculus_cymbalaria","iNatAg-mini/ranunculus_ficaria","iNatAg-mini/ranunculus_flabellaris","iNatAg-mini/ranunculus_muricatulus","iNatAg-mini/ranunculus_muricatus","iNatAg-mini/ranunculus_occidentalis","iNatAg-mini/ranunculus_orthorhynchus","iNatAg-mini/ranunculus_parviflorus","iNatAg-mini/ranunculus_sceleratus","iNatAg-mini/ranunculus_testiculatus","iNatAg-mini/ranunculus_trichophyllus","iNatAg-mini/raphanus_raphanistrum","iNatAg-mini/raphanus_sativus","iNatAg-mini/rauvolfia_caffra","iNatAg-mini/rauvolfia_serpentina","iNatAg-mini/reseda_alba","iNatAg-mini/reseda_lutea","iNatAg-mini/retama_monosperma","iNatAg-mini/rhamnus_cathartica","iNatAg-mini/rhamnus_prinoides","iNatAg-mini/rheum_palmatum","iNatAg-mini/rheum_rhaponticum","iNatAg-mini/rhigozum_trichotomum","iNatAg-mini/rhinanthus_crista-galli","iNatAg-mini/rhinanthus_minor","iNatAg-mini/rhizophora_mangle","iNatAg-mini/rhizophora_mucronata","iNatAg-mini/rhizophora_stylosa","iNatAg-mini/rhodiola_rosea","iNatAg-mini/rhododendron_ferrugineum","iNatAg-mini/rhus_copallinum","iNatAg-mini/rhus_glabra","iNatAg-mini/rhus_typhina","iNatAg-mini/rhynchosia_minima","iNatAg-mini/rhynchosia_senna","iNatAg-mini/rhynchosia_sublobata","iNatAg-mini/ribes_hirtellum","iNatAg-mini/ribes_nigrum","iNatAg-mini/ribes_rubrum","iNatAg-mini/ribes_uva-crispa","iNatAg-mini/ribes_viscosissimum","iNatAg-mini/richardia_brasiliensis","iNatAg-mini/richardia_scabra","iNatAg-mini/ricinus_communis","iNatAg-mini/ricinus_comunis","iNatAg-mini/rivina_humilis","iNatAg-mini/robinia_pseudoacacia","iNatAg-mini/roemeria_refracta","iNatAg-mini/rosa_canina","iNatAg-mini/rosa_cinnamomea","iNatAg-mini/rosa_eglanteria","iNatAg-mini/rosa_pendulina","iNatAg-mini/rosa_pimpinellifolia","iNatAg-mini/rosa_rubiginosa","iNatAg-mini/rosa_spinosissima","iNatAg-mini/roseodendron_donnell-smithii","iNatAg-mini/rosmarinus_officinalis","iNatAg-mini/rubia_tinctorum","iNatAg-mini/rubus_ellipticus","iNatAg-mini/rubus_fructicosus","iNatAg-mini/rubus_fruticosus","iNatAg-mini/rubus_hispidus","iNatAg-mini/rubus_idaeus","iNatAg-mini/rubus_moluccanus","iNatAg-mini/rubus_occidentalis","iNatAg-mini/rubus_pensilvanicus","iNatAg-mini/rudbeckia_amplexicaulis","iNatAg-mini/rudbeckia_hirta","iNatAg-mini/rudbeckia_laciniata","iNatAg-mini/rudbeckia_triloba","iNatAg-mini/rumex_acetosa","iNatAg-mini/rumex_acetosella","iNatAg-mini/rumex_aquaticus","iNatAg-mini/rumex_crispus","iNatAg-mini/rumex_dentatus","iNatAg-mini/rumex_hymenosepalus","iNatAg-mini/rumex_longifolius","iNatAg-mini/rumex_maritimus","iNatAg-mini/rumex_obtusifolius","iNatAg-mini/rumex_patienta","iNatAg-mini/rumex_patientia","iNatAg-mini/rumex_pseudonatronatus","iNatAg-mini/rumex_pulcher","iNatAg-mini/rumex_verticillatus","iNatAg-mini/ruppia_maritima","iNatAg-mini/ruscus_aculeatus","iNatAg-mini/ruta_graveolens","iNatAg-mini/saccharum_officinarum","iNatAg-mini/saccharum_sinense","iNatAg-mini/saccharum_spontaneum","iNatAg-mini/sacorstemma_cynanchoides","iNatAg-mini/sagina_procumbens","iNatAg-mini/sagittaria_kurziana","iNatAg-mini/sagittaria_lancifolia","iNatAg-mini/sagittaria_latifolia","iNatAg-mini/sagittaria_sagittifolia","iNatAg-mini/salacca_wallichiana","iNatAg-mini/salacca_zalacca","iNatAg-mini/salicornia_bigelovii","iNatAg-mini/salix_alba","iNatAg-mini/salix_caprea","iNatAg-mini/salix_laevigata","iNatAg-mini/salix_pentandra","iNatAg-mini/salix_viminalis","iNatAg-mini/salsola_kali","iNatAg-mini/salsola_tragus","iNatAg-mini/salsola_vermiculata","iNatAg-mini/salvadora_persica","iNatAg-mini/salvia_lyrata","iNatAg-mini/salvia_officinalis","iNatAg-mini/salvia_sclarea","iNatAg-mini/salvia_verticillata","iNatAg-mini/salvinia_auriculata","iNatAg-mini/samanea_saman","iNatAg-mini/sambucus_canadensis","iNatAg-mini/sambucus_canadiensis","iNatAg-mini/sambucus_cerulea","iNatAg-mini/sambucus_ebulus","iNatAg-mini/sambucus_nigra","iNatAg-mini/sambucus_racemosa","iNatAg-mini/samolus_parviflorus","iNatAg-mini/samolus_valerandi","iNatAg-mini/sanguisorba_minor","iNatAg-mini/sanguisorba_officinalis","iNatAg-mini/sanicula_europaea","iNatAg-mini/santalum_acuminatum","iNatAg-mini/santalum_album","iNatAg-mini/santolina_chamaecyparissus","iNatAg-mini/sapindus_emarginatus","iNatAg-mini/sapindus_saponaria","iNatAg-mini/sapium_sebiferum","iNatAg-mini/saponaria_officinalis","iNatAg-mini/sarcostemma_cynanchoides","iNatAg-mini/satureja_hortensis","iNatAg-mini/satureja_montana","iNatAg-mini/sauropus_androgynus","iNatAg-mini/saururus_cernuus","iNatAg-mini/scandix_pecten-veneris","iNatAg-mini/schima_wallichii","iNatAg-mini/schinus_molle","iNatAg-mini/schinus_terebinthifolia","iNatAg-mini/schinus_terebinthifolius","iNatAg-mini/schismus_arabicus","iNatAg-mini/schizolobium_parahyba","iNatAg-mini/schizomeria_ovata","iNatAg-mini/schleichera_oleosa","iNatAg-mini/scirpus_lacustris","iNatAg-mini/scleranthus_annuus","iNatAg-mini/sclerocarya_caffra","iNatAg-mini/scoparia_dulcis","iNatAg-mini/scorzonera_laciniata","iNatAg-mini/scrophularia_lanceolata","iNatAg-mini/searsia_angustifolia","iNatAg-mini/secale_cereale","iNatAg-mini/secale_montanum","iNatAg-mini/sechium_edule","iNatAg-mini/securidaca_longepedunculata","iNatAg-mini/securidaca_longipedunculata","iNatAg-mini/sedum_acre","iNatAg-mini/sedum_telephium","iNatAg-mini/sehima_nervosum","iNatAg-mini/sempervivum_arachnoideum","iNatAg-mini/sempervivum_tectorum","iNatAg-mini/senecio_elegans","iNatAg-mini/senecio_jacobaea","iNatAg-mini/senecio_madagascariensis","iNatAg-mini/senecio_plattensis","iNatAg-mini/senecio_squalidus","iNatAg-mini/senecio_sylvaticus","iNatAg-mini/senecio_viscosus","iNatAg-mini/senecio_vulgaris","iNatAg-mini/senna_spectabilis","iNatAg-mini/serenoa_repens","iNatAg-mini/sesamum_indicum","iNatAg-mini/sesbania_bispinosa","iNatAg-mini/sesbania_cannabina","iNatAg-mini/sesbania_exaltata","iNatAg-mini/sesbania_formosa","iNatAg-mini/sesbania_grandiflora","iNatAg-mini/sesbania_pachycarpa","iNatAg-mini/sesbania_sesban","iNatAg-mini/setaria_incrassata","iNatAg-mini/setaria_italica","iNatAg-mini/setaria_lindenbergiana","iNatAg-mini/setaria_pumila","iNatAg-mini/seymeria_pectinata","iNatAg-mini/shorea_robusta","iNatAg-mini/shorea_talura","iNatAg-mini/sicyos_angulatus","iNatAg-mini/sida_angustifolia","iNatAg-mini/sida_cordifolia","iNatAg-mini/sida_spinosa","iNatAg-mini/silene_antirrhina","iNatAg-mini/silene_armeria","iNatAg-mini/silene_conica","iNatAg-mini/silene_conoidea","iNatAg-mini/silene_gallica","iNatAg-mini/silene_noctiflora","iNatAg-mini/silene_pendula","iNatAg-mini/silphium_asperrimum","iNatAg-mini/silphium_integrifolium","iNatAg-mini/silphium_laciniatum","iNatAg-mini/silybum_marianum","iNatAg-mini/simarouba_glauca","iNatAg-mini/simmondsia_chinensis","iNatAg-mini/simsia_auriculata","iNatAg-mini/sinapis_alba","iNatAg-mini/sinapis_arvensis","iNatAg-mini/sinapis_incana","iNatAg-mini/siphonochilus_aethiopicus","iNatAg-mini/sisymbrium_altissimum","iNatAg-mini/sisymbrium_erysimoides","iNatAg-mini/sisymbrium_irio","iNatAg-mini/sisymbrium_officinale","iNatAg-mini/sisymbrium_orientale","iNatAg-mini/sisymbrium_sophia","iNatAg-mini/sisyrinchium_montanum","iNatAg-mini/sloanea_woollsii","iNatAg-mini/smilax_aspera","iNatAg-mini/smilax_bona-nox","iNatAg-mini/smilax_laurifolia","iNatAg-mini/smilax_rotundifolia","iNatAg-mini/solanum_aethiopicum","iNatAg-mini/solanum_americanum","iNatAg-mini/solanum_capsicoides","iNatAg-mini/solanum_carolinense","iNatAg-mini/solanum_coriaceum","iNatAg-mini/solanum_dimidiatum","iNatAg-mini/solanum_diphyllum","iNatAg-mini/solanum_dulcamara","iNatAg-mini/solanum_elaeagnifolium","iNatAg-mini/solanum_eleagnifolium","iNatAg-mini/solanum_ellipticum","iNatAg-mini/solanum_ferox","iNatAg-mini/solanum_heterodoxum","iNatAg-mini/solanum_incanum","iNatAg-mini/solanum_jamaicense","iNatAg-mini/solanum_lanceolatum","iNatAg-mini/solanum_macrocarpon","iNatAg-mini/solanum_mammosum","iNatAg-mini/solanum_marginatum","iNatAg-mini/solanum_mauritianum","iNatAg-mini/solanum_melongena","iNatAg-mini/solanum_muricatum","iNatAg-mini/solanum_nigrum","iNatAg-mini/solanum_physalifolium","iNatAg-mini/solanum_pseudo-capsicum","iNatAg-mini/solanum_pseudocapsicum","iNatAg-mini/solanum_quitoense","iNatAg-mini/solanum_sisymbrifolium","iNatAg-mini/solanum_sisymbriifolium","iNatAg-mini/solanum_tampicense","iNatAg-mini/solanum_torvum","iNatAg-mini/solanum_tuberosum","iNatAg-mini/solanum_violaceum","iNatAg-mini/soldanella_alpina","iNatAg-mini/solidago_californica","iNatAg-mini/solidago_canadensis","iNatAg-mini/solidago_fistulosa","iNatAg-mini/solidago_missouriensis","iNatAg-mini/solidago_nemoralis","iNatAg-mini/solidago_rigida","iNatAg-mini/solidago_sempervirens","iNatAg-mini/solidago_virgaurea","iNatAg-mini/sonchus_arvensis","iNatAg-mini/sonchus_oleraceus","iNatAg-mini/sonchus_palustris","iNatAg-mini/sonneratia_apetala","iNatAg-mini/sonneratia_caseolaris","iNatAg-mini/sorbus_aucuparia","iNatAg-mini/sorbus_domestica","iNatAg-mini/sorghum_bicolor","iNatAg-mini/sorghum_drummondii","iNatAg-mini/sorghum_halepense","iNatAg-mini/soymida_febrifuga","iNatAg-mini/sparganium_americanum","iNatAg-mini/sparganium_erectum","iNatAg-mini/spartina_pectinata","iNatAg-mini/spartium_junceum","iNatAg-mini/spathodea_campanulata","iNatAg-mini/spergula_arvensis","iNatAg-mini/spermacoce_verticillata","iNatAg-mini/spinacia_oleracea","iNatAg-mini/spinifex_hirsutus","iNatAg-mini/spirea_tomentosa","iNatAg-mini/spodiopogon_sibiricus","iNatAg-mini/spondias_cythera","iNatAg-mini/spondias_mombin","iNatAg-mini/spondias_purpurea","iNatAg-mini/sporobolus_airoides","iNatAg-mini/sporobolus_fimbriatus","iNatAg-mini/sporobolus_maritimus","iNatAg-mini/sporobolus_neglectus","iNatAg-mini/sporobolus_spicatus","iNatAg-mini/sporobolus_virginicus","iNatAg-mini/stachys_affinis","iNatAg-mini/stachys_palustris","iNatAg-mini/stachytarpheta_incana","iNatAg-mini/stachytarpheta_indica","iNatAg-mini/stellaria_graminea","iNatAg-mini/stellaria_holostea","iNatAg-mini/stellaria_media","iNatAg-mini/stenotaphrum_secundatum","iNatAg-mini/sterculia_foetida","iNatAg-mini/sterculia_urens","iNatAg-mini/sterculia_villosa","iNatAg-mini/stereospermum_kunthianum","iNatAg-mini/stevia_rebaudiana","iNatAg-mini/stipa_baicalensis","iNatAg-mini/stipa_brachychaeta","iNatAg-mini/stipa_capillata","iNatAg-mini/stipa_glareosa","iNatAg-mini/stipa_grandis","iNatAg-mini/stipa_krylovii","iNatAg-mini/stipa_lagascae","iNatAg-mini/stipa_occidentalis","iNatAg-mini/stipa_parviflora","iNatAg-mini/stipa_tenacissima","iNatAg-mini/stipa_trichotoma","iNatAg-mini/stipagrostis_amabilis","iNatAg-mini/stipagrostis_zeyheri","iNatAg-mini/stratiotes_aloides","iNatAg-mini/strychnos_cocculoides","iNatAg-mini/strychnos_innocua","iNatAg-mini/strychnos_spinosa","iNatAg-mini/stylidium_desertorum","iNatAg-mini/stylosanthes_capitata","iNatAg-mini/stylosanthes_fruticosa","iNatAg-mini/stylosanthes_hamata","iNatAg-mini/stylosanthes_humilis","iNatAg-mini/stylosanthes_scabra","iNatAg-mini/stylosanthes_viscosa","iNatAg-mini/succisa_pratensis","iNatAg-mini/swertia_baicalensis","iNatAg-mini/swietenia_macrophylla","iNatAg-mini/swietenia_mahogani","iNatAg-mini/symphoricarpos_mollis","iNatAg-mini/symphoricarpos_occidentalis","iNatAg-mini/symphoricarpos_orbiculatus","iNatAg-mini/symphoricarpos_rotundifolius","iNatAg-mini/symphytum_officinale","iNatAg-mini/syncarpia_glomulifera","iNatAg-mini/syncarpia_hillii","iNatAg-mini/syzygium_cordatum","iNatAg-mini/syzygium_cumini","iNatAg-mini/syzygium_guineense","iNatAg-mini/syzygium_malaccense","iNatAg-mini/syzygium_taiwanicum","iNatAg-mini/tabebuia_rosea","iNatAg-mini/tabebuia_serratifolia","iNatAg-mini/tagetes_minuta","iNatAg-mini/talinum_triangulare","iNatAg-mini/tamarindus_indica","iNatAg-mini/tamarix_aphylla","iNatAg-mini/tamarix_chinensis","iNatAg-mini/tamarix_gallica","iNatAg-mini/tamarix_parviflora","iNatAg-mini/tanacetum_balsamita","iNatAg-mini/tanacetum_vulgare","iNatAg-mini/taraxacum_officinale","iNatAg-mini/taraxia_breviflora","iNatAg-mini/tarchonanthus_camphoratus","iNatAg-mini/taxodium_distichum","iNatAg-mini/taxus_baccata","iNatAg-mini/tecoma_stans","iNatAg-mini/tectona_grandis","iNatAg-mini/tephrosia_candida","iNatAg-mini/tephrosia_lupinifolia","iNatAg-mini/tephrosia_obovata","iNatAg-mini/tephrosia_purpurea","iNatAg-mini/tephrosia_vogelii","iNatAg-mini/teramnus_labialis","iNatAg-mini/terminalia_arjuna","iNatAg-mini/terminalia_bellirica","iNatAg-mini/terminalia_brownii","iNatAg-mini/terminalia_calamansanai","iNatAg-mini/terminalia_catappa","iNatAg-mini/terminalia_chebula","iNatAg-mini/terminalia_ivorensis","iNatAg-mini/terminalia_mantaly","iNatAg-mini/terminalia_myriocarpa","iNatAg-mini/terminalia_paniculata","iNatAg-mini/terminalia_prunioides","iNatAg-mini/terminalia_sericocarpa","iNatAg-mini/terminalia_tomentosa","iNatAg-mini/tetradymia_canescens","iNatAg-mini/tetragonia_tetragonioides","iNatAg-mini/teucrium_botrys","iNatAg-mini/teucrium_canadense","iNatAg-mini/teucrium_chamaedrys","iNatAg-mini/teucrium_polium","iNatAg-mini/thalia_geniculata","iNatAg-mini/thalictrum_pubescens","iNatAg-mini/thaumatococcus_daniellii","iNatAg-mini/themeda_australis","iNatAg-mini/themeda_quadrivalvis","iNatAg-mini/themeda_triandra","iNatAg-mini/theobroma_bicolor","iNatAg-mini/theobroma_cacao","iNatAg-mini/theobroma_grandiflorum","iNatAg-mini/thermopsis_montana","iNatAg-mini/thermopsis_rhombifolia","iNatAg-mini/thespesia_populnea","iNatAg-mini/thlaspi_arvense","iNatAg-mini/thlaspi_perfoliatum","iNatAg-mini/thuja_occidentalis","iNatAg-mini/thymus_serphyllum","iNatAg-mini/thymus_serpyllum","iNatAg-mini/thymus_vulgaris","iNatAg-mini/thyrsostachys_siamensis","iNatAg-mini/thysanolaena_latifolia","iNatAg-mini/tilia_cordata","iNatAg-mini/tilia_platyphyllos","iNatAg-mini/tipuana_tipu","iNatAg-mini/tithonia_diversifolia","iNatAg-mini/toona_ciliata","iNatAg-mini/torenia_glabra","iNatAg-mini/toxicodendron_pubescens","iNatAg-mini/trachypogon_spicatus","iNatAg-mini/tradescantia_bracteata","iNatAg-mini/tradescantia_fluminensis","iNatAg-mini/tradescantia_ohiensis","iNatAg-mini/tradescantia_virginiana","iNatAg-mini/tragia_betonicifolia","iNatAg-mini/tragopogon_lamottei","iNatAg-mini/tragopogon_porrifolius","iNatAg-mini/tragopogon_pratensis","iNatAg-mini/tragus_koelerioides","iNatAg-mini/trapa_natans","iNatAg-mini/trema_orientale","iNatAg-mini/trianthema_portulacastrum","iNatAg-mini/tribulus_cistoides","iNatAg-mini/tribulus_terrestris","iNatAg-mini/trichanthera_gigantea","iNatAg-mini/trichoneura_grandiglumis","iNatAg-mini/trichosanthes_cucumerina","iNatAg-mini/trichostema_lanceolatum","iNatAg-mini/tridax_procumbens","iNatAg-mini/trifolium_africanum","iNatAg-mini/trifolium_alexandrinum","iNatAg-mini/trifolium_ambiguum","iNatAg-mini/trifolium_angustifolium","iNatAg-mini/trifolium_arvense","iNatAg-mini/trifolium_burchellianum","iNatAg-mini/trifolium_campestre","iNatAg-mini/trifolium_carolinianum","iNatAg-mini/trifolium_cherleri","iNatAg-mini/trifolium_dubium","iNatAg-mini/trifolium_fragiferum","iNatAg-mini/trifolium_glanduliferum","iNatAg-mini/trifolium_glomeratum","iNatAg-mini/trifolium_hirtum","iNatAg-mini/trifolium_hybridum","iNatAg-mini/trifolium_incarnatum","iNatAg-mini/trifolium_medium","iNatAg-mini/trifolium_michelianum","iNatAg-mini/trifolium_nigrescens","iNatAg-mini/trifolium_patens","iNatAg-mini/trifolium_pilulare","iNatAg-mini/trifolium_polymorphum","iNatAg-mini/trifolium_pratense","iNatAg-mini/trifolium_reflexum","iNatAg-mini/trifolium_repens","iNatAg-mini/trifolium_resupinatum","iNatAg-mini/trifolium_subterraneum","iNatAg-mini/trifolium_tomentosum","iNatAg-mini/trifolium_variegatum","iNatAg-mini/trifolium_vesiculosum","iNatAg-mini/trifolium_wormskioldii","iNatAg-mini/triglochin_maritima","iNatAg-mini/triglochin_maritimum","iNatAg-mini/triglochin_palustre","iNatAg-mini/trigonella_foenum-graecum","iNatAg-mini/tripsacum_dactyloides","iNatAg-mini/trisetum_flavescens","iNatAg-mini/tristachya_leucothrix","iNatAg-mini/triticum_aestivum","iNatAg-mini/triticum_dicoccoides","iNatAg-mini/triticum_durum","iNatAg-mini/triticum_spelta","iNatAg-mini/triumfetta_rhomboidea","iNatAg-mini/triumfetta_semitriloba","iNatAg-mini/trollius_europaeus","iNatAg-mini/tropaeolum_majus","iNatAg-mini/tropaeolum_tuberosum","iNatAg-mini/tropidocarpum_gracile","iNatAg-mini/turritis_glabra","iNatAg-mini/tussilago_farfara","iNatAg-mini/tylosema_esculentum","iNatAg-mini/typha_angustifolia","iNatAg-mini/typha_domingensis","iNatAg-mini/typha_latifolia","iNatAg-mini/uapaca_kirkiana","iNatAg-mini/ulex_europaeus","iNatAg-mini/ullucus_tuberosus","iNatAg-mini/ulmus_procera","iNatAg-mini/umbilicus_rupestris","iNatAg-mini/uncaria_gambir","iNatAg-mini/urelytrum_agropyroides","iNatAg-mini/urena_lobata","iNatAg-mini/urochloa_mosambicensis","iNatAg-mini/urochloa_panicoides","iNatAg-mini/urtica_chamaedryoides","iNatAg-mini/urtica_dioica","iNatAg-mini/urtica_urens","iNatAg-mini/utricularia_floridana","iNatAg-mini/utricularia_foliosa","iNatAg-mini/utricularia_gibba","iNatAg-mini/utricularia_purpurea","iNatAg-mini/utricularia_radiata","iNatAg-mini/utricularia_vulgaris","iNatAg-mini/uvaria_littoralis","iNatAg-mini/uvularia_sessilifolia","iNatAg-mini/vaccinium_angustifolium","iNatAg-mini/vaccinium_corymbosum","iNatAg-mini/vaccinium_macrocarpon","iNatAg-mini/vaccinium_myrtillus","iNatAg-mini/vaccinium_uliginosum","iNatAg-mini/vaccinium_vitis-idaea","iNatAg-mini/valeriana_officinalis","iNatAg-mini/valerianella_eriocarpa","iNatAg-mini/vallisneria_americana","iNatAg-mini/vangueria_infausta","iNatAg-mini/vangueria_madagascariensis","iNatAg-mini/vanilla_planifolia","iNatAg-mini/vateria_indica","iNatAg-mini/ventilago_viminalis","iNatAg-mini/veratrum_album","iNatAg-mini/veratrum_californicum","iNatAg-mini/verbascum_blattaria","iNatAg-mini/verbascum_lychnitis","iNatAg-mini/verbascum_phlomoides","iNatAg-mini/verbascum_thapsus","iNatAg-mini/verbascum_thaspus","iNatAg-mini/verbena_bonariensis","iNatAg-mini/verbena_brasiliensis","iNatAg-mini/verbena_hastata","iNatAg-mini/verbena_officinalis","iNatAg-mini/verbena_urticifolia","iNatAg-mini/vernonia_altissima","iNatAg-mini/vernonia_amygdalina","iNatAg-mini/vernonia_baldwinii","iNatAg-mini/vernonia_chamaedrys","iNatAg-mini/vernonia_fasciculata","iNatAg-mini/veronica_agrestis","iNatAg-mini/veronica_anagallis-aquatica","iNatAg-mini/veronica_arvensis","iNatAg-mini/veronica_biloba","iNatAg-mini/veronica_chamaedrys","iNatAg-mini/veronica_filiformis","iNatAg-mini/veronica_hederaefolia","iNatAg-mini/veronica_hederifolia","iNatAg-mini/veronica_longifolia","iNatAg-mini/veronica_officinalis","iNatAg-mini/veronica_peregrina","iNatAg-mini/veronica_polita","iNatAg-mini/veronica_serpyllifolia","iNatAg-mini/vetiveria_zizanioides","iNatAg-mini/viburnum_cassinoides","iNatAg-mini/viburnum_lentago","iNatAg-mini/viburnum_prunifolium","iNatAg-mini/viccia_cracca","iNatAg-mini/vicia_augustifolia","iNatAg-mini/vicia_benghalensis","iNatAg-mini/vicia_cracca","iNatAg-mini/vicia_ervilia","iNatAg-mini/vicia_faba","iNatAg-mini/vicia_monantha","iNatAg-mini/vicia_narbonensis","iNatAg-mini/vicia_pannonica","iNatAg-mini/vicia_sativa","iNatAg-mini/vicia_sepium","iNatAg-mini/vigna_adenantha","iNatAg-mini/vigna_angularis","iNatAg-mini/vigna_hosei","iNatAg-mini/vigna_lanceolata","iNatAg-mini/vigna_longifolia","iNatAg-mini/vigna_luteola","iNatAg-mini/vigna_parkeri","iNatAg-mini/vigna_radiata","iNatAg-mini/vigna_trilobata","iNatAg-mini/vigna_umbellata","iNatAg-mini/vigna_unguiculata","iNatAg-mini/vigna_vexillata","iNatAg-mini/vinca_major","iNatAg-mini/vinca_minor","iNatAg-mini/viola_lanceolata","iNatAg-mini/viola_odorata","iNatAg-mini/viola_tricolor","iNatAg-mini/viscum_album","iNatAg-mini/vitellaria_paradoxa","iNatAg-mini/vitex_agnus-castus","iNatAg-mini/vitex_doniana","iNatAg-mini/vitex_negundo","iNatAg-mini/vitis_labrusca","iNatAg-mini/vitis_rotundifolia","iNatAg-mini/vitis_vinifera","iNatAg-mini/vitis_vulpina","iNatAg-mini/waltheria_indica","iNatAg-mini/warburgia_salutaris","iNatAg-mini/warburgia_ugandensis","iNatAg-mini/withania_somnifera","iNatAg-mini/wrightia_tomentosa","iNatAg-mini/xanthium_spinosum","iNatAg-mini/xanthium_strumarium","iNatAg-mini/xanthosoma_sagittifolium","iNatAg-mini/ximenia_americana","iNatAg-mini/xylia_xylocarpa","iNatAg-mini/xylocarpus_granatum","iNatAg-mini/xylocarpus_mekongensis","iNatAg-mini/xylocarpus_moluccensis","iNatAg-mini/xylorhiza_glabriuscula","iNatAg-mini/yucca_elephantipes","iNatAg-mini/zannichellia_palustris","iNatAg-mini/zanthoxylum_americanum","iNatAg-mini/zea_mays","iNatAg-mini/zingiber_officinale","iNatAg-mini/zizania_aquatica","iNatAg-mini/zizania_latifolia","iNatAg-mini/ziziphus_abyssinica","iNatAg-mini/ziziphus_mauritiana","iNatAg-mini/ziziphus_mucronata","iNatAg-mini/zornia_diphylla","iNatAg-mini/zornia_glochidiata","iNatAg-mini/zornia_latifolia","iNatAg-mini/zostera_marina","iNatAg-mini/zoysia_matrella","iNatAg-mini/zygophyllum_fabago","iNatAg/abelmoschus_esculentus","iNatAg/abelmoschus_manihot","iNatAg/abelmoschus_moschatus","iNatAg/abies_alba","iNatAg/abies_amabilis","iNatAg/abies_balsamea","iNatAg/abies_concolor","iNatAg/abies_pindrow","iNatAg/abroma_augustum","iNatAg/abrus_pecatorius","iNatAg/abrus_precatorius","iNatAg/abutilon_theophrasti","iNatAg/acacia_abyssinica","iNatAg/acacia_acradenia","iNatAg/acacia_acuminata","iNatAg/acacia_ampliceps","iNatAg/acacia_anceps","iNatAg/acacia_ancistrocarpa","iNatAg/acacia_aneura","iNatAg/acacia_angustissima","iNatAg/acacia_ataxacantha","iNatAg/acacia_aulacocarpa","iNatAg/acacia_auriculiformis","iNatAg/acacia_bidwillii","iNatAg/acacia_brachystachya","iNatAg/acacia_brevispica","iNatAg/acacia_burkei","iNatAg/acacia_caffra","iNatAg/acacia_cambagei","iNatAg/acacia_catechu","iNatAg/acacia_catenulata","iNatAg/acacia_caven","iNatAg/acacia_cincinnata","iNatAg/acacia_coriacea","iNatAg/acacia_cowleana","iNatAg/acacia_crassicarpa","iNatAg/acacia_cyclops","iNatAg/acacia_cyperophylla","iNatAg/acacia_dealbata","iNatAg/acacia_deanei","iNatAg/acacia_decurrens","iNatAg/acacia_difficilis","iNatAg/acacia_doratoxylon","iNatAg/acacia_ehrenbergiana","iNatAg/acacia_erioloba","iNatAg/acacia_estrophiolata","iNatAg/acacia_excelsa","iNatAg/acacia_falciformis","iNatAg/acacia_farnesiana","iNatAg/acacia_fasciculifera","iNatAg/acacia_flavescens","iNatAg/acacia_georginae","iNatAg/acacia_gerrardii","iNatAg/acacia_glaucocarpa","iNatAg/acacia_gourmaensis","iNatAg/acacia_harpophylla","iNatAg/acacia_holosericea","iNatAg/acacia_irrorata","iNatAg/acacia_ixiophylla","iNatAg/acacia_karroo","iNatAg/acacia_koa","iNatAg/acacia_leptocarpa","iNatAg/acacia_leucophloea","iNatAg/acacia_ligulata","iNatAg/acacia_maidenii","iNatAg/acacia_mangium","iNatAg/acacia_mearnsii","iNatAg/acacia_melanoxylon","iNatAg/acacia_mellifera","iNatAg/acacia_murrayana","iNatAg/acacia_neriifolia","iNatAg/acacia_nigrescens","iNatAg/acacia_nilotica","iNatAg/acacia_occidentalis","iNatAg/acacia_oraria","iNatAg/acacia_oswaldii","iNatAg/acacia_pachycarpa","iNatAg/acacia_papyrocarpa","iNatAg/acacia_paradoxa","iNatAg/acacia_pendula","iNatAg/acacia_peuce","iNatAg/acacia_podalyriifolia","iNatAg/acacia_polyacantha","iNatAg/acacia_polystachya","iNatAg/acacia_pruinocarpa","iNatAg/acacia_pycnantha","iNatAg/acacia_salicina","iNatAg/acacia_saligna","iNatAg/acacia_sclerosperma","iNatAg/acacia_senegal","iNatAg/acacia_seyal","iNatAg/acacia_shirleyi","iNatAg/acacia_sieberiana","iNatAg/acacia_silvestris","iNatAg/acacia_simsii","iNatAg/acacia_stenophylla","iNatAg/acacia_tetragonophylla","iNatAg/acacia_tortilis","iNatAg/acacia_torulosa","iNatAg/acacia_trachycarpa","iNatAg/acacia_victoriae","iNatAg/acaena_novae-zelandiae","iNatAg/acalypha_rhomboidea","iNatAg/acalypha_virginica","iNatAg/acanthosicyos_horridus","iNatAg/acanthosicyos_naudinianus","iNatAg/acanthospermum_hispidum","iNatAg/acanthus_ilicifolius","iNatAg/acanthus_mollis","iNatAg/acca_sellowiana","iNatAg/acer_caesium","iNatAg/acer_campestre","iNatAg/acer_platanoides","iNatAg/acer_pseudoplatanus","iNatAg/acer_saccharum","iNatAg/achillea_fragrantissima","iNatAg/achillea_millefolium","iNatAg/achillea_ptarmica","iNatAg/achnatherum_pekinense","iNatAg/achyranthes_aspera","iNatAg/acmena_smithii","iNatAg/aconitum_napellus","iNatAg/acorus_calamus","iNatAg/acrocarpus_fraxinifolius","iNatAg/acrocomia_aculeata","iNatAg/acrocomia_totai","iNatAg/actaea_racemosa","iNatAg/actinidia_arguta","iNatAg/actinidia_chinensis","iNatAg/adansonia_digitata","iNatAg/adansonia_grandidieri","iNatAg/adansonia_gregorii","iNatAg/adenanthera_pavonina","iNatAg/adesmia_bicolor","iNatAg/adesmia_latifolia","iNatAg/adesmia_punctata","iNatAg/adesmia_securigerifolia","iNatAg/adiantum_capillus-veneris","iNatAg/adina_cordifolia","iNatAg/adonis_annua","iNatAg/adonis_vernalis","iNatAg/aechmea_magdalenae","iNatAg/aegiceras_corniculatum","iNatAg/aegilops_biuncialis","iNatAg/aegilops_cylindrica","iNatAg/aegilops_geniculata","iNatAg/aegilops_triuncialis","iNatAg/aegle_marmelos","iNatAg/aegopodium_podagraria","iNatAg/aeschynomene_americana","iNatAg/aeschynomene_brasiliana","iNatAg/aeschynomene_falcata","iNatAg/aeschynomene_histrix","iNatAg/aeschynomene_indica","iNatAg/aeschynomene_villosa","iNatAg/aesculus_hippocastanum","iNatAg/aesculus_indica","iNatAg/aethusa_cynapium","iNatAg/afzelia_africana","iNatAg/afzelia_quanzensis","iNatAg/agathis_australis","iNatAg/agathis_dammara","iNatAg/agathis_macrophylla","iNatAg/agathis_microstachya","iNatAg/agathis_robusta","iNatAg/agave_fourcroydes","iNatAg/agave_lecheguilla","iNatAg/agave_sisalana","iNatAg/ageratum_conyzoides","iNatAg/agrimonia_eupatoria","iNatAg/agrimonia_gryposepala","iNatAg/agrimonia_parviflora","iNatAg/agropyron_cristatum","iNatAg/agropyron_dasyanthum","iNatAg/agropyron_desertorum","iNatAg/agropyron_scabrum","iNatAg/agrostemma_githago","iNatAg/agrostis_canina","iNatAg/agrostis_capillaris","iNatAg/agrostis_gigantea","iNatAg/agrostis_stolonifera","iNatAg/agrostis_tenuis","iNatAg/ailanthus_altissima","iNatAg/ailanthus_excelsa","iNatAg/aiphanes_aculeata","iNatAg/aira_caryophyllea","iNatAg/ajuga_genevensis","iNatAg/ajuga_reptans","iNatAg/alania_cunninghamii","iNatAg/albizia_adianthifolia","iNatAg/albizia_amara","iNatAg/albizia_chinensis","iNatAg/albizia_falcataria","iNatAg/albizia_harveyi","iNatAg/albizia_lebbeck","iNatAg/albizia_lophantha","iNatAg/albizia_lucida","iNatAg/albizia_odoratissima","iNatAg/albizia_procera","iNatAg/alcea_rosea","iNatAg/alchemilla_monticola","iNatAg/alchemilla_occidentalis","iNatAg/alchemilla_vulgaris","iNatAg/alchemilla_xanthochlora","iNatAg/aleurites_fordii","iNatAg/aleurites_moluccana","iNatAg/alisma_gramineum","iNatAg/alisma_lanceolatum","iNatAg/alisma_plantago-aquatica","iNatAg/alkanna_tinctoria","iNatAg/alliaria_petiolata","iNatAg/allionia_incarnata","iNatAg/allium_ampeloprasum","iNatAg/allium_canadense","iNatAg/allium_cepa","iNatAg/allium_chinense","iNatAg/allium_fistulosum","iNatAg/allium_paniculatum","iNatAg/allium_sativum","iNatAg/allium_schoenoprasum","iNatAg/allium_triquetrum","iNatAg/allium_tuberosum","iNatAg/allium_ursinum","iNatAg/allocasuarina_campestris","iNatAg/allocasuarina_decaisneana","iNatAg/allocasuarina_fraseriana","iNatAg/allocasuarina_huegeliana","iNatAg/allocasuarina_littoralis","iNatAg/allocasuarina_luehmannii","iNatAg/allocasuarina_torulosa","iNatAg/alloteropsis_semialata","iNatAg/alnus_acuminata","iNatAg/alnus_glutinosa","iNatAg/alnus_japonica","iNatAg/alnus_maritima","iNatAg/alnus_nepalensis","iNatAg/alnus_rubra","iNatAg/alocasia_macrorrhizos","iNatAg/aloe_arborescens","iNatAg/aloe_barbadensis","iNatAg/aloe_ferox","iNatAg/aloe_perryi","iNatAg/alopecurus_arundinaceus","iNatAg/alopecurus_carolinianus","iNatAg/alopecurus_geniculatus","iNatAg/alopecurus_myosuroides","iNatAg/alopecurus_pratensis","iNatAg/alopecurus_rendlei","iNatAg/aloysia_triphylla","iNatAg/alphitonia_excelsa","iNatAg/alpinia_galanga","iNatAg/alstonia_scholaris","iNatAg/alternanthera_pungens","iNatAg/althaea_officinalis","iNatAg/altingia_excelsa","iNatAg/alysicarpus_monilifer","iNatAg/alysicarpus_ovalifolius","iNatAg/alysicarpus_rugosus","iNatAg/alysicarpus_vaginalis","iNatAg/alyssum_desertorum","iNatAg/amaranthus_albus","iNatAg/amaranthus_blitum","iNatAg/amaranthus_caudatus","iNatAg/amaranthus_cruentus","iNatAg/amaranthus_dubius","iNatAg/amaranthus_hybridus","iNatAg/amaranthus_hypochondriacus","iNatAg/amaranthus_lividus","iNatAg/amaranthus_retroflexus","iNatAg/amaranthus_speciosus","iNatAg/amaranthus_spinosus","iNatAg/amaranthus_tricolor","iNatAg/amaranthus_viridis","iNatAg/ambelania_acida","iNatAg/ambrosia_acanthicarpa","iNatAg/ambrosia_artemisiifolia","iNatAg/ambrosia_confertiflora","iNatAg/ambrosia_psilostachya","iNatAg/ambrosia_tomentosa","iNatAg/ambrosia_trifida","iNatAg/ammannia_latifolia","iNatAg/ammi_majus","iNatAg/ammophila_arenaria","iNatAg/ammophila_breviligulata","iNatAg/amorpha_fruticosa","iNatAg/amorphophallus_paeoniifolius","iNatAg/amsinckia_douglasiana","iNatAg/amsinckia_lycopsoides","iNatAg/anacardium_occidentale","iNatAg/anagallis_arvensis","iNatAg/ananas_comosus","iNatAg/anchusa_azurea","iNatAg/andrographis_paniculata","iNatAg/andropogon_barbinodis","iNatAg/andropogon_bicornis","iNatAg/andropogon_brachystachyus","iNatAg/andropogon_gayanus","iNatAg/andropogon_gyrans","iNatAg/andropogon_hallii","iNatAg/andropogon_leucostachyus","iNatAg/andropogon_ternarius","iNatAg/androsace_septentrionalis","iNatAg/anemone_hepatica","iNatAg/anemone_nemorosa","iNatAg/anethum_graveolens","iNatAg/angelica_archangelica","iNatAg/angelica_atropurpurea","iNatAg/angelica_sylvestris","iNatAg/angophora_costata","iNatAg/angophora_floribunda","iNatAg/annona_atemoya","iNatAg/annona_cherimola","iNatAg/annona_diversifolia","iNatAg/annona_montana","iNatAg/annona_muricata","iNatAg/annona_purpurea","iNatAg/annona_reticulata","iNatAg/annona_senegalensis","iNatAg/annona_squamosa","iNatAg/anogeissus_acuminata","iNatAg/anogeissus_latifolia","iNatAg/anogeissus_pendula","iNatAg/antennaria_dioica","iNatAg/anthemis_arvensis","iNatAg/anthemis_cotula","iNatAg/anthemis_tinctoria","iNatAg/anthephora_pubescens","iNatAg/anthoxanthum_odoratum","iNatAg/anthriscus_cerefolium","iNatAg/anthyllis_vulneraria","iNatAg/antidesma_bunius","iNatAg/antirrhinum_majus","iNatAg/aphandra_natalia","iNatAg/aphanes_arvensis","iNatAg/apios_americana","iNatAg/apium_graveolens","iNatAg/apocynum_cannabinum","iNatAg/apocynum_sibiricum","iNatAg/aponogeton_distachyos","iNatAg/aquilaria_malaccensis","iNatAg/aquilegia_canadensis","iNatAg/aquilegia_vulgaris","iNatAg/arachis_glabrata","iNatAg/arachis_hypogaea","iNatAg/arachis_pintoi","iNatAg/arachis_villosa","iNatAg/araucaria_angustifolia","iNatAg/araucaria_bidwillii","iNatAg/araucaria_cunninghamii","iNatAg/araucaria_hunsteinii","iNatAg/arbutus_unedo","iNatAg/archidendron_jiringa","iNatAg/arctium_lappa","iNatAg/arctostaphylos_glandulosa","iNatAg/arctostaphylos_manzanita","iNatAg/arctostaphylos_patula","iNatAg/arctostaphylos_uva-ursi","iNatAg/arctostaphylos_viscida","iNatAg/ardisia_crenata","iNatAg/areca_catechu","iNatAg/arenaria_serpyllifolia","iNatAg/arenga_pinnata","iNatAg/argemone_mexicana","iNatAg/argyrodendron_actinophyllum","iNatAg/argyrodendron_peralatum","iNatAg/aria_alnifolia","iNatAg/aristida_adscensionis","iNatAg/aristida_behriana","iNatAg/aristida_congesta","iNatAg/aristida_junciformis","iNatAg/aristida_lanosa","iNatAg/aristida_latifolia","iNatAg/aristida_longispica","iNatAg/aristida_personata","iNatAg/aristida_purpurascens","iNatAg/aristida_schiedeana","iNatAg/aristida_transvaalensis","iNatAg/aristolochia_rotunda","iNatAg/armoracia_rusticana","iNatAg/arnica_montana","iNatAg/arrhenatherum_elatius","iNatAg/artemisia_abrotanum","iNatAg/artemisia_absinthium","iNatAg/artemisia_afra","iNatAg/artemisia_annua","iNatAg/artemisia_campestris","iNatAg/artemisia_dracunculus","iNatAg/artemisia_filifolia","iNatAg/artemisia_glacialis","iNatAg/artemisia_herba-alba","iNatAg/artemisia_ludoviciana","iNatAg/artemisia_stelleriana","iNatAg/artemisia_tridentata","iNatAg/artemisia_vulgaris","iNatAg/artocarpus_altilis","iNatAg/artocarpus_heterophyllus","iNatAg/artocarpus_hirsutus","iNatAg/artocarpus_integer","iNatAg/artocarpus_lakoocha","iNatAg/arundinella_hirta","iNatAg/arundo_donax","iNatAg/asarina_stricta","iNatAg/asarum_europaeum","iNatAg/asclepias_curassavica","iNatAg/asclepias_fascicularis","iNatAg/asclepias_incarnata","iNatAg/asclepias_lanceolata","iNatAg/asclepias_purpurascens","iNatAg/asclepias_speciosa","iNatAg/asclepias_subverticillata","iNatAg/asclepias_tuberosa","iNatAg/asclepias_verticillata","iNatAg/asclepias_viridiflora","iNatAg/asimina_angustifolia","iNatAg/asimina_triloba","iNatAg/asparagus_densiflorus","iNatAg/asparagus_officinalis","iNatAg/asperula_arvensis","iNatAg/asphodelus_albus","iNatAg/asphodelus_tenuifolius","iNatAg/aspilia_angustifolia","iNatAg/asplenium_ruta-muraria","iNatAg/aster_ericoides","iNatAg/astragalus_adsurgens","iNatAg/astragalus_asymmetricus","iNatAg/astragalus_canadensis","iNatAg/astragalus_cicer","iNatAg/astragalus_gummifer","iNatAg/astragalus_mollissimus","iNatAg/astragalus_nuttallianus","iNatAg/astragalus_sinicus","iNatAg/astragalus_tweedyi","iNatAg/astrantia_major","iNatAg/astrebla_lappacea","iNatAg/astrebla_pectinata","iNatAg/astrebla_squarrosa","iNatAg/astrocaryum_jauari","iNatAg/astrocaryum_vulgare","iNatAg/asystasia_gangetica","iNatAg/atalaya_hemiglauca","iNatAg/atherosperma_moschatum","iNatAg/athrotaxis_selaginoides","iNatAg/atriplex_canescens","iNatAg/atriplex_confertifolia","iNatAg/atriplex_gardneri","iNatAg/atriplex_glauca","iNatAg/atriplex_halimus","iNatAg/atriplex_hortensis","iNatAg/atriplex_lentiformis","iNatAg/atriplex_nummularia","iNatAg/atriplex_patula","iNatAg/atriplex_rosea","iNatAg/atriplex_semibaccata","iNatAg/atriplex_vesicaria","iNatAg/atropa_belladonna","iNatAg/attalea_cohune","iNatAg/avena_fatua","iNatAg/avena_sativa","iNatAg/avena_sterilis","iNatAg/avenula_pubescens","iNatAg/averrhoa_bilimbi","iNatAg/averrhoa_carambola","iNatAg/avicennia_germinans","iNatAg/avicennia_marina","iNatAg/avicennia_officinalis","iNatAg/axonopus_affinis","iNatAg/axonopus_compressus","iNatAg/axonopus_fissifolius","iNatAg/axyris_amaranthoides","iNatAg/azadirachta_indica","iNatAg/azanza_garckeana","iNatAg/azolla_filiculoides","iNatAg/azolla_pinnata","iNatAg/baccaurea_motleyana","iNatAg/baccaurea_ramiflora","iNatAg/baccharis_glutinosa","iNatAg/baccharis_pilularis","iNatAg/bactris_gasipaes","iNatAg/baikiaea_plurijuga","iNatAg/balanites_aegyptiaca","iNatAg/bambusa_arundinacea","iNatAg/bambusa_balcooa","iNatAg/bambusa_blumeana","iNatAg/bambusa_tulda","iNatAg/bambusa_vulgaris","iNatAg/banksia_integrifolia","iNatAg/banksia_occidentalis","iNatAg/baphia_nitida","iNatAg/barringtonia_racemosa","iNatAg/basella_alba","iNatAg/bauhinia_aculeata","iNatAg/bauhinia_petersiana","iNatAg/bauhinia_racemosa","iNatAg/bauhinia_rufescens","iNatAg/bauhinia_thonningii","iNatAg/bauhinia_tomentosa","iNatAg/bauhinia_variegata","iNatAg/beckmannia_eruciformis","iNatAg/beckmannia_syzigachne","iNatAg/bellis_perennis","iNatAg/benincasa_hispida","iNatAg/berberis_aquifolium","iNatAg/berberis_thunbergii","iNatAg/berberis_vulgaris","iNatAg/berchemia_discolor","iNatAg/berrya_cordifolia","iNatAg/bersama_lucens","iNatAg/bertholletia_excelsa","iNatAg/beta_vulgaris","iNatAg/betula_nigra","iNatAg/betula_pendula","iNatAg/betula_pubescens","iNatAg/bidens_bipinnata","iNatAg/bidens_cernua","iNatAg/bidens_frondosa","iNatAg/bidens_pilosa","iNatAg/bidens_tripartita","iNatAg/bignonia_capreolata","iNatAg/biserrula_pelecinus","iNatAg/bixa_orellana","iNatAg/blighia_sapida","iNatAg/blumea_balsamifera","iNatAg/bocconia_frutescens","iNatAg/boehmeria_nivea","iNatAg/boerhavia_coccinea","iNatAg/boerhavia_diffusa","iNatAg/boerhavia_erecta","iNatAg/boesenbergia_rotunda","iNatAg/bolusanthus_speciosus","iNatAg/bombacopsis_quinata","iNatAg/bombax_ceiba","iNatAg/bombax_insigne","iNatAg/borago_officinalis","iNatAg/borassus_aethiopum","iNatAg/borassus_flabellifer","iNatAg/borojoa_patinoi","iNatAg/boronia_glabra","iNatAg/boscia_angustifolia","iNatAg/boswellia_serrata","iNatAg/bothriochloa_bladhii","iNatAg/bothriochloa_insculpta","iNatAg/bothriochloa_ischaemum","iNatAg/bothriochloa_pertusa","iNatAg/bougainvillea_glabra","iNatAg/bouteloua_curtipendula","iNatAg/bouteloua_gracilis","iNatAg/brachiaria_brizantha","iNatAg/brachiaria_decumbens","iNatAg/brachiaria_deflexa","iNatAg/brachiaria_distachya","iNatAg/brachiaria_humidicola","iNatAg/brachiaria_mutica","iNatAg/brachiaria_ramosa","iNatAg/brachiaria_serrata","iNatAg/brachychiton_acerifolius","iNatAg/brachychiton_populneus","iNatAg/brachylaena_huillensis","iNatAg/brachystegia_spiciformis","iNatAg/brassica_campestris","iNatAg/brassica_chinensis","iNatAg/brassica_incana","iNatAg/brassica_juncea","iNatAg/brassica_napus","iNatAg/brassica_nigra","iNatAg/brassica_rapa","iNatAg/brassica_tournefortii","iNatAg/bridelia_micrantha","iNatAg/briza_maxima","iNatAg/briza_media","iNatAg/briza_minor","iNatAg/bromus_arvensis","iNatAg/bromus_carinatus","iNatAg/bromus_catharticus","iNatAg/bromus_diandrus","iNatAg/bromus_erectus","iNatAg/bromus_hordeaceus","iNatAg/bromus_inermis","iNatAg/bromus_madritensis","iNatAg/bromus_marginatus","iNatAg/bromus_racemosus","iNatAg/bromus_rubens","iNatAg/bromus_secalinus","iNatAg/bromus_sterilis","iNatAg/bromus_tectorum","iNatAg/bromus_unioloides","iNatAg/bromus_willdenowii","iNatAg/brosimum_alicastrum","iNatAg/broussonetia_papyrifera","iNatAg/bruguiera_gymnorrhiza","iNatAg/bryonia_alba","iNatAg/bryonia_cretica","iNatAg/buchloe_dactyloides","iNatAg/buckinghamia_celsissima","iNatAg/bunias_erucago","iNatAg/bunias_orientalis","iNatAg/burkea_africana","iNatAg/bursera_simaruba","iNatAg/butea_monosperma","iNatAg/butomus_umbellatus","iNatAg/buxus_sempervirens","iNatAg/cacalia_atriplicifolia","iNatAg/caesalpinia_coriaria","iNatAg/caesalpinia_sappan","iNatAg/cajanus_cajan","iNatAg/calamagrostis_epigeios","iNatAg/calathea_allouia","iNatAg/calendula_arvensis","iNatAg/calendula_officinalis","iNatAg/calliandra_calothyrsus","iNatAg/calliandra_tweedii","iNatAg/callisia_angustifolia","iNatAg/callitriche_palustris","iNatAg/callitriche_stagnalis","iNatAg/callitriche_verna","iNatAg/callitris_columellaris","iNatAg/callitris_endlicheri","iNatAg/callitris_macleayana","iNatAg/calluna_vulgaris","iNatAg/calodendrum_capense","iNatAg/calophyllum_apetalum","iNatAg/calophyllum_brasiliense","iNatAg/calophyllum_inophyllum","iNatAg/calopogonium_caeruleum","iNatAg/calopogonium_mucunoides","iNatAg/calotropis_procera","iNatAg/caltha_palustris","iNatAg/calystegia_hederacea","iNatAg/calystegia_occidentalis","iNatAg/calystegia_pubescens","iNatAg/camelina_sativa","iNatAg/camellia_sinensis","iNatAg/campanula_americana","iNatAg/campanula_rapunculus","iNatAg/campanula_rotundifolia","iNatAg/cananga_odorata","iNatAg/canavalia_brasiliensis","iNatAg/canavalia_ensiformis","iNatAg/canavalia_gladiata","iNatAg/canna_indica","iNatAg/canthium_spinosum","iNatAg/capparis_decidua","iNatAg/capparis_spinosa","iNatAg/capparis_tomentosa","iNatAg/capsella_bursa-pastoris","iNatAg/capsicum_annuum","iNatAg/capsicum_chinense","iNatAg/capsicum_frutescens","iNatAg/capsicum_pubescens","iNatAg/caragana_arborescens","iNatAg/caragana_microphylla","iNatAg/carapa_guianensis","iNatAg/cardamine_flexuosa","iNatAg/cardamine_hirsuta","iNatAg/cardamine_impatiens","iNatAg/cardamine_oligosperma","iNatAg/cardamine_parviflora","iNatAg/cardamine_pratensis","iNatAg/cardiospermum_halicacabum","iNatAg/carduus_acanthoides","iNatAg/carduus_crispus","iNatAg/carduus_lanceolatus","iNatAg/carduus_pycnocephalus","iNatAg/carex_nebrascensis","iNatAg/carex_pallescens","iNatAg/carica_cauliflora","iNatAg/carica_papaya","iNatAg/carica_pubescens","iNatAg/cariniana_pyriformis","iNatAg/carissa_carandas","iNatAg/carissa_edulis","iNatAg/carissa_macrocarpa","iNatAg/carlina_acaulis","iNatAg/carludovica_palmata","iNatAg/caroxylon_aphyllum","iNatAg/carpinus_betulus","iNatAg/carthamus_creticus","iNatAg/carthamus_lanatus","iNatAg/carthamus_tinctorius","iNatAg/carum_carvi","iNatAg/carya_illinoensis","iNatAg/caryodendron_orinocense","iNatAg/caryota_urens","iNatAg/casimiroa_edulis","iNatAg/cassia_articulata","iNatAg/cassia_brewsteri","iNatAg/cassia_fistula","iNatAg/cassia_marilandica","iNatAg/cassia_nictitans","iNatAg/cassia_reticulata","iNatAg/cassia_senna","iNatAg/cassia_siamea","iNatAg/cassia_sieberiana","iNatAg/cassia_tomentosa","iNatAg/cassia_tora","iNatAg/castanea_crenata","iNatAg/castanea_dentata","iNatAg/castanea_mollissima","iNatAg/castanea_pumila","iNatAg/castanea_sativa","iNatAg/castanospermum_australe","iNatAg/castilla_elastica","iNatAg/castilleja_angustifolia","iNatAg/castilleja_occidentalis","iNatAg/casuarina_cristata","iNatAg/casuarina_cunninghamiana","iNatAg/casuarina_equisetifolia","iNatAg/casuarina_glauca","iNatAg/casuarina_junghuhniana","iNatAg/casuarina_obesa","iNatAg/catalpa_bignonioides","iNatAg/catha_edulis","iNatAg/catharanthus_roseus","iNatAg/ceanothus_americanus","iNatAg/ceanothus_prostratus","iNatAg/cedrela_odorata","iNatAg/cedrus_deodara","iNatAg/ceiba_pentandra","iNatAg/celastrus_orbiculatus","iNatAg/celastrus_scandens","iNatAg/celosia_argentea","iNatAg/celtis_australis","iNatAg/cenchrus_biflorus","iNatAg/cenchrus_ciliaris","iNatAg/cenchrus_echinatus","iNatAg/cenchrus_setigerus","iNatAg/cenchrus_spinifex","iNatAg/cenchrus_tribuloides","iNatAg/centaurea_biebersteinii","iNatAg/centaurea_calcitrapa","iNatAg/centaurea_cyanus","iNatAg/centaurea_diluta","iNatAg/centaurea_jacea","iNatAg/centaurea_melitensis","iNatAg/centaurea_nigra","iNatAg/centaurea_nigrescens","iNatAg/centaurea_solstitalis","iNatAg/centaurea_solstitialis","iNatAg/centaurea_stoebe","iNatAg/centaurea_virgata","iNatAg/centella_asiatica","iNatAg/centropodia_glauca","iNatAg/centrosema_brasilianum","iNatAg/centrosema_macrocarpum","iNatAg/centrosema_pascuorum","iNatAg/centrosema_plumieri","iNatAg/centrosema_pubescens","iNatAg/centrosema_virginianum","iNatAg/cephalanthus_occidentalis","iNatAg/cerastium_arvense","iNatAg/cerastium_nutans","iNatAg/cerastium_vulgatum","iNatAg/ceratonia_siliqua","iNatAg/ceratopetalum_apetalum","iNatAg/ceratophyllum_demersum","iNatAg/ceratophyllum_echinatum","iNatAg/ceriops_tagal","iNatAg/cestrum_diurnum","iNatAg/ceterach_officinarum","iNatAg/chaerophyllum_tainturieri","iNatAg/chamaebatia_foliolosa","iNatAg/chamaecrista_nictitans","iNatAg/chamaecrista_rotundifolia","iNatAg/chamaedorea_tepejilote","iNatAg/chamaerops_humilis","iNatAg/chara_intermedia","iNatAg/chelidonium_majus","iNatAg/chenopodium_album","iNatAg/chenopodium_ambrosioides","iNatAg/chenopodium_ambrosoides","iNatAg/chenopodium_berlandieri","iNatAg/chenopodium_bonus-henricus","iNatAg/chenopodium_botrys","iNatAg/chenopodium_ficifolium","iNatAg/chenopodium_gigantospermum","iNatAg/chenopodium_glaucum","iNatAg/chenopodium_missouriense","iNatAg/chenopodium_multifidum","iNatAg/chenopodium_murale","iNatAg/chenopodium_polyspermum","iNatAg/chenopodium_quinoa","iNatAg/chenopodium_rubrum","iNatAg/chenopodium_urbicum","iNatAg/chloris_ciliata","iNatAg/chloris_gayana","iNatAg/chloris_roxburghiana","iNatAg/chloris_verticillata","iNatAg/chloris_virgata","iNatAg/chlorogalum_pomeridianum","iNatAg/chlorophora_excelsa","iNatAg/chlorophytum_comosum","iNatAg/chloroxylon_swietenia","iNatAg/chromolaena_odorata","iNatAg/chrysanthemum_coronarium","iNatAg/chrysanthemum_leucanthemum","iNatAg/chrysophyllum_cainito","iNatAg/chrysopogon_aciculatus","iNatAg/chukrasia_velutina","iNatAg/cicer_arietinum","iNatAg/cichorium_endivia","iNatAg/cichorium_intybus","iNatAg/cicuta_bulbifera","iNatAg/cicuta_mackenzieana","iNatAg/cicuta_maculata","iNatAg/cicuta_virosa","iNatAg/cimicifuga_racemosa","iNatAg/cinchona_officinalis","iNatAg/cinchona_pubescens","iNatAg/cinnamomum_burmannii","iNatAg/cinnamomum_camphora","iNatAg/cinnamomum_cassia","iNatAg/cinnamomum_verum","iNatAg/cistus_creticus","iNatAg/citrofortunella_microcarpa","iNatAg/citrullus_colocynthis","iNatAg/citrullus_lanatus","iNatAg/citrus_aurantifolia","iNatAg/citrus_aurantium","iNatAg/citrus_deliciosa","iNatAg/citrus_latifolia","iNatAg/citrus_limon","iNatAg/citrus_madurensis","iNatAg/citrus_medica","iNatAg/citrus_paradisi","iNatAg/citrus_reticulata","iNatAg/citrus_sinensis","iNatAg/citrus_unshiu","iNatAg/clausena_lansium","iNatAg/claytonia_caroliniana","iNatAg/claytonia_virginica","iNatAg/cleistogenes_squarrosa","iNatAg/clematis_ligusticifolia","iNatAg/clematis_orientalis","iNatAg/clematis_virginiana","iNatAg/clematis_vitalba","iNatAg/cleome_gynandra","iNatAg/cleome_hassleriana","iNatAg/cleome_viscosa","iNatAg/clitoria_laurifolia","iNatAg/clitoria_ternatea","iNatAg/clusia_occidentalis","iNatAg/cnicus_benedictus","iNatAg/coccoloba_uvifera","iNatAg/cochlospermum_religiosum","iNatAg/cocos_nucifera","iNatAg/coffea_arabica","iNatAg/coffea_canephora","iNatAg/coffea_liberica","iNatAg/coix_lacryma-jobi","iNatAg/cola_acuminata","iNatAg/cola_nitida","iNatAg/colchicum_autumnale","iNatAg/coleus_amboinicus","iNatAg/colocasia_esculenta","iNatAg/colophospermum_mopane","iNatAg/combretum_aculeatum","iNatAg/combretum_micranthum","iNatAg/combretum_molle","iNatAg/commelina_bengalensis","iNatAg/commelina_benghalensis","iNatAg/commelina_communis","iNatAg/commelina_erecta","iNatAg/commiphora_africana","iNatAg/conium_maculatum","iNatAg/conocarpus_erectus","iNatAg/conocarpus_lancifolius","iNatAg/convallaria_majalis","iNatAg/convolvulus_althaeoides","iNatAg/convolvulus_arvensis","iNatAg/convolvulus_equitans","iNatAg/convolvulus_sepium","iNatAg/copaifera_langsdorffii","iNatAg/corchorus_aestuans","iNatAg/corchorus_capsularis","iNatAg/cordia_africana","iNatAg/cordia_alliodora","iNatAg/coreopsis_lanceolata","iNatAg/coreopsis_tinctoria","iNatAg/coreopsis_verticillata","iNatAg/coriandrum_sativum","iNatAg/corispermum_hyssopifolium","iNatAg/corispermum_villosum","iNatAg/cornus_canadensis","iNatAg/cornus_florida","iNatAg/cornus_mas","iNatAg/cornus_sanguinea","iNatAg/coronilla_varia","iNatAg/corylus_avellana","iNatAg/corylus_maxima","iNatAg/cotoneaster_franchetii","iNatAg/cotula_coronopifolia","iNatAg/crambe_cordifolia","iNatAg/crambe_maritima","iNatAg/crassula_sieberiana","iNatAg/crataegus_crus-galli","iNatAg/crataegus_crus-gallii","iNatAg/crataegus_marshallii","iNatAg/crataegus_monogyna","iNatAg/crataegus_oxyacantha","iNatAg/crataegus_rivularis","iNatAg/cratylia_argentea","iNatAg/crepis_biennis","iNatAg/crepis_occidentalis","iNatAg/crepis_vesicaria","iNatAg/cressa_truxillensis","iNatAg/crinum_americanum","iNatAg/crithmum_maritimum","iNatAg/crocus_sativus","iNatAg/crotalaria_juncea","iNatAg/crotalaria_lanceolata","iNatAg/crotalaria_pallida","iNatAg/crotalaria_podocarpa","iNatAg/crotalaria_retusa","iNatAg/crotalaria_sagittalis","iNatAg/crotalaria_spectabilis","iNatAg/croton_monanthogynus","iNatAg/crucianella_angustifolia","iNatAg/cryptocarya_erythroxylon","iNatAg/cryptomeria_japonica","iNatAg/cryptotaenia_japonica","iNatAg/ctenium_concinnum","iNatAg/cucumis_anguria","iNatAg/cucumis_melo","iNatAg/cucumis_sativus","iNatAg/cucurbita_argyrosperma","iNatAg/cucurbita_digitata","iNatAg/cucurbita_ficifolia","iNatAg/cucurbita_foetidissima","iNatAg/cucurbita_maxima","iNatAg/cucurbita_mixta","iNatAg/cucurbita_moschata","iNatAg/cucurbita_pepo","iNatAg/cunninghamia_lanceolata","iNatAg/cupania_auriculata","iNatAg/cuphea_viscosissima","iNatAg/cupressus_arizonica","iNatAg/cupressus_lusitanica","iNatAg/cupressus_macrocarpa","iNatAg/cupressus_sempervirens","iNatAg/cupressus_torulosa","iNatAg/curcuma_longa","iNatAg/curcuma_zedoaria","iNatAg/cuscuta_approximata","iNatAg/cuscuta_epithymum","iNatAg/cuscuta_obtusiflora","iNatAg/cuscuta_planiflora","iNatAg/cuscuta_sandwichiana","iNatAg/cydonia_oblonga","iNatAg/cymbalaria_muralis","iNatAg/cymbopogon_citratus","iNatAg/cynanchum_scoparium","iNatAg/cynara_cardunculus","iNatAg/cynara_scolymus","iNatAg/cynodon_dactylon","iNatAg/cynodon_nlemfuensis","iNatAg/cynoglossum_officinale","iNatAg/cynometra_cauliflora","iNatAg/cynosurus_cristatus","iNatAg/cyperus_alopecuroides","iNatAg/cyperus_articulatus","iNatAg/cyperus_compressus","iNatAg/cyperus_croceus","iNatAg/cyperus_cuspidatus","iNatAg/cyperus_difformis","iNatAg/cyperus_eragrostis","iNatAg/cyperus_erythrorhizos","iNatAg/cyperus_esculentus","iNatAg/cyperus_flavescens","iNatAg/cyperus_fuscus","iNatAg/cyperus_hyalinus","iNatAg/cyperus_involucratus","iNatAg/cyperus_iria","iNatAg/cyperus_lanceolatus","iNatAg/cyperus_longus","iNatAg/cyperus_odoratus","iNatAg/cyperus_pilosus","iNatAg/cyperus_prolifer","iNatAg/cyperus_pseudovegetus","iNatAg/cyperus_rotundus","iNatAg/cyperus_sanguinolentus","iNatAg/cyperus_squarrosus","iNatAg/cyperus_strigosus","iNatAg/cyperus_subsquarrosus","iNatAg/cyperus_surinamensis","iNatAg/cyphomandra_betacea","iNatAg/cytisus_albus","iNatAg/cytisus_proliferus","iNatAg/cytisus_supinus","iNatAg/dacrydium_franklinii","iNatAg/dactylis_glomerata","iNatAg/dactyloctenium_aegyptium","iNatAg/dactyloctenium_giganteum","iNatAg/dalbergia_latifolia","iNatAg/dalbergia_melanoxylon","iNatAg/dalbergia_sissoo","iNatAg/daphne_laureola","iNatAg/daphne_mezereum","iNatAg/datura_ferox","iNatAg/datura_quercifolia","iNatAg/datura_stramonium","iNatAg/daucus_carota","iNatAg/daucus_carrota","iNatAg/delairea_odorata","iNatAg/delonix_regia","iNatAg/delphinium_bicolor","iNatAg/delphinium_carolinianum","iNatAg/delphinium_menziesii","iNatAg/delphinium_trolliifolium","iNatAg/dendrocalamus_asper","iNatAg/dendrocalamus_giganteus","iNatAg/dendrocalamus_strictus","iNatAg/dendrolobium_umbellatum","iNatAg/derris_elliptica","iNatAg/deschampsia_caespitosa","iNatAg/deschampsia_flexuosa","iNatAg/desmanthus_leptophyllus","iNatAg/desmanthus_virgatus","iNatAg/desmodium_affine","iNatAg/desmodium_barbatum","iNatAg/desmodium_cuneatum","iNatAg/desmodium_cuspidatum","iNatAg/desmodium_distortum","iNatAg/desmodium_gyroides","iNatAg/desmodium_heterophyllum","iNatAg/desmodium_incanum","iNatAg/desmodium_intortum","iNatAg/desmodium_paniculatum","iNatAg/desmodium_psilocarpum","iNatAg/desmodium_reticulatum","iNatAg/desmodium_sandwicense","iNatAg/desmodium_scorpiurus","iNatAg/desmodium_tortuosum","iNatAg/desmodium_triflorum","iNatAg/desmodium_uncinatum","iNatAg/desmodium_velutinum","iNatAg/dialium_guineense","iNatAg/dianthus_armeria","iNatAg/dichanthium_annulatum","iNatAg/dichanthium_aristatum","iNatAg/dichanthium_caricosum","iNatAg/dichanthium_sericeum","iNatAg/dichondra_carolinensis","iNatAg/dichondra_micrantha","iNatAg/dichrostachys_cinerea","iNatAg/dictamnus_albus","iNatAg/didymopanax_morototoni","iNatAg/diervilla_lonicera","iNatAg/digitalis_lanata","iNatAg/digitalis_lutea","iNatAg/digitalis_purpurea","iNatAg/digitaria_argyrograpta","iNatAg/digitaria_ciliaris","iNatAg/digitaria_decumbens","iNatAg/digitaria_didactyla","iNatAg/digitaria_eriantha","iNatAg/digitaria_tricholaenoides","iNatAg/digitaria_violascens","iNatAg/dillenia_indica","iNatAg/dillenia_pentagyna","iNatAg/diodia_virginiana","iNatAg/dioscorea_alata","iNatAg/dioscorea_bulbifera","iNatAg/dioscorea_esculenta","iNatAg/dioscorea_opposita","iNatAg/dioscorea_oppositifolia","iNatAg/dioscorea_trifida","iNatAg/diospyros_digyna","iNatAg/diospyros_kaki","iNatAg/diospyros_malabarica","iNatAg/diospyros_melanoxylon","iNatAg/diospyros_mespiliformis","iNatAg/diospyros_virginiana","iNatAg/diplachne_fusca","iNatAg/diploglottis_cunninghamii","iNatAg/dipsacus_fullonum","iNatAg/dipsacus_laciniatus","iNatAg/dipsacus_sylvestris","iNatAg/dipterocarpus_alatus","iNatAg/dipterocarpus_indicus","iNatAg/dipterocarpus_turbinatus","iNatAg/dodonaea_viscosa","iNatAg/dovyalis_caffra","iNatAg/dovyalis_hebecarpa","iNatAg/draba_nemorosa","iNatAg/draba_verna","iNatAg/dracocephalum_parviflorum","iNatAg/dracocephalum_thymiflorum","iNatAg/drosera_rotundifolia","iNatAg/dryopteris_filix-mas","iNatAg/duboisia_myoporoides","iNatAg/durio_zibethinus","iNatAg/dysoxylum_fraserianum","iNatAg/ecballium_elaterium","iNatAg/echinacea_purpurea","iNatAg/echinochloa_colona","iNatAg/echinochloa_crus-galli","iNatAg/echinochloa_frumentacea","iNatAg/echinochloa_polystachya","iNatAg/echinochloa_pyramidalis","iNatAg/echinops_sphaerocephalus","iNatAg/echium_plantagineum","iNatAg/echium_vulgare","iNatAg/ehrharta_calycina","iNatAg/ehrharta_erecta","iNatAg/ehrharta_longiflora","iNatAg/ehrharta_villosa","iNatAg/eichhornia_crassipes","iNatAg/ekebergia_capensis","iNatAg/elaeagnus_angustifolia","iNatAg/elaeagnus_multiflora","iNatAg/elaeis_guineensis","iNatAg/elaeis_oleifera","iNatAg/elaeocarpus_grandis","iNatAg/eleagnus_angustifolia","iNatAg/elegia_cuspidata","iNatAg/eleocharis_cellulosa","iNatAg/eleocharis_dulcis","iNatAg/eleocharis_macrostachya","iNatAg/eleocharis_montevidensis","iNatAg/eleocharis_vivipara","iNatAg/elephantopus_mollis","iNatAg/elephantorrhiza_elephantina","iNatAg/elettaria_cardamomum","iNatAg/eleusine_indica","iNatAg/ellisia_nyctelea","iNatAg/elsholtzia_ciliata","iNatAg/elymus_canadensis","iNatAg/elymus_caput-medusae","iNatAg/elymus_cinereus","iNatAg/elymus_condensatus","iNatAg/elymus_dahuricus","iNatAg/elymus_glaucus","iNatAg/elymus_viginicus","iNatAg/elymus_virginicus","iNatAg/emilia_sonchifolia","iNatAg/encalypta_intermedia","iNatAg/enneapogon_scoparius","iNatAg/ensete_ventricosum","iNatAg/entada_abyssinica","iNatAg/entada_africana","iNatAg/enterolobium_cyclocarpum","iNatAg/epilobium_angustifolium","iNatAg/epilobium_ciliatum","iNatAg/equisetum_arvense","iNatAg/equisetum_hyemale","iNatAg/equisetum_palustre","iNatAg/equisetum_sylvaticum","iNatAg/equisetum_telmateia","iNatAg/eragrostis_amabilis","iNatAg/eragrostis_barrelieri","iNatAg/eragrostis_capillaris","iNatAg/eragrostis_chloromelas","iNatAg/eragrostis_cilianensis","iNatAg/eragrostis_curvula","iNatAg/eragrostis_interrupta","iNatAg/eragrostis_lehmanniana","iNatAg/eragrostis_minor","iNatAg/eragrostis_obtusa","iNatAg/eragrostis_pilosa","iNatAg/eragrostis_racemosa","iNatAg/eragrostis_superba","iNatAg/eragrostis_tef","iNatAg/eragrostis_tremula","iNatAg/eragrostis_trichodes","iNatAg/eragrostis_unioloides","iNatAg/eremochloa_ophiuroides","iNatAg/erigeron_canadensis","iNatAg/erigeron_cascadensis","iNatAg/erigeron_divaricatus","iNatAg/erigeron_philadelphicus","iNatAg/eriobotrya_japonica","iNatAg/eriochloa_punctata","iNatAg/eriogonum_deflexum","iNatAg/eriogonum_longifolium","iNatAg/eriosema_psoraleoides","iNatAg/eruca_sativa","iNatAg/eryngium_campestre","iNatAg/eryngium_yuccifolium","iNatAg/erysimum_cheiranthoides","iNatAg/erysimum_hieracifolium","iNatAg/erysimum_hieraciifolium","iNatAg/erysimum_repandum","iNatAg/erythrina_abyssinica","iNatAg/erythrina_caffra","iNatAg/erythrina_edulis","iNatAg/erythrina_fusca","iNatAg/erythrina_poeppigiana","iNatAg/erythrina_variegata","iNatAg/erythrina_vespertilio","iNatAg/erythrophleum_chlorostachys","iNatAg/erythroxylum_coca","iNatAg/eucalyptus_accedens","iNatAg/eucalyptus_agglomerata","iNatAg/eucalyptus_albens","iNatAg/eucalyptus_astringens","iNatAg/eucalyptus_bosistoana","iNatAg/eucalyptus_botryoides","iNatAg/eucalyptus_brockwayi","iNatAg/eucalyptus_calophylla","iNatAg/eucalyptus_camaldulensis","iNatAg/eucalyptus_cinerea","iNatAg/eucalyptus_citriodora","iNatAg/eucalyptus_cladocalyx","iNatAg/eucalyptus_cloeziana","iNatAg/eucalyptus_consideniana","iNatAg/eucalyptus_cornuta","iNatAg/eucalyptus_crebra","iNatAg/eucalyptus_cypellocarpa","iNatAg/eucalyptus_dalrympleana","iNatAg/eucalyptus_deglupta","iNatAg/eucalyptus_delegatensis","iNatAg/eucalyptus_diversicolor","iNatAg/eucalyptus_dumosa","iNatAg/eucalyptus_elata","iNatAg/eucalyptus_eremophila","iNatAg/eucalyptus_eugenioides","iNatAg/eucalyptus_exserta","iNatAg/eucalyptus_fastigata","iNatAg/eucalyptus_fraxinoides","iNatAg/eucalyptus_globoidea","iNatAg/eucalyptus_globulus","iNatAg/eucalyptus_gomphocephala","iNatAg/eucalyptus_gongylocarpa","iNatAg/eucalyptus_grandis","iNatAg/eucalyptus_guilfoylei","iNatAg/eucalyptus_gummifera","iNatAg/eucalyptus_intertexta","iNatAg/eucalyptus_jacksonii","iNatAg/eucalyptus_johnstonii","iNatAg/eucalyptus_kessellii","iNatAg/eucalyptus_laophila","iNatAg/eucalyptus_largiflorens","iNatAg/eucalyptus_leucoxylon","iNatAg/eucalyptus_longifolia","iNatAg/eucalyptus_loxophleba","iNatAg/eucalyptus_maculata","iNatAg/eucalyptus_marginata","iNatAg/eucalyptus_melliodora","iNatAg/eucalyptus_microcarpa","iNatAg/eucalyptus_microcorys","iNatAg/eucalyptus_microtheca","iNatAg/eucalyptus_mitchelliana","iNatAg/eucalyptus_moluccana","iNatAg/eucalyptus_muelleriana","iNatAg/eucalyptus_nigrifunda","iNatAg/eucalyptus_niphophila","iNatAg/eucalyptus_nitens","iNatAg/eucalyptus_obliqua","iNatAg/eucalyptus_occidentalis","iNatAg/eucalyptus_ochrophloia","iNatAg/eucalyptus_oreades","iNatAg/eucalyptus_paniculata","iNatAg/eucalyptus_papuana","iNatAg/eucalyptus_patens","iNatAg/eucalyptus_pauciflora","iNatAg/eucalyptus_pellita","iNatAg/eucalyptus_phoenicea","iNatAg/eucalyptus_pilularis","iNatAg/eucalyptus_piperita","iNatAg/eucalyptus_planchoniana","iNatAg/eucalyptus_pleurocarpa","iNatAg/eucalyptus_polyanthemos","iNatAg/eucalyptus_populnea","iNatAg/eucalyptus_propinqua","iNatAg/eucalyptus_pulchella","iNatAg/eucalyptus_punctata","iNatAg/eucalyptus_pyrocarpa","iNatAg/eucalyptus_quadrangulata","iNatAg/eucalyptus_regnans","iNatAg/eucalyptus_resinifera","iNatAg/eucalyptus_robusta","iNatAg/eucalyptus_rubida","iNatAg/eucalyptus_rudis","iNatAg/eucalyptus_saligna","iNatAg/eucalyptus_salmonophloia","iNatAg/eucalyptus_salubris","iNatAg/eucalyptus_sargentii","iNatAg/eucalyptus_scias","iNatAg/eucalyptus_sideroxylon","iNatAg/eucalyptus_sieberi","iNatAg/eucalyptus_socialis","iNatAg/eucalyptus_subcrenulata","iNatAg/eucalyptus_tereticornis","iNatAg/eucalyptus_thozetiana","iNatAg/eucalyptus_transcontinentalis","iNatAg/eucalyptus_trivalva","iNatAg/eucalyptus_urnigera","iNatAg/eucalyptus_urophylla","iNatAg/eucalyptus_utilis","iNatAg/eucalyptus_viminalis","iNatAg/eucalyptus_wandoo","iNatAg/eucalyptus_woollsiana","iNatAg/eucryphia_lucida","iNatAg/eugenia_aromatica","iNatAg/eugenia_stipitata","iNatAg/eugenia_uniflora","iNatAg/euonymus_atropurpureus","iNatAg/euonymus_europaeus","iNatAg/euonymus_japonicus","iNatAg/eupatorium_album","iNatAg/eupatorium_altissimum","iNatAg/eupatorium_cannabinum","iNatAg/eupatorium_compositifolium","iNatAg/eupatorium_hyssopifolium","iNatAg/eupatorium_maculatum","iNatAg/eupatorium_perfoliatum","iNatAg/eupatorium_purpureum","iNatAg/eupatorium_serotinum","iNatAg/euphorbia_cyathophora","iNatAg/euphorbia_cyparissias","iNatAg/euphorbia_dendroides","iNatAg/euphorbia_epicyparissias","iNatAg/euphorbia_esula","iNatAg/euphorbia_helioscopia","iNatAg/euphorbia_heterophylla","iNatAg/euphorbia_hirsuta","iNatAg/euphorbia_hirta","iNatAg/euphorbia_hyssopifolia","iNatAg/euphorbia_lathyris","iNatAg/euphorbia_lathyrus","iNatAg/euphorbia_maculata","iNatAg/euphorbia_marginata","iNatAg/euphorbia_nutans","iNatAg/euphorbia_peplis","iNatAg/euphorbia_peplus","iNatAg/euphorbia_platyphyllos","iNatAg/euphorbia_prostata","iNatAg/euphorbia_prostrata","iNatAg/euphorbia_serphyllifolia","iNatAg/euphorbia_serpyllifolia","iNatAg/euphorbia_serrata","iNatAg/euphorbia_serrulata","iNatAg/euphorbia_spathulata","iNatAg/euphorbia_terracina","iNatAg/euphorbia_tirucalli","iNatAg/euphorbia_vermiculata","iNatAg/eurycoma_longifolia","iNatAg/eusideroxylon_zwageri","iNatAg/eustachys_paspaloides","iNatAg/euterpe_edulis","iNatAg/euterpe_oleracea","iNatAg/euthamia_occidentalis","iNatAg/evax_multicaulis","iNatAg/evonymus_europaeus","iNatAg/excoecaria_agallocha","iNatAg/fagopyrum_esculentum","iNatAg/fagopyrum_tataricum","iNatAg/fagraea_fragrans","iNatAg/fagus_grandifolia","iNatAg/fagus_sylvatica","iNatAg/faidherbia_albida","iNatAg/faurea_saligna","iNatAg/feijoa_sellowiana","iNatAg/festuca_arundinacea","iNatAg/festuca_gigantea","iNatAg/festuca_idahoensis","iNatAg/festuca_microstachys","iNatAg/festuca_myuros","iNatAg/festuca_ovina","iNatAg/festuca_pratensis","iNatAg/festuca_rubra","iNatAg/festuca_scabra","iNatAg/fibraurea_tinctoria","iNatAg/ficus_abutilifolia","iNatAg/ficus_auriculata","iNatAg/ficus_benghalensis","iNatAg/ficus_carica","iNatAg/ficus_elastica","iNatAg/ficus_glumosa","iNatAg/ficus_macrophylla","iNatAg/ficus_sycomorus","iNatAg/ficus_thonningii","iNatAg/filago_gallica","iNatAg/filipendula_vulgaris","iNatAg/flacourtia_indica","iNatAg/flemingia_macrophylla","iNatAg/flindersia_bourjotiana","iNatAg/flindersia_brayleyana","iNatAg/flindersia_pimenteliana","iNatAg/foeniculum_vulgare","iNatAg/fortunella_hindsii","iNatAg/fortunella_japonica","iNatAg/fortunella_margarita","iNatAg/fragaria_ananassa","iNatAg/fragaria_chiloensis","iNatAg/fragaria_vesca","iNatAg/fragaria_virginiana","iNatAg/frangula_alnus","iNatAg/fraxinus_americana","iNatAg/fraxinus_excelsior","iNatAg/frithia_humilis","iNatAg/fuirena_simplex","iNatAg/fumaria_capreolata","iNatAg/fumaria_officinalis","iNatAg/fumaria_parviflora","iNatAg/gaillardia_pulchella","iNatAg/galactia_marginalis","iNatAg/galactia_striata","iNatAg/galega_officinalis","iNatAg/galega_orientalis","iNatAg/galeopsis_ladanum","iNatAg/galeopsis_tetrahit","iNatAg/galinsoga_quadriradiata","iNatAg/galium_aparine","iNatAg/galium_mollugo","iNatAg/galium_paniculatum","iNatAg/galium_parisiense","iNatAg/galium_saxatile","iNatAg/galium_spurium","iNatAg/galium_tricornutum","iNatAg/galium_verum","iNatAg/garcinia_dulcis","iNatAg/garcinia_mangostana","iNatAg/garcinia_multiflora","iNatAg/garcinia_xanthochymus","iNatAg/garuga_pinnata","iNatAg/gaultheria_procumbens","iNatAg/gaura_biennis","iNatAg/geissois_benthamii","iNatAg/genipa_americana","iNatAg/genista_canariensis","iNatAg/genista_tinctoria","iNatAg/gentiana_acaulis","iNatAg/gentiana_lutea","iNatAg/geranium_carolinianum","iNatAg/geranium_dissectum","iNatAg/geranium_molle","iNatAg/geranium_pratense","iNatAg/geranium_pusillum","iNatAg/geranium_robertianum","iNatAg/girardinia_diversifolia","iNatAg/glechoma_hederacea","iNatAg/glecoma_hederacea","iNatAg/gleditsia_triacanthos","iNatAg/gliricidia_sepium","iNatAg/globularia_vulgaris","iNatAg/glyceria_fluitans","iNatAg/glyceria_septentrionalis","iNatAg/glycine_max","iNatAg/glycyrrhiza_glabra","iNatAg/glycyrrhiza_lepidota","iNatAg/gmelina_arborea","iNatAg/gmelina_leichhardtii","iNatAg/gnaphalium_calviceps","iNatAg/gnaphalium_luteo-album","iNatAg/gnaphalium_luteoalbum","iNatAg/gnaphalium_palustre","iNatAg/gnaphalium_pensylvanicum","iNatAg/gnaphalium_purpureum","iNatAg/gnaphalium_uliginosum","iNatAg/gossypium_barbadense","iNatAg/gossypium_herbaceum","iNatAg/gossypium_hirsutum","iNatAg/grevillea_parallela","iNatAg/grevillea_robusta","iNatAg/grewia_asiatica","iNatAg/grewia_bicolor","iNatAg/grewia_tiliifolia","iNatAg/guaiacum_officinale","iNatAg/guaiacum_sanctum","iNatAg/guazuma_ulmifolia","iNatAg/guizotia_abyssinica","iNatAg/gunnera_tinctoria","iNatAg/gypsophila_paniculata","iNatAg/hagenia_abyssinica","iNatAg/hamamelis_virginiana","iNatAg/hardwickia_binata","iNatAg/harpagophytum_procumbens","iNatAg/harpochloa_falx","iNatAg/harungana_madagascariensis","iNatAg/hedera_helix","iNatAg/hedysarum_coronarium","iNatAg/hedysarum_pallidum","iNatAg/hedysarum_spinosissimum","iNatAg/helenium_autumnale","iNatAg/helenium_tenuifolium","iNatAg/helianthus_annus","iNatAg/helianthus_annuus","iNatAg/helianthus_ciliaris","iNatAg/helianthus_pauciflorus","iNatAg/helianthus_petiolaris","iNatAg/helianthus_tuberosus","iNatAg/helictotrichon_turgidulum","iNatAg/heliotropium_amplexicaule","iNatAg/heliotropium_curassavicum","iNatAg/heliotropium_europaeum","iNatAg/hemarthria_altissima","iNatAg/hemizonia_congesta","iNatAg/heracleum_sphondylium","iNatAg/heritiera_littoralis","iNatAg/heteropogon_contortus","iNatAg/heterotheca_grandiflora","iNatAg/heuchera_mexicana","iNatAg/hevea_brasiliensis","iNatAg/hibiscus_cannabinus","iNatAg/hibiscus_sabdariffa","iNatAg/hibiscus_syriacus","iNatAg/hibiscus_tiliaceus","iNatAg/hibiscus_tilliaceus","iNatAg/hieracium_aurantiacum","iNatAg/hieracium_gronovii","iNatAg/hieracium_lachenalii","iNatAg/hieracium_laevigatum","iNatAg/hieracium_murorum","iNatAg/hieracium_pilosella","iNatAg/hieracium_piloselloides","iNatAg/hieracium_umbellatum","iNatAg/hieracium_venosum","iNatAg/hieracium_vulgatum","iNatAg/hierochloe_odorata","iNatAg/hilaria_jamesii","iNatAg/hilaria_mutica","iNatAg/hippophae_rhamnoides","iNatAg/hippophae_salicifolia","iNatAg/hippuris_vulgaris","iNatAg/holcus_lanatus","iNatAg/holcus_mollis","iNatAg/hopea_odorata","iNatAg/hopea_parviflora","iNatAg/hopea_wightiana","iNatAg/hordeum_brachyantherum","iNatAg/hordeum_brevisubulatum","iNatAg/hordeum_bulbosum","iNatAg/hordeum_distichon","iNatAg/hordeum_geniculatum","iNatAg/hordeum_jubatum","iNatAg/hordeum_murinum","iNatAg/hordeum_vulgare","iNatAg/houstonia_caerulea","iNatAg/humulus_lupulus","iNatAg/hydnocarpus_alpina","iNatAg/hydrocotyle_americana","iNatAg/hydrocotyle_mexicana","iNatAg/hydrocotyle_ranunculoides","iNatAg/hydrocotyle_sibthorpioides","iNatAg/hydrocotyle_umbellata","iNatAg/hydrocotyle_verticillata","iNatAg/hydrolea_uniflora","iNatAg/hylocereus_undatus","iNatAg/hymenaea_courbaril","iNatAg/hymenopappus_scabiosaeus","iNatAg/hymenoxys_odorata","iNatAg/hyosciamus_niger","iNatAg/hyoscyamus_niger","iNatAg/hyparrhenia_dregeana","iNatAg/hyparrhenia_filipendula","iNatAg/hyparrhenia_hirta","iNatAg/hyparrhenia_rufa","iNatAg/hypericum_canadense","iNatAg/hypericum_canariense","iNatAg/hypericum_mutilum","iNatAg/hypericum_mutlium","iNatAg/hypericum_perforatum","iNatAg/hypericum_prolificum","iNatAg/hypericum_punctatum","iNatAg/hyperthelia_dissoluta","iNatAg/hyphaene_compressa","iNatAg/hyphaene_thebaica","iNatAg/hypochaeris_glabra","iNatAg/hypochaeris_radicata","iNatAg/hypoxis_hemerocallidea","iNatAg/hyssopus_officinalis","iNatAg/ilex_aquifolium","iNatAg/ilex_dipyrena","iNatAg/ilex_paraguariensis","iNatAg/impatiens_balsamina","iNatAg/impatiens_parviflora","iNatAg/imperata_brevifolia","iNatAg/imperata_cylindrica","iNatAg/indigofera_arrecta","iNatAg/indigofera_hirsuta","iNatAg/indigofera_oblongifolia","iNatAg/indigofera_schimperi","iNatAg/indigofera_spicata","iNatAg/indigofera_suffruticosa","iNatAg/indigofera_tinctoria","iNatAg/inga_edulis","iNatAg/inga_vera","iNatAg/intsia_bijuga","iNatAg/inula_britannica","iNatAg/inula_helenium","iNatAg/ipomoea_alba","iNatAg/ipomoea_aquatica","iNatAg/ipomoea_batatas","iNatAg/ipomoea_coccinea","iNatAg/ipomoea_hederifolia","iNatAg/ipomoea_lacunosa","iNatAg/ipomoea_quamoclit","iNatAg/ipomoea_tricolor","iNatAg/ipomoea_triloba","iNatAg/ipomoea_turbinata","iNatAg/iris_germanica","iNatAg/iris_missouriensis","iNatAg/iris_pseudacorus","iNatAg/iris_pseudoacorus","iNatAg/iris_virginica","iNatAg/isatis_tinctoria","iNatAg/ischaemum_ciliare","iNatAg/ischaemum_muticum","iNatAg/ischaemum_rugosum","iNatAg/iseilema_vaginiflorum","iNatAg/iva_angustifolia","iNatAg/iva_annua","iNatAg/jacaranda_copaia","iNatAg/jacaranda_mimosifolia","iNatAg/jatropha_curcas","iNatAg/jatropha_gossypifolia","iNatAg/jatropha_gossypiifolia","iNatAg/juglans_hindsii","iNatAg/juglans_nigra","iNatAg/juglans_regia","iNatAg/juncus_bufonius","iNatAg/juncus_effusus","iNatAg/juniperus_communis","iNatAg/juniperus_occidentalis","iNatAg/juniperus_pinchotii","iNatAg/juniperus_procera","iNatAg/juniperus_sabina","iNatAg/justicia_adhatoda","iNatAg/kalmia_angustifolia","iNatAg/khaya_anthotheca","iNatAg/khaya_senegalensis","iNatAg/kigelia_pinnata","iNatAg/kyllinga_gracillima","iNatAg/kyllinga_odorata","iNatAg/lablab_purpureus","iNatAg/lactuca_canadensis","iNatAg/lactuca_indica","iNatAg/lactuca_saligna","iNatAg/lactuca_serriola","iNatAg/lactuca_virosa","iNatAg/lagascea_mollis","iNatAg/lagenaria_siceraria","iNatAg/lagerstroemia_flos-reginae","iNatAg/lagerstroemia_lanceolata","iNatAg/lagerstroemia_parviflora","iNatAg/laguncularia_racemosa","iNatAg/lamium_album","iNatAg/lamium_amplexicaule","iNatAg/lamium_maculatum","iNatAg/lamium_purpureum","iNatAg/lannea_coromandelica","iNatAg/lannea_edulis","iNatAg/lansium_domesticum","iNatAg/lantana_camara","iNatAg/lapsana_communis","iNatAg/larix_decidua","iNatAg/larrea_divaricata","iNatAg/lathyrus_angulatus","iNatAg/lathyrus_cicera","iNatAg/lathyrus_hirsutus","iNatAg/lathyrus_latifolius","iNatAg/lathyrus_ochrus","iNatAg/lathyrus_odoratus","iNatAg/lathyrus_palustris","iNatAg/lathyrus_pratensis","iNatAg/lathyrus_pubescens","iNatAg/lathyrus_sativus","iNatAg/lathyrus_tingitanus","iNatAg/lathyrus_tuberosus","iNatAg/laurus_nobilis","iNatAg/lavandula_angustifolia","iNatAg/lavandula_dentata","iNatAg/lavandula_latifolia","iNatAg/lawsonia_inermis","iNatAg/ledum_groenlandicum","iNatAg/leersia_hexandra","iNatAg/leersia_lenticularis","iNatAg/lemna_aequinoctialis","iNatAg/lemna_gibba","iNatAg/lemna_minor","iNatAg/lemna_trisulca","iNatAg/lens_culinaris","iNatAg/leontodon_autumnale","iNatAg/leontodon_autumnalis","iNatAg/leontodon_hirtus","iNatAg/leontodon_saxatilis","iNatAg/leontopodium_alpinum","iNatAg/leonurus_cardiaca","iNatAg/leonurus_marrubiastrum","iNatAg/leonurus_sibericus","iNatAg/leonurus_sibiricus","iNatAg/lepidium_austrinum","iNatAg/lepidium_chalepense","iNatAg/lepidium_didymum","iNatAg/lepidium_draba","iNatAg/lepidium_lasiocarpum","iNatAg/lepidium_latifolium","iNatAg/lepidium_perfoliatum","iNatAg/lepidium_ruderale","iNatAg/lepidium_sativum","iNatAg/lepidium_virginicum","iNatAg/leptochloa_chinensis","iNatAg/leptochloa_fusca","iNatAg/leptochloa_nealleyi","iNatAg/lespedeza_cuneata","iNatAg/lespedeza_striata","iNatAg/lesquerella_fendleri","iNatAg/leucaena_diversifolia","iNatAg/leucaena_leucocephala","iNatAg/leucanthemum_vulgare","iNatAg/leucojum_aestivum","iNatAg/levisticum_officinale","iNatAg/liatris_mucronata","iNatAg/licuala_ramsayi","iNatAg/ligustrum_ovalifolium","iNatAg/ligustrum_vulgare","iNatAg/lilium_canadense","iNatAg/lilium_candidum","iNatAg/limnanthes_alba","iNatAg/limnophila_sessiliflora","iNatAg/linaria_vulgaris","iNatAg/lindernia_grandiflora","iNatAg/linum_usitatissimum","iNatAg/lippia_alba","iNatAg/liquidambar_styraciflua","iNatAg/liriodendron_tulipifera","iNatAg/litchi_chinensis","iNatAg/lithospermum_arvense","iNatAg/lithospermum_officinale","iNatAg/livistona_australis","iNatAg/lobelia_inflata","iNatAg/lobelia_siphilitica","iNatAg/lolium_multiflorum","iNatAg/lolium_perenne","iNatAg/lolium_rigidum","iNatAg/lolium_temulentum","iNatAg/lonchocarpus_laxiflorus","iNatAg/lonicera_caerulea","iNatAg/lonicera_caprifolium","iNatAg/lonicera_periclymenum","iNatAg/lonicera_sempervirens","iNatAg/lonicera_tartarica","iNatAg/lonicera_tatarica","iNatAg/lonicera_xylosteum","iNatAg/lophostemon_suaveolens","iNatAg/lotus_corniculatus","iNatAg/lotus_creticus","iNatAg/lotus_edulis","iNatAg/lotus_halophilus","iNatAg/lotus_parviflorus","iNatAg/lotus_tenuis","iNatAg/lotus_uliginosus","iNatAg/loudetia_simplex","iNatAg/ludwigia_adscendens","iNatAg/ludwigia_alternifolia","iNatAg/luffa_acutangula","iNatAg/luffa_cylindrica","iNatAg/lumnitzera_littorea","iNatAg/lumnitzera_racemosa","iNatAg/lunaria_annua","iNatAg/lupinus_albus","iNatAg/lupinus_angustifolius","iNatAg/lupinus_arboreus","iNatAg/lupinus_cosentinii","iNatAg/lupinus_luteus","iNatAg/lupinus_mutabilis","iNatAg/lupinus_pilosus","iNatAg/lychnis_chalcedonica","iNatAg/lychnis_flos-cuculi","iNatAg/lychnis_viscaria","iNatAg/lycium_barbarum","iNatAg/lycium_berlandieri","iNatAg/lycium_chinense","iNatAg/lycium_ferocissimum","iNatAg/lycium_halimifolium","iNatAg/lycopersicon_esculentum","iNatAg/lycopodium_clavatum","iNatAg/lycopus_europaeus","iNatAg/lysimachia_ciliata","iNatAg/lysimachia_nummularia","iNatAg/lysimachia_punctata","iNatAg/lysimachia_vulgaris","iNatAg/lythrum_hyssopifolia","iNatAg/lythrum_salicaria","iNatAg/lythrum_virgatum","iNatAg/macadamia_integrifolia","iNatAg/macadamia_tetraphylla","iNatAg/macaranga_tanarius","iNatAg/macroptilium_atropurpureum","iNatAg/macroptilium_erythroloma","iNatAg/macroptilium_gracile","iNatAg/macroptilium_lathyroides","iNatAg/macroptilium_longepedunculatum","iNatAg/macrotyloma_axillare","iNatAg/maesopsis_eminii","iNatAg/maianthemum_canadense","iNatAg/majorana_hortensis","iNatAg/malachra_alceifolia","iNatAg/mallotus_philippensis","iNatAg/malpighia_glabra","iNatAg/malus_domestica","iNatAg/malus_sylvestris","iNatAg/malva_alcea","iNatAg/malva_moschata","iNatAg/malva_nicaeensis","iNatAg/malva_parviflora","iNatAg/malva_pusilla","iNatAg/malva_rotundifolia","iNatAg/malva_silvestris","iNatAg/malva_sylvestris","iNatAg/mammea_americana","iNatAg/mangifera_indica","iNatAg/manihot_esculenta","iNatAg/manilkara_zapota","iNatAg/maranta_arundinacea","iNatAg/markhamia_lutea","iNatAg/marrubium_vulgare","iNatAg/marsilea_quadrifolia","iNatAg/matricaria_chamomila","iNatAg/matricaria_chamomilla","iNatAg/matricaria_discoidea","iNatAg/matricaria_perforata","iNatAg/matricaria_recutita","iNatAg/mauritia_flexuosa","iNatAg/mayaca_fluviatilis","iNatAg/medicago_arabica","iNatAg/medicago_falcata","iNatAg/medicago_intertexta","iNatAg/medicago_laciniata","iNatAg/medicago_littoralis","iNatAg/medicago_lupulina","iNatAg/medicago_marina","iNatAg/medicago_minima","iNatAg/medicago_orbicularis","iNatAg/medicago_polymorpha","iNatAg/medicago_rigidula","iNatAg/medicago_rugosa","iNatAg/medicago_sativa","iNatAg/medicago_scutellata","iNatAg/medicago_tornata","iNatAg/medicago_truncatula","iNatAg/medicago_turbinata","iNatAg/melaleuca_bracteata","iNatAg/melaleuca_cajuputi","iNatAg/melaleuca_dealbata","iNatAg/melaleuca_lanceolata","iNatAg/melaleuca_leucadendron","iNatAg/melaleuca_nervosa","iNatAg/melaleuca_quinquenervia","iNatAg/melaleuca_viridiflora","iNatAg/melampyrum_lineare","iNatAg/melastoma_malabathricum","iNatAg/melastoma_melabathricum","iNatAg/melia_azedarach","iNatAg/melica_decumbens","iNatAg/melicoccus_bijugatus","iNatAg/melilotus_albus","iNatAg/melilotus_indica","iNatAg/melilotus_officinalis","iNatAg/melilotus_suaveolens","iNatAg/melinis_minutiflora","iNatAg/melissa_officinalis","iNatAg/melochia_corchorifolia","iNatAg/melothria_pendula","iNatAg/mentha_arvensis","iNatAg/mentha_longifolia","iNatAg/mentha_piperita","iNatAg/mentha_pulegium","iNatAg/mentha_rotundifolia","iNatAg/mentha_spicata","iNatAg/menyanthes_trifoliata","iNatAg/mercurialis_annua","iNatAg/mesembryanthemum_cristallinum","iNatAg/mesembryanthemum_noctiflorum","iNatAg/mespilus_germanica","iNatAg/mesua_ferrea","iNatAg/metroxylon_sagu","iNatAg/michelia_champaca","iNatAg/microstegium_ciliatum","iNatAg/miliusa_velutina","iNatAg/mimosa_casta","iNatAg/mimosa_dutrae","iNatAg/mimosa_pigra","iNatAg/mimosa_pudica","iNatAg/mirabilis_jalapa","iNatAg/molinia_caerulea","iNatAg/mollugo_verticillata","iNatAg/momordica_charantia","iNatAg/momordica_cochinchinensis","iNatAg/monarda_fistulosa","iNatAg/monarda_punctata","iNatAg/monochoria_hastata","iNatAg/monochoria_vaginalis","iNatAg/monocymbium_ceresiiforme","iNatAg/monstera_deliciosa","iNatAg/montanoa_hibiscifolia","iNatAg/morinda_citrifolia","iNatAg/moringa_oleifera","iNatAg/morus_alba","iNatAg/morus_nigra","iNatAg/morus_rubra","iNatAg/mucuna_pruriens","iNatAg/muntingia_calabura","iNatAg/murraya_koenigii","iNatAg/musa_acuminata","iNatAg/musa_acuminata_×_balbisiana","iNatAg/musa_balbisiana","iNatAg/musa_sapientium","iNatAg/musanga_cecropioides","iNatAg/muscari_comosum","iNatAg/myosotis_alpestris","iNatAg/myosurus_minimus","iNatAg/myrica_cerifera","iNatAg/myriophyllum_heterophyllum","iNatAg/myriophyllum_implicatum","iNatAg/myriophyllum_sibiricum","iNatAg/myriophyllum_spicatum","iNatAg/myriophyllum_verticillatum","iNatAg/myristica_fragrans","iNatAg/myroxylon_balsamum","iNatAg/myrsine_africana","iNatAg/myrtus_communis","iNatAg/nardus_stricta","iNatAg/nasturtium_officinale","iNatAg/nauclea_orientalis","iNatAg/nelumbo_nucifera","iNatAg/neofabricia_myrtifolia","iNatAg/neoglaziovia_variegata","iNatAg/neonotonia_wightii","iNatAg/nepeta_cataria","iNatAg/nephelium_lappaceum","iNatAg/nephelium_mutabile","iNatAg/nerium_oleander","iNatAg/nicotiana_quadrivalvis","iNatAg/nicotiana_rustica","iNatAg/nicotiana_trigonophylla","iNatAg/nigella_sativa","iNatAg/nothofagus_cunninghamii","iNatAg/nothofagus_moorei","iNatAg/nothoscordum_borbonicum","iNatAg/nuphar_advena","iNatAg/nuphar_lutea","iNatAg/nymphaea_alba","iNatAg/nypa_fruticans","iNatAg/ochroma_pyramidale","iNatAg/ocimum_americanum","iNatAg/ocimum_basilicum","iNatAg/ocimum_tenuiflorum","iNatAg/octomeles_sumatrana","iNatAg/oenanthe_javanica","iNatAg/oenothera_albicaulis","iNatAg/oenothera_biennis","iNatAg/oenothera_parviflora","iNatAg/oenothera_perennis","iNatAg/oldenlandia_corymbosa","iNatAg/olea_africana","iNatAg/olea_capensis","iNatAg/olea_europaea","iNatAg/olea_europea","iNatAg/oncosperma_tigillarium","iNatAg/onobrychis_viciifolia","iNatAg/ononis_alopecuroides","iNatAg/ononis_spinosa","iNatAg/onopordum_acanthium","iNatAg/onopordum_illyricum","iNatAg/onosmodium_discolor","iNatAg/opuntia_ficus-indica","iNatAg/opuntia_leptocaulis","iNatAg/opuntia_polyacantha","iNatAg/opuntia_polycantha","iNatAg/origanum_majorana","iNatAg/origanum_onites","iNatAg/origanum_vulgare","iNatAg/ornithogalum_nutans","iNatAg/ornithogalum_umbellatum","iNatAg/ornithopus_compressus","iNatAg/ornithopus_sativus","iNatAg/orobanche_flava","iNatAg/orobanche_ludoviciana","iNatAg/orobanche_minor","iNatAg/orobanche_ramosa","iNatAg/orontium_aquaticum","iNatAg/orthosiphon_aristatus","iNatAg/oryza_sativa","iNatAg/oryzopsis_holciformis","iNatAg/oryzopsis_miliacea","iNatAg/osmorhiza_berteroi","iNatAg/osmunda_regalis","iNatAg/ottochloa_nodosa","iNatAg/oxalis_acetosella","iNatAg/oxalis_corniculata","iNatAg/oxalis_pes-caprae","iNatAg/oxalis_pescaprae","iNatAg/oxalis_stricta","iNatAg/oxalis_tuberosa","iNatAg/oxytropis_lambertii","iNatAg/pachyrhizus_erosus","iNatAg/paederia_cruddasiana","iNatAg/paederia_foetida","iNatAg/paeonia_officinalis","iNatAg/panax_ginseng","iNatAg/panax_quinquefolius","iNatAg/pangium_edule","iNatAg/panicum_antidotale","iNatAg/panicum_capillare","iNatAg/panicum_coloratum","iNatAg/panicum_ecklonii","iNatAg/panicum_gattingeri","iNatAg/panicum_maximum","iNatAg/panicum_miliaceum","iNatAg/panicum_natalense","iNatAg/panicum_obtusum","iNatAg/panicum_pilosum","iNatAg/panicum_racemosum","iNatAg/panicum_repens","iNatAg/panicum_sphaerocarpon","iNatAg/panicum_trichocladum","iNatAg/panicum_turgidum","iNatAg/panicum_virgatum","iNatAg/papaver_argemone","iNatAg/papaver_bracteatum","iNatAg/papaver_dubium","iNatAg/papaver_rhoeas","iNatAg/papaver_somniferum","iNatAg/parietaria_floridana","iNatAg/parietaria_officinalis","iNatAg/parinari_curatellifolia","iNatAg/parkia_biglobosa","iNatAg/parkia_speciosa","iNatAg/parkinsonia_aculeata","iNatAg/parnassia_palustris","iNatAg/parsonsia_latifolia","iNatAg/parthenium_argentatum","iNatAg/parthenium_hysterophorus","iNatAg/paspalum_conjugatum","iNatAg/paspalum_dilatatum","iNatAg/paspalum_distichum","iNatAg/paspalum_nicorae","iNatAg/paspalum_notatum","iNatAg/paspalum_plicatulum","iNatAg/paspalum_scrobiculatum","iNatAg/paspalum_separatum","iNatAg/paspalum_urvillei","iNatAg/paspalum_vaginatum","iNatAg/passiflora_bicornis","iNatAg/passiflora_edulis","iNatAg/passiflora_foetida","iNatAg/passiflora_incarnata","iNatAg/passiflora_laurifolia","iNatAg/passiflora_ligularis","iNatAg/passiflora_lutea","iNatAg/passiflora_mollissima","iNatAg/passiflora_quadrangularis","iNatAg/passiflora_suberosa","iNatAg/pastinaca_sativa","iNatAg/paullinia_cupana","iNatAg/paulownia_tomentosa","iNatAg/peganum_harmala","iNatAg/pelargonium_graveolens","iNatAg/peltandra_sagittifolia","iNatAg/peltandra_virginica","iNatAg/peltophorum_africanum","iNatAg/peltophorum_pterocarpum","iNatAg/pennisetum_clandestinum","iNatAg/pennisetum_glaucum","iNatAg/pennisetum_macrourum","iNatAg/pennisetum_pedicellatum","iNatAg/pennisetum_polystachyon","iNatAg/pennisetum_purpureum","iNatAg/pennisetum_setaceum","iNatAg/pennisetum_villosum","iNatAg/perilla_frutescens","iNatAg/persea_americana","iNatAg/persicaria_maculosa","iNatAg/persoonia_falcata","iNatAg/petalostigma_pubescens","iNatAg/petasites_albus","iNatAg/petasites_hybridus","iNatAg/petroselinum_crispum","iNatAg/petunia_parviflora","iNatAg/peucedanum_ostruthium","iNatAg/phalaris_aquatica","iNatAg/phalaris_arundinacea","iNatAg/phalaris_arundinaceae","iNatAg/phalaris_brachystachys","iNatAg/phalaris_canariensis","iNatAg/phalaris_caroliniana","iNatAg/phalaris_coerulescens","iNatAg/phalaris_paradoxa","iNatAg/phaseolus_acutifolius","iNatAg/phaseolus_coccineus","iNatAg/phaseolus_lunatus","iNatAg/phaseolus_vulgaris","iNatAg/phleum_alpinum","iNatAg/phleum_pratense","iNatAg/phoenix_dactylifera","iNatAg/phoenix_reclinata","iNatAg/phoenix_sylvestris","iNatAg/phormium_tenax","iNatAg/phragmites_australis","iNatAg/phragmites_communis","iNatAg/phragmites_karka","iNatAg/phyllanthus_niruri","iNatAg/phyllanthus_tenellus","iNatAg/phyllanthus_urinaria","iNatAg/phyllocladus_aspleniifolius","iNatAg/physalis_alkekengi","iNatAg/physalis_angulata","iNatAg/physalis_heterophylla","iNatAg/physalis_lancifolia","iNatAg/physalis_peruviana","iNatAg/physalis_philadelphica","iNatAg/physalis_pubescens","iNatAg/physalis_virginiana","iNatAg/physalis_viscosa","iNatAg/phytolacca_acinosa","iNatAg/phytolacca_americana","iNatAg/phytolacca_dioica","iNatAg/picea_abies","iNatAg/picea_omorica","iNatAg/picea_omorika","iNatAg/picris_echioides","iNatAg/picris_hieracioides","iNatAg/piliostigma_reticulatum","iNatAg/piliostigma_thonningii","iNatAg/pimenta_dioica","iNatAg/pimenta_racemosa","iNatAg/pimpinella_anisum","iNatAg/pimpinella_saxifraga","iNatAg/pinguicula_vulgaris","iNatAg/pinus_ayacahuite","iNatAg/pinus_brutia","iNatAg/pinus_canariensis","iNatAg/pinus_caribaea","iNatAg/pinus_chiapensis","iNatAg/pinus_douglasiana","iNatAg/pinus_durangensis","iNatAg/pinus_greggii","iNatAg/pinus_halepensis","iNatAg/pinus_hartwegii","iNatAg/pinus_kesiya","iNatAg/pinus_merkusii","iNatAg/pinus_montezumae","iNatAg/pinus_mugo","iNatAg/pinus_occidentalis","iNatAg/pinus_oocarpa","iNatAg/pinus_palustris","iNatAg/pinus_patula","iNatAg/pinus_pinaster","iNatAg/pinus_pinea","iNatAg/pinus_ponderosa","iNatAg/pinus_pseudostrobus","iNatAg/pinus_radiata","iNatAg/pinus_roxburghii","iNatAg/pinus_sylvestris","iNatAg/pinus_tabuliformis","iNatAg/pinus_taeda","iNatAg/pinus_teocote","iNatAg/piper_aduncum","iNatAg/piper_betle","iNatAg/piper_longum","iNatAg/piper_methysticum","iNatAg/piper_nigrum","iNatAg/pistacia_atlantica","iNatAg/pistacia_lentiscus","iNatAg/pistacia_vera","iNatAg/pistia_stratiotes","iNatAg/pisum_sativum","iNatAg/pithecellobium_dulce","iNatAg/pittosporum_resiniferum","iNatAg/pittosporum_undulatum","iNatAg/plagiobothrys_canescens","iNatAg/plantago_coronopus","iNatAg/plantago_heterophylla","iNatAg/plantago_indica","iNatAg/plantago_lanceolata","iNatAg/plantago_major","iNatAg/plantago_media","iNatAg/plantago_ovata","iNatAg/plantago_psyllium","iNatAg/plantago_virginica","iNatAg/platanus_orientalis","iNatAg/poa_alpina","iNatAg/poa_annua","iNatAg/poa_bulbosa","iNatAg/poa_compressa","iNatAg/poa_cuspidata","iNatAg/poa_fendleriana","iNatAg/poa_nemoralis","iNatAg/poa_pratensis","iNatAg/poa_trivialis","iNatAg/podocarpus_elatus","iNatAg/podocarpus_falcatus","iNatAg/poeciloneuron_indicum","iNatAg/pogostemon_cablin","iNatAg/polemonium_caeruleum","iNatAg/polemonium_micranthum","iNatAg/polyalthia_fragrans","iNatAg/polycarpon_tetraphyllum","iNatAg/polygonatum_orientale","iNatAg/polygonum_achoreum","iNatAg/polygonum_arenastrum","iNatAg/polygonum_aviculare","iNatAg/polygonum_bistorta","iNatAg/polygonum_convolvulus","iNatAg/polygonum_equisetiforme","iNatAg/polygonum_erectum","iNatAg/polygonum_hydropiper","iNatAg/polygonum_hydropiperoides","iNatAg/polygonum_lapathifolium","iNatAg/polygonum_orientale","iNatAg/polygonum_pensylvanicum","iNatAg/polygonum_perfoliatum","iNatAg/polygonum_persicaria","iNatAg/polygonum_punctatum","iNatAg/polygonum_ramosissimum","iNatAg/polygonum_scandens","iNatAg/polymnia_sonchifolia","iNatAg/polypodium_vulgare","iNatAg/polypogon_interruptus","iNatAg/polypremum_procumbens","iNatAg/polyscias_fulva","iNatAg/polytrichum_commune","iNatAg/pongamia_pinnata","iNatAg/pontederia_cordata","iNatAg/pontederia_rotundifolia","iNatAg/populus_balsamifera","iNatAg/populus_ciliata","iNatAg/populus_deltoides","iNatAg/populus_euphratica","iNatAg/populus_simonii","iNatAg/portulaca_oleracea","iNatAg/portulaca_pilosa","iNatAg/portulaca_pilosa_pilosa","iNatAg/portulaca_quadrifida","iNatAg/potamogeton_diversifolius","iNatAg/potamogeton_epihydrus","iNatAg/potamogeton_filiformis","iNatAg/potamogeton_foliosus","iNatAg/potamogeton_friesii","iNatAg/potamogeton_gramineus","iNatAg/potamogeton_illinoensis","iNatAg/potamogeton_natans","iNatAg/potamogeton_nodosus","iNatAg/potamogeton_pectinatus","iNatAg/potamogeton_praelongus","iNatAg/potamogeton_pusillus","iNatAg/potamogeton_zosteriformis","iNatAg/potentilla_anserina","iNatAg/potentilla_argentea","iNatAg/potentilla_erecta","iNatAg/potentilla_fruticosa","iNatAg/potentilla_intermedia","iNatAg/potentilla_norvegica","iNatAg/potentilla_norvegicae","iNatAg/potentilla_recta","iNatAg/potentilla_reptans","iNatAg/potentilla_tridentata","iNatAg/poterium_sanguisorba","iNatAg/pouteria_campechiana","iNatAg/pouteria_lucuma","iNatAg/pouteria_sapota","iNatAg/prasophyllum_elatum","iNatAg/primula_veris","iNatAg/proserpinaca_palustris","iNatAg/proserpinaca_pectinata","iNatAg/prosopis_affinis","iNatAg/prosopis_africana","iNatAg/prosopis_alba","iNatAg/prosopis_chilensis","iNatAg/prosopis_cineraria","iNatAg/prosopis_glandulosa","iNatAg/prosopis_juliflora","iNatAg/prosopis_nigra","iNatAg/prosopis_pallida","iNatAg/prosopis_tamarugo","iNatAg/prosopis_velutina","iNatAg/prunella_vulgaris","iNatAg/prunus_africana","iNatAg/prunus_amygdalus","iNatAg/prunus_armeniaca","iNatAg/prunus_avium","iNatAg/prunus_capuli","iNatAg/prunus_cerasus","iNatAg/prunus_domestica","iNatAg/prunus_laurocerasus","iNatAg/prunus_mahaleb","iNatAg/prunus_mume","iNatAg/prunus_padus","iNatAg/prunus_pensylvanica","iNatAg/prunus_persica","iNatAg/prunus_salicina","iNatAg/prunus_spinosa","iNatAg/prunus_virginiana","iNatAg/psathyrostachys_juncea","iNatAg/psidium_cattleianum","iNatAg/psidium_friedrichsthalianum","iNatAg/psidium_guajava","iNatAg/psophocarpus_tetragonolobus","iNatAg/psoralea_repens","iNatAg/ptelea_trifoliata","iNatAg/pterocarpus_angolensis","iNatAg/pterocarpus_dalbergioides","iNatAg/pterocarpus_erinaceus","iNatAg/pterocarpus_indicus","iNatAg/pterocarpus_lucens","iNatAg/pterocarpus_macrocarpus","iNatAg/pterocarpus_marsupium","iNatAg/pterocarpus_santalinoides","iNatAg/pterocarpus_santalinus","iNatAg/pueraria_lobata","iNatAg/pueraria_phaseoloides","iNatAg/pulmonaria_officinalis","iNatAg/punica_granatum","iNatAg/pycnanthus_angolensis","iNatAg/pyrola_rotundifolia","iNatAg/pyrus_communis","iNatAg/pyrus_pyrifolia","iNatAg/quercus_agrifolia","iNatAg/quercus_alba","iNatAg/quercus_bicolor","iNatAg/quercus_chrysolepis","iNatAg/quercus_dumosa","iNatAg/quercus_fusiformis","iNatAg/quercus_ilex","iNatAg/quercus_incana","iNatAg/quercus_lanata","iNatAg/quercus_nigra","iNatAg/quercus_phellos","iNatAg/quercus_robur","iNatAg/quercus_semecarpifolia","iNatAg/quercus_suber","iNatAg/quercus_virginiana","iNatAg/quisqualis_indica","iNatAg/ranunculus_abortivus","iNatAg/ranunculus_acris","iNatAg/ranunculus_arbortivus","iNatAg/ranunculus_arvensis","iNatAg/ranunculus_bulbosus","iNatAg/ranunculus_californicus","iNatAg/ranunculus_cymbalaria","iNatAg/ranunculus_ficaria","iNatAg/ranunculus_flabellaris","iNatAg/ranunculus_muricatulus","iNatAg/ranunculus_muricatus","iNatAg/ranunculus_occidentalis","iNatAg/ranunculus_orthorhynchus","iNatAg/ranunculus_parviflorus","iNatAg/ranunculus_sceleratus","iNatAg/ranunculus_testiculatus","iNatAg/ranunculus_trichophyllus","iNatAg/raphanus_raphanistrum","iNatAg/raphanus_sativus","iNatAg/rauvolfia_caffra","iNatAg/rauvolfia_serpentina","iNatAg/reseda_alba","iNatAg/reseda_lutea","iNatAg/retama_monosperma","iNatAg/rhamnus_cathartica","iNatAg/rhamnus_prinoides","iNatAg/rheum_palmatum","iNatAg/rheum_rhaponticum","iNatAg/rhigozum_trichotomum","iNatAg/rhinanthus_crista-galli","iNatAg/rhinanthus_minor","iNatAg/rhizophora_mangle","iNatAg/rhizophora_mucronata","iNatAg/rhizophora_stylosa","iNatAg/rhodiola_rosea","iNatAg/rhododendron_ferrugineum","iNatAg/rhus_copallinum","iNatAg/rhus_glabra","iNatAg/rhus_typhina","iNatAg/rhynchosia_minima","iNatAg/rhynchosia_senna","iNatAg/rhynchosia_sublobata","iNatAg/ribes_hirtellum","iNatAg/ribes_nigrum","iNatAg/ribes_rubrum","iNatAg/ribes_uva-crispa","iNatAg/ribes_viscosissimum","iNatAg/richardia_brasiliensis","iNatAg/richardia_scabra","iNatAg/ricinus_communis","iNatAg/ricinus_comunis","iNatAg/rivina_humilis","iNatAg/robinia_pseudoacacia","iNatAg/roemeria_refracta","iNatAg/rosa_canina","iNatAg/rosa_cinnamomea","iNatAg/rosa_eglanteria","iNatAg/rosa_pendulina","iNatAg/rosa_pimpinellifolia","iNatAg/rosa_rubiginosa","iNatAg/rosa_spinosissima","iNatAg/roseodendron_donnell-smithii","iNatAg/rosmarinus_officinalis","iNatAg/rubia_tinctorum","iNatAg/rubus_ellipticus","iNatAg/rubus_fructicosus","iNatAg/rubus_fruticosus","iNatAg/rubus_hispidus","iNatAg/rubus_idaeus","iNatAg/rubus_moluccanus","iNatAg/rubus_occidentalis","iNatAg/rubus_pensilvanicus","iNatAg/rudbeckia_amplexicaulis","iNatAg/rudbeckia_hirta","iNatAg/rudbeckia_laciniata","iNatAg/rudbeckia_triloba","iNatAg/rumex_acetosa","iNatAg/rumex_acetosella","iNatAg/rumex_aquaticus","iNatAg/rumex_crispus","iNatAg/rumex_dentatus","iNatAg/rumex_hymenosepalus","iNatAg/rumex_longifolius","iNatAg/rumex_maritimus","iNatAg/rumex_obtusifolius","iNatAg/rumex_patienta","iNatAg/rumex_patientia","iNatAg/rumex_pseudonatronatus","iNatAg/rumex_pulcher","iNatAg/rumex_verticillatus","iNatAg/ruppia_maritima","iNatAg/ruscus_aculeatus","iNatAg/ruta_graveolens","iNatAg/saccharum_officinarum","iNatAg/saccharum_sinense","iNatAg/saccharum_spontaneum","iNatAg/sacorstemma_cynanchoides","iNatAg/sagina_procumbens","iNatAg/sagittaria_kurziana","iNatAg/sagittaria_lancifolia","iNatAg/sagittaria_latifolia","iNatAg/sagittaria_sagittifolia","iNatAg/salacca_wallichiana","iNatAg/salacca_zalacca","iNatAg/salicornia_bigelovii","iNatAg/salix_alba","iNatAg/salix_caprea","iNatAg/salix_laevigata","iNatAg/salix_pentandra","iNatAg/salix_viminalis","iNatAg/salsola_kali","iNatAg/salsola_tragus","iNatAg/salsola_vermiculata","iNatAg/salvadora_persica","iNatAg/salvia_lyrata","iNatAg/salvia_officinalis","iNatAg/salvia_sclarea","iNatAg/salvia_verticillata","iNatAg/salvinia_auriculata","iNatAg/samanea_saman","iNatAg/sambucus_canadensis","iNatAg/sambucus_canadiensis","iNatAg/sambucus_cerulea","iNatAg/sambucus_ebulus","iNatAg/sambucus_nigra","iNatAg/sambucus_racemosa","iNatAg/samolus_parviflorus","iNatAg/samolus_valerandi","iNatAg/sanguisorba_minor","iNatAg/sanguisorba_officinalis","iNatAg/sanicula_europaea","iNatAg/santalum_acuminatum","iNatAg/santalum_album","iNatAg/santolina_chamaecyparissus","iNatAg/sapindus_emarginatus","iNatAg/sapindus_saponaria","iNatAg/sapium_sebiferum","iNatAg/saponaria_officinalis","iNatAg/sarcostemma_cynanchoides","iNatAg/satureja_hortensis","iNatAg/satureja_montana","iNatAg/sauropus_androgynus","iNatAg/saururus_cernuus","iNatAg/scandix_pecten-veneris","iNatAg/schima_wallichii","iNatAg/schinus_molle","iNatAg/schinus_terebinthifolia","iNatAg/schinus_terebinthifolius","iNatAg/schismus_arabicus","iNatAg/schizolobium_parahyba","iNatAg/schizomeria_ovata","iNatAg/schleichera_oleosa","iNatAg/scirpus_lacustris","iNatAg/scleranthus_annuus","iNatAg/sclerocarya_caffra","iNatAg/scoparia_dulcis","iNatAg/scorzonera_laciniata","iNatAg/scrophularia_lanceolata","iNatAg/searsia_angustifolia","iNatAg/secale_cereale","iNatAg/secale_montanum","iNatAg/sechium_edule","iNatAg/securidaca_longepedunculata","iNatAg/securidaca_longipedunculata","iNatAg/sedum_acre","iNatAg/sedum_telephium","iNatAg/sehima_nervosum","iNatAg/sempervivum_arachnoideum","iNatAg/sempervivum_tectorum","iNatAg/senecio_elegans","iNatAg/senecio_jacobaea","iNatAg/senecio_madagascariensis","iNatAg/senecio_plattensis","iNatAg/senecio_squalidus","iNatAg/senecio_sylvaticus","iNatAg/senecio_viscosus","iNatAg/senecio_vulgaris","iNatAg/senna_spectabilis","iNatAg/serenoa_repens","iNatAg/sesamum_indicum","iNatAg/sesbania_bispinosa","iNatAg/sesbania_cannabina","iNatAg/sesbania_exaltata","iNatAg/sesbania_formosa","iNatAg/sesbania_grandiflora","iNatAg/sesbania_pachycarpa","iNatAg/sesbania_sesban","iNatAg/setaria_incrassata","iNatAg/setaria_italica","iNatAg/setaria_lindenbergiana","iNatAg/setaria_pumila","iNatAg/seymeria_pectinata","iNatAg/shorea_robusta","iNatAg/shorea_talura","iNatAg/sicyos_angulatus","iNatAg/sida_angustifolia","iNatAg/sida_cordifolia","iNatAg/sida_spinosa","iNatAg/silene_antirrhina","iNatAg/silene_armeria","iNatAg/silene_conica","iNatAg/silene_conoidea","iNatAg/silene_gallica","iNatAg/silene_noctiflora","iNatAg/silene_pendula","iNatAg/silphium_asperrimum","iNatAg/silphium_integrifolium","iNatAg/silphium_laciniatum","iNatAg/silybum_marianum","iNatAg/simarouba_glauca","iNatAg/simmondsia_chinensis","iNatAg/simsia_auriculata","iNatAg/sinapis_alba","iNatAg/sinapis_arvensis","iNatAg/sinapis_incana","iNatAg/siphonochilus_aethiopicus","iNatAg/sisymbrium_altissimum","iNatAg/sisymbrium_erysimoides","iNatAg/sisymbrium_irio","iNatAg/sisymbrium_officinale","iNatAg/sisymbrium_orientale","iNatAg/sisymbrium_sophia","iNatAg/sisyrinchium_montanum","iNatAg/sloanea_woollsii","iNatAg/smilax_aspera","iNatAg/smilax_bona-nox","iNatAg/smilax_laurifolia","iNatAg/smilax_rotundifolia","iNatAg/solanum_aethiopicum","iNatAg/solanum_americanum","iNatAg/solanum_capsicoides","iNatAg/solanum_carolinense","iNatAg/solanum_coriaceum","iNatAg/solanum_dimidiatum","iNatAg/solanum_diphyllum","iNatAg/solanum_dulcamara","iNatAg/solanum_elaeagnifolium","iNatAg/solanum_eleagnifolium","iNatAg/solanum_ellipticum","iNatAg/solanum_ferox","iNatAg/solanum_heterodoxum","iNatAg/solanum_incanum","iNatAg/solanum_jamaicense","iNatAg/solanum_lanceolatum","iNatAg/solanum_macrocarpon","iNatAg/solanum_mammosum","iNatAg/solanum_marginatum","iNatAg/solanum_mauritianum","iNatAg/solanum_melongena","iNatAg/solanum_muricatum","iNatAg/solanum_nigrum","iNatAg/solanum_physalifolium","iNatAg/solanum_pseudo-capsicum","iNatAg/solanum_pseudocapsicum","iNatAg/solanum_quitoense","iNatAg/solanum_sisymbrifolium","iNatAg/solanum_sisymbriifolium","iNatAg/solanum_tampicense","iNatAg/solanum_torvum","iNatAg/solanum_tuberosum","iNatAg/solanum_violaceum","iNatAg/soldanella_alpina","iNatAg/solidago_californica","iNatAg/solidago_canadensis","iNatAg/solidago_fistulosa","iNatAg/solidago_missouriensis","iNatAg/solidago_nemoralis","iNatAg/solidago_rigida","iNatAg/solidago_sempervirens","iNatAg/solidago_virgaurea","iNatAg/sonchus_arvensis","iNatAg/sonchus_oleraceus","iNatAg/sonchus_palustris","iNatAg/sonneratia_apetala","iNatAg/sonneratia_caseolaris","iNatAg/sorbus_aucuparia","iNatAg/sorbus_domestica","iNatAg/sorghum_bicolor","iNatAg/sorghum_drummondii","iNatAg/sorghum_halepense","iNatAg/soymida_febrifuga","iNatAg/sparganium_americanum","iNatAg/sparganium_erectum","iNatAg/spartina_pectinata","iNatAg/spartium_junceum","iNatAg/spathodea_campanulata","iNatAg/spergula_arvensis","iNatAg/spermacoce_verticillata","iNatAg/spinacia_oleracea","iNatAg/spinifex_hirsutus","iNatAg/spirea_tomentosa","iNatAg/spodiopogon_sibiricus","iNatAg/spondias_cythera","iNatAg/spondias_mombin","iNatAg/spondias_purpurea","iNatAg/sporobolus_airoides","iNatAg/sporobolus_fimbriatus","iNatAg/sporobolus_maritimus","iNatAg/sporobolus_neglectus","iNatAg/sporobolus_spicatus","iNatAg/sporobolus_virginicus","iNatAg/stachys_affinis","iNatAg/stachys_palustris","iNatAg/stachytarpheta_incana","iNatAg/stachytarpheta_indica","iNatAg/stellaria_graminea","iNatAg/stellaria_holostea","iNatAg/stellaria_media","iNatAg/stenotaphrum_secundatum","iNatAg/sterculia_foetida","iNatAg/sterculia_urens","iNatAg/sterculia_villosa","iNatAg/stereospermum_kunthianum","iNatAg/stevia_rebaudiana","iNatAg/stipa_baicalensis","iNatAg/stipa_brachychaeta","iNatAg/stipa_capillata","iNatAg/stipa_glareosa","iNatAg/stipa_grandis","iNatAg/stipa_krylovii","iNatAg/stipa_lagascae","iNatAg/stipa_occidentalis","iNatAg/stipa_parviflora","iNatAg/stipa_tenacissima","iNatAg/stipa_trichotoma","iNatAg/stipagrostis_amabilis","iNatAg/stipagrostis_zeyheri","iNatAg/stratiotes_aloides","iNatAg/strychnos_cocculoides","iNatAg/strychnos_innocua","iNatAg/strychnos_spinosa","iNatAg/stylidium_desertorum","iNatAg/stylosanthes_capitata","iNatAg/stylosanthes_fruticosa","iNatAg/stylosanthes_hamata","iNatAg/stylosanthes_humilis","iNatAg/stylosanthes_scabra","iNatAg/stylosanthes_viscosa","iNatAg/succisa_pratensis","iNatAg/swertia_baicalensis","iNatAg/swietenia_macrophylla","iNatAg/swietenia_mahogani","iNatAg/symphoricarpos_mollis","iNatAg/symphoricarpos_occidentalis","iNatAg/symphoricarpos_orbiculatus","iNatAg/symphoricarpos_rotundifolius","iNatAg/symphytum_officinale","iNatAg/syncarpia_glomulifera","iNatAg/syncarpia_hillii","iNatAg/syzygium_cordatum","iNatAg/syzygium_cumini","iNatAg/syzygium_guineense","iNatAg/syzygium_malaccense","iNatAg/syzygium_taiwanicum","iNatAg/tabebuia_rosea","iNatAg/tabebuia_serratifolia","iNatAg/tagetes_minuta","iNatAg/talinum_triangulare","iNatAg/tamarindus_indica","iNatAg/tamarix_aphylla","iNatAg/tamarix_chinensis","iNatAg/tamarix_gallica","iNatAg/tamarix_parviflora","iNatAg/tanacetum_balsamita","iNatAg/tanacetum_vulgare","iNatAg/taraxacum_officinale","iNatAg/taraxia_breviflora","iNatAg/tarchonanthus_camphoratus","iNatAg/taxodium_distichum","iNatAg/taxus_baccata","iNatAg/tecoma_stans","iNatAg/tectona_grandis","iNatAg/tephrosia_candida","iNatAg/tephrosia_lupinifolia","iNatAg/tephrosia_obovata","iNatAg/tephrosia_purpurea","iNatAg/tephrosia_vogelii","iNatAg/teramnus_labialis","iNatAg/terminalia_arjuna","iNatAg/terminalia_bellirica","iNatAg/terminalia_brownii","iNatAg/terminalia_calamansanai","iNatAg/terminalia_catappa","iNatAg/terminalia_chebula","iNatAg/terminalia_ivorensis","iNatAg/terminalia_mantaly","iNatAg/terminalia_myriocarpa","iNatAg/terminalia_paniculata","iNatAg/terminalia_prunioides","iNatAg/terminalia_sericocarpa","iNatAg/terminalia_tomentosa","iNatAg/tetradymia_canescens","iNatAg/tetragonia_tetragonioides","iNatAg/teucrium_botrys","iNatAg/teucrium_canadense","iNatAg/teucrium_chamaedrys","iNatAg/teucrium_polium","iNatAg/thalia_geniculata","iNatAg/thalictrum_pubescens","iNatAg/thaumatococcus_daniellii","iNatAg/themeda_australis","iNatAg/themeda_quadrivalvis","iNatAg/themeda_triandra","iNatAg/theobroma_bicolor","iNatAg/theobroma_cacao","iNatAg/theobroma_grandiflorum","iNatAg/thermopsis_montana","iNatAg/thermopsis_rhombifolia","iNatAg/thespesia_populnea","iNatAg/thlaspi_arvense","iNatAg/thlaspi_perfoliatum","iNatAg/thuja_occidentalis","iNatAg/thymus_serphyllum","iNatAg/thymus_serpyllum","iNatAg/thymus_vulgaris","iNatAg/thyrsostachys_siamensis","iNatAg/thysanolaena_latifolia","iNatAg/tilia_cordata","iNatAg/tilia_platyphyllos","iNatAg/tipuana_tipu","iNatAg/tithonia_diversifolia","iNatAg/toona_ciliata","iNatAg/torenia_glabra","iNatAg/toxicodendron_pubescens","iNatAg/trachypogon_spicatus","iNatAg/tradescantia_bracteata","iNatAg/tradescantia_fluminensis","iNatAg/tradescantia_ohiensis","iNatAg/tradescantia_virginiana","iNatAg/tragia_betonicifolia","iNatAg/tragopogon_lamottei","iNatAg/tragopogon_porrifolius","iNatAg/tragopogon_pratensis","iNatAg/tragus_koelerioides","iNatAg/trapa_natans","iNatAg/trema_orientale","iNatAg/trianthema_portulacastrum","iNatAg/tribulus_cistoides","iNatAg/tribulus_terrestris","iNatAg/trichanthera_gigantea","iNatAg/trichoneura_grandiglumis","iNatAg/trichosanthes_cucumerina","iNatAg/trichostema_lanceolatum","iNatAg/tridax_procumbens","iNatAg/trifolium_africanum","iNatAg/trifolium_alexandrinum","iNatAg/trifolium_ambiguum","iNatAg/trifolium_angustifolium","iNatAg/trifolium_arvense","iNatAg/trifolium_burchellianum","iNatAg/trifolium_campestre","iNatAg/trifolium_carolinianum","iNatAg/trifolium_cherleri","iNatAg/trifolium_dubium","iNatAg/trifolium_fragiferum","iNatAg/trifolium_glanduliferum","iNatAg/trifolium_glomeratum","iNatAg/trifolium_hirtum","iNatAg/trifolium_hybridum","iNatAg/trifolium_incarnatum","iNatAg/trifolium_medium","iNatAg/trifolium_michelianum","iNatAg/trifolium_nigrescens","iNatAg/trifolium_patens","iNatAg/trifolium_pilulare","iNatAg/trifolium_polymorphum","iNatAg/trifolium_pratense","iNatAg/trifolium_reflexum","iNatAg/trifolium_repens","iNatAg/trifolium_resupinatum","iNatAg/trifolium_subterraneum","iNatAg/trifolium_tomentosum","iNatAg/trifolium_variegatum","iNatAg/trifolium_vesiculosum","iNatAg/trifolium_wormskioldii","iNatAg/triglochin_maritima","iNatAg/triglochin_maritimum","iNatAg/triglochin_palustre","iNatAg/trigonella_foenum-graecum","iNatAg/tripsacum_dactyloides","iNatAg/trisetum_flavescens","iNatAg/tristachya_leucothrix","iNatAg/triticum_aestivum","iNatAg/triticum_dicoccoides","iNatAg/triticum_durum","iNatAg/triticum_spelta","iNatAg/triumfetta_rhomboidea","iNatAg/triumfetta_semitriloba","iNatAg/trollius_europaeus","iNatAg/tropaeolum_majus","iNatAg/tropaeolum_tuberosum","iNatAg/tropidocarpum_gracile","iNatAg/turritis_glabra","iNatAg/tussilago_farfara","iNatAg/tylosema_esculentum","iNatAg/typha_angustifolia","iNatAg/typha_domingensis","iNatAg/typha_latifolia","iNatAg/uapaca_kirkiana","iNatAg/ulex_europaeus","iNatAg/ullucus_tuberosus","iNatAg/ulmus_procera","iNatAg/umbilicus_rupestris","iNatAg/uncaria_gambir","iNatAg/urelytrum_agropyroides","iNatAg/urena_lobata","iNatAg/urochloa_mosambicensis","iNatAg/urochloa_panicoides","iNatAg/urtica_chamaedryoides","iNatAg/urtica_dioica","iNatAg/urtica_urens","iNatAg/utricularia_floridana","iNatAg/utricularia_foliosa","iNatAg/utricularia_gibba","iNatAg/utricularia_purpurea","iNatAg/utricularia_radiata","iNatAg/utricularia_vulgaris","iNatAg/uvaria_littoralis","iNatAg/uvularia_sessilifolia","iNatAg/vaccinium_angustifolium","iNatAg/vaccinium_corymbosum","iNatAg/vaccinium_macrocarpon","iNatAg/vaccinium_myrtillus","iNatAg/vaccinium_uliginosum","iNatAg/vaccinium_vitis-idaea","iNatAg/valeriana_officinalis","iNatAg/valerianella_eriocarpa","iNatAg/vallisneria_americana","iNatAg/vangueria_infausta","iNatAg/vangueria_madagascariensis","iNatAg/vanilla_planifolia","iNatAg/vateria_indica","iNatAg/ventilago_viminalis","iNatAg/veratrum_album","iNatAg/veratrum_californicum","iNatAg/verbascum_blattaria","iNatAg/verbascum_lychnitis","iNatAg/verbascum_phlomoides","iNatAg/verbascum_thapsus","iNatAg/verbascum_thaspus","iNatAg/verbena_bonariensis","iNatAg/verbena_brasiliensis","iNatAg/verbena_hastata","iNatAg/verbena_officinalis","iNatAg/verbena_urticifolia","iNatAg/vernonia_altissima","iNatAg/vernonia_amygdalina","iNatAg/vernonia_baldwinii","iNatAg/vernonia_chamaedrys","iNatAg/vernonia_fasciculata","iNatAg/veronica_agrestis","iNatAg/veronica_anagallis-aquatica","iNatAg/veronica_arvensis","iNatAg/veronica_biloba","iNatAg/veronica_chamaedrys","iNatAg/veronica_filiformis","iNatAg/veronica_hederaefolia","iNatAg/veronica_hederifolia","iNatAg/veronica_longifolia","iNatAg/veronica_officinalis","iNatAg/veronica_peregrina","iNatAg/veronica_polita","iNatAg/veronica_serpyllifolia","iNatAg/vetiveria_zizanioides","iNatAg/viburnum_cassinoides","iNatAg/viburnum_lentago","iNatAg/viburnum_prunifolium","iNatAg/viccia_cracca","iNatAg/vicia_augustifolia","iNatAg/vicia_benghalensis","iNatAg/vicia_cracca","iNatAg/vicia_ervilia","iNatAg/vicia_faba","iNatAg/vicia_monantha","iNatAg/vicia_narbonensis","iNatAg/vicia_pannonica","iNatAg/vicia_sativa","iNatAg/vicia_sepium","iNatAg/vigna_adenantha","iNatAg/vigna_angularis","iNatAg/vigna_hosei","iNatAg/vigna_lanceolata","iNatAg/vigna_longifolia","iNatAg/vigna_luteola","iNatAg/vigna_parkeri","iNatAg/vigna_radiata","iNatAg/vigna_trilobata","iNatAg/vigna_umbellata","iNatAg/vigna_unguiculata","iNatAg/vigna_vexillata","iNatAg/vinca_major","iNatAg/vinca_minor","iNatAg/viola_lanceolata","iNatAg/viola_odorata","iNatAg/viola_tricolor","iNatAg/viscum_album","iNatAg/vitellaria_paradoxa","iNatAg/vitex_agnus-castus","iNatAg/vitex_doniana","iNatAg/vitex_negundo","iNatAg/vitis_labrusca","iNatAg/vitis_rotundifolia","iNatAg/vitis_vinifera","iNatAg/vitis_vulpina","iNatAg/waltheria_indica","iNatAg/warburgia_salutaris","iNatAg/warburgia_ugandensis","iNatAg/withania_somnifera","iNatAg/wrightia_tomentosa","iNatAg/xanthium_spinosum","iNatAg/xanthium_strumarium","iNatAg/xanthosoma_sagittifolium","iNatAg/ximenia_americana","iNatAg/xylia_xylocarpa","iNatAg/xylocarpus_granatum","iNatAg/xylocarpus_mekongensis","iNatAg/xylocarpus_moluccensis","iNatAg/xylorhiza_glabriuscula","iNatAg/yucca_elephantipes","iNatAg/zannichellia_palustris","iNatAg/zanthoxylum_americanum","iNatAg/zea_mays","iNatAg/zingiber_officinale","iNatAg/zizania_aquatica","iNatAg/zizania_latifolia","iNatAg/ziziphus_abyssinica","iNatAg/ziziphus_mauritiana","iNatAg/ziziphus_mucronata","iNatAg/zornia_diphylla","iNatAg/zornia_glochidiata","iNatAg/zornia_latifolia","iNatAg/zostera_marina","iNatAg/zoysia_matrella","iNatAg/zygophyllum_fabago","java_plum_leaf_disease_classification","jujube_bruise_classification","jute_disease_classification","leaf_counting_denmark","lemon_leaf_disease_classification","lemongrass_disease_classification","lentil_disease_classification","LSID_bean_segmentation","maize_disease_classification","maize_tomato_weed_classification","maize_weed_detection","malabar_spinach_disease_classification","mandarin_leaf_variety_classification","mangifera2012_variety_classification","mango_detection_australia","mango_growth_detection","mango_leaf_disease_classification","MangoClassify-12_variety_classification","MangoImageBD_classification","MangoLeafBD_disease_classification","Medjool_date_ripeness_detection","MedLeafX_disease_classification","merlot_mildew_segmentation","MH_SoyaHealthVision_disease_classification_leaf","MH_SoyaHealthVision_disease_classification_uav","MH_Weed16_weed_detection","MH_Weed16_weed_variety_classification","mint_leaf_classification","money_plant_disease_classification","MoringaLeafNet_disease_classification","mulberry_leaf_variety_classification","oil_palm_fruit_ripeness_classification","okra_maturity_classification","okra_thermal_maturity_classification","OkraDiseaseNet_disease_classification","olive_tree_crown_detection","onionfoliageset_detection","orange_leaf_disease_classification","oyster_mushroom_maturity_detection","paddy_disease_classification","PaddyVarietyBD_variety_classification","papaya_leaf_disease_classification","papaya_leaf_disease_classification_bangladesh","papaya_leaf_disease_detection","peachpear_flower_segmentation","PFSD_Musa_banana_disease_classification","PFSD_Musa_banana_variety_classification","plant_doc_classification","plant_doc_detection","plant_leaf_disease_classification","plant_seedlings_aarhus","plant_village_classification","plum_leaf_fruit_disease_classification","pomegranate_disease_classification","pomegranate_disease_classification_india","pomegranate_growth_detection","pomegranate_quality_classification","pomegranate_thermal_defect_classification","potato_leaf_blight_classification","potato_leaf_disease_classification","PriBel_betel_leaf_disease_classification","QuinceSet_detection","radish_leaf_disease_classification","rangeland_weeds_australia","red_grapes_and_leaves_segmentation","REMP_plant_classification","rice_disease_classification_bangladesh","rice_field_weed_classification","rice_grain_variety_classification","rice_leaf_disease_classification","rice_leaf_disease_classification_india","rice_panicle_detection","rice_seedling_classification","rice_seedling_segmentation","rice_variety_classification_bangladesh","riseholme_strawberry_classification_2021","RoCoLe_disease_detection","RoseLeafInsight_disease_classification","RoseNet_leaf_disease_classification","SapBark_64_variety_classification","sapota_fruit_size_classification","seasveg_classification_bd","SIMPDV1_plant_classification","sorghum_weed_classification","sorghum_weed_segmentation","soybean_damage_classification","soybean_harvest_damage_segmentation","soybean_insect_classification","soybean_leaf_disease_classification","soybean_leaf_disease_classification_brazil","soybean_variety_classification","soybean_weed_uav_brazil","SoyNet_leaf_health_classification","strawberry_detection_2022","strawberry_detection_2023","strawberry_growth_detection","Strawberry-DS_strawberry_detection","sugarbeet_weed_segmentation","sugarcane_damage_usa","sugarcane_leaf_disease_classification","sunflower_detection","sunflower_disease_classification","susnato_plant_disease_detection_processed","synthetic_cowpea_flower_detection","synthetic_cowpea_pod_detection","taro_blight_stage_classification","tea_leaf_disease_classification","tea_leaf_disease_classification_bangladesh","TealeafAgeQuality_detection","teaLeafBD_disease_classification_classification","three_plant_leaf_disease_classification","three_season_weed_detection","TOM2024_disease_classification","tomato_factory_detection","tomato_leaf_disease","tomato_maturity_classification","tomato_quality_classification","tomato_ripeness_detection","tropical_flower_variety_classification","turmeric_disease_classification","turmeric_leaf_disease_classification","vegann_multicrop_presence_segmentation","vegetable_classification_bangladesh_classification","vegetable_crop_early_detection","VegNet_cauliflower_disease_classification","VegNet_quality_classification","vine_virus_photo_dataset","vineyard_grape_segmentation","vineyard_pruning_segmentation","WaterHyacinth_variety_classification","watermelon_disease_classification","weed_crop_detection","wGrapeUNIPD-DL_white_grape_bunch_detection","wheat_head_counting","white_grapes_and_leaves_segmentation"]} \ No newline at end of file +{"model":"Xenova/all-MiniLM-L6-v2","dtype":"q8","dim":384,"count":6192,"generatedAt":"2026-08-13T23:08:51.437Z","contentHash":"2a72005a9a7bb81cc96ff3e2d5fd2c9ef83a7f65f31f728294397d447c9b6717","names":["ACHENY_variety_classification","african_plum_grading_classification","AFruitDB_fruit_grade_classification","agarwood_leaf_disease_classification","Agri-LLaVA","AgriVision4_disease_classification","AgroBench","AgroCoT","AgroMind","almond_bloom_2023","almond_harvest_2021","apple_detection_drone_brazil","apple_detection_spain","apple_detection_usa","apple_flower_segmentation","apple_leaf_disease_classification","apple_segmentation_minnesota","arabica_coffee_leaf_disease_classification","ash_gourd_disease_classification","autonomous_greenhouse_regression","bacterial_grain_rot_classification","banana_bunch_detection","banana_bunch_maturity_classification_classification","banana_grade_variety_classification","banana_guava_quality_classification","banana_leaf_disease_classification","banana_leaf_nutrient_classification","banana_variety_classification","BananaImageBD_ripeness_classification","BananaImageBD_variety_classification","BananaLSD_leaf_disease_classification","Basmati_rice_seed_varitey_classification","bay_leaf_disease_classification","BDHerbalPlants_variety_classification","BDMANGO_variety_classification","BDMediLeaves_variety_classification","bean_cowpea_leaf_disease_classification","bean_disease_classification_tanzania","bean_disease_uganda","bean_synthetic_earlygrowth_aerial","betel_leaf_disease_classification","betel_leaf_disease_classification_2","black_gram_disease_classification","blackgram_plant_leaf_disease_classification","BPLD_leaf_disease_classification","BrinjalFruitX_disease_classification","bruised_vegetable_classification","cabbage_instance_segmentation","carambola_disease_classification","carrot_weeds_germany","cashew_detection","cauliflower_leaf_disease_classification","CDDM","centella_asiatica_leaves","chitrak_leaf_disease_classification","citrus_fruit_leaf_disease_classification","citrus_fruit_variety_classification","citrusuat_disease_classification","CocoaMFDB_detection","coconut_tree_disease_classification","coffee_bean_quality_classification","coffee_detection","CoFly-Weed-DB_weed_segmentation","COLD_chili_leaf_disease_classification","COLD_onion_leaf_disease_classification","CoLeaf_nutritional_deficiency_classification","corn_leaf_pest_classification","corn_maize_leaf_disease","cotton_leaf_disease_classification","cotton_leaf_disease_classification_bangladesh_2","cotton_weed_detection","crop_pest_disease_classification","crop_weed_detection_latvia","crop_weeds_greece","CS-D_tea_leaf_disease_classification","cucumber_disease_classification","custard_apple_disease_classification","date_cluster_detection","date_fruit_maturity_detection","date_grade_variety_classification","date_palm_leaf_disease_classification","date_palm_leaf_disease_classification_iraq","DIMPSAR_medicinal_leaf_classification","DIMPSAR_medicinal_plant_classification","dragonfruit_disease_classification","dragonfruit_maturity_classification","dragonfruit_quality_classification","durian_disease_classification","durian_disease_classification_vietnam","EfficientMaize_classification","eggplant_disease_classification","eggplant_leaf_disease_classification","embrapa_wgisd_grape_detection","ERWIAM_blight_detection","fig_leaf_ficus_worm_classification","fortunella_margarita_growth_detection","fresh_rotten_fruit_classification","fruit_detection_worldwide","fruit_leaf_variety_classification","FruitNet_quality_classification","fruitseg30_segmentation","FruitVision_quality_classification","GEMINI_cowpea_flower_detection","GEMINI_cowpea_pod_detection","gemini_flower_detection","gemini_leaf_detection","gemini_plant_detection","gemini_pod_detection","ghai_broccoli_detection","ghai_green_cabbage_detection","ghai_iceberg_lettuce_detection","ghai_romaine_detection","ghai_strawberry_fruit_detection","grape_detection_californiaday","grape_detection_californianight","grape_detection_syntheticday","grape_leaf_disease_classification","grape_variety_classification","grapevine_development_stage_classification","grapevine_disease_classification","grapevine_esca_classification","grapevine_growth_detection","greenhouse_crop_weed_classification","greenhouse_crop_weed_detection","groundnut_leaf_disease_classification","groundnut_leaf_disease_classification_2","growliflower_cauliflower_segmentation","guava_disease_classification","guava_disease_classification_bangladesh","guava_disease_pakistan","guava_maturity_classification","GYMNSA_pear_rust_detection","Hibiscus_Tea_disease_classification","hog_plum_leaf_disease_classification","ICPTC_pistachio_tree_variety_classification","IDDMSLD_spinach_leaf_disease_classification","ImageWeeds_aerial_weed_detection","ImageWeeds_weed_detection","iNatAg","iNatAg-mini","iNatAg-mini/abelmoschus_esculentus","iNatAg-mini/abelmoschus_manihot","iNatAg-mini/abelmoschus_moschatus","iNatAg-mini/abies_alba","iNatAg-mini/abies_amabilis","iNatAg-mini/abies_balsamea","iNatAg-mini/abies_concolor","iNatAg-mini/abies_pindrow","iNatAg-mini/abroma_augustum","iNatAg-mini/abrus_pecatorius","iNatAg-mini/abrus_precatorius","iNatAg-mini/abutilon_theophrasti","iNatAg-mini/acacia_abyssinica","iNatAg-mini/acacia_acradenia","iNatAg-mini/acacia_acuminata","iNatAg-mini/acacia_ampliceps","iNatAg-mini/acacia_anceps","iNatAg-mini/acacia_ancistrocarpa","iNatAg-mini/acacia_aneura","iNatAg-mini/acacia_angustissima","iNatAg-mini/acacia_ataxacantha","iNatAg-mini/acacia_aulacocarpa","iNatAg-mini/acacia_auriculiformis","iNatAg-mini/acacia_bidwillii","iNatAg-mini/acacia_brachystachya","iNatAg-mini/acacia_brevispica","iNatAg-mini/acacia_burkei","iNatAg-mini/acacia_caffra","iNatAg-mini/acacia_cambagei","iNatAg-mini/acacia_catechu","iNatAg-mini/acacia_catenulata","iNatAg-mini/acacia_caven","iNatAg-mini/acacia_cincinnata","iNatAg-mini/acacia_coriacea","iNatAg-mini/acacia_cowleana","iNatAg-mini/acacia_crassicarpa","iNatAg-mini/acacia_cyclops","iNatAg-mini/acacia_cyperophylla","iNatAg-mini/acacia_dealbata","iNatAg-mini/acacia_deanei","iNatAg-mini/acacia_decurrens","iNatAg-mini/acacia_difficilis","iNatAg-mini/acacia_doratoxylon","iNatAg-mini/acacia_ehrenbergiana","iNatAg-mini/acacia_erioloba","iNatAg-mini/acacia_estrophiolata","iNatAg-mini/acacia_excelsa","iNatAg-mini/acacia_falciformis","iNatAg-mini/acacia_farnesiana","iNatAg-mini/acacia_fasciculifera","iNatAg-mini/acacia_flavescens","iNatAg-mini/acacia_georginae","iNatAg-mini/acacia_gerrardii","iNatAg-mini/acacia_glaucocarpa","iNatAg-mini/acacia_gourmaensis","iNatAg-mini/acacia_harpophylla","iNatAg-mini/acacia_holosericea","iNatAg-mini/acacia_irrorata","iNatAg-mini/acacia_ixiophylla","iNatAg-mini/acacia_karroo","iNatAg-mini/acacia_koa","iNatAg-mini/acacia_leptocarpa","iNatAg-mini/acacia_leucophloea","iNatAg-mini/acacia_ligulata","iNatAg-mini/acacia_maidenii","iNatAg-mini/acacia_mangium","iNatAg-mini/acacia_mearnsii","iNatAg-mini/acacia_melanoxylon","iNatAg-mini/acacia_mellifera","iNatAg-mini/acacia_murrayana","iNatAg-mini/acacia_neriifolia","iNatAg-mini/acacia_nigrescens","iNatAg-mini/acacia_nilotica","iNatAg-mini/acacia_occidentalis","iNatAg-mini/acacia_oraria","iNatAg-mini/acacia_oswaldii","iNatAg-mini/acacia_pachycarpa","iNatAg-mini/acacia_papyrocarpa","iNatAg-mini/acacia_paradoxa","iNatAg-mini/acacia_pendula","iNatAg-mini/acacia_peuce","iNatAg-mini/acacia_podalyriifolia","iNatAg-mini/acacia_polyacantha","iNatAg-mini/acacia_polystachya","iNatAg-mini/acacia_pruinocarpa","iNatAg-mini/acacia_pycnantha","iNatAg-mini/acacia_salicina","iNatAg-mini/acacia_saligna","iNatAg-mini/acacia_sclerosperma","iNatAg-mini/acacia_senegal","iNatAg-mini/acacia_seyal","iNatAg-mini/acacia_shirleyi","iNatAg-mini/acacia_sieberiana","iNatAg-mini/acacia_silvestris","iNatAg-mini/acacia_simsii","iNatAg-mini/acacia_stenophylla","iNatAg-mini/acacia_tetragonophylla","iNatAg-mini/acacia_tortilis","iNatAg-mini/acacia_torulosa","iNatAg-mini/acacia_trachycarpa","iNatAg-mini/acacia_victoriae","iNatAg-mini/acaena_novae-zelandiae","iNatAg-mini/acalypha_rhomboidea","iNatAg-mini/acalypha_virginica","iNatAg-mini/acanthosicyos_horridus","iNatAg-mini/acanthosicyos_naudinianus","iNatAg-mini/acanthospermum_hispidum","iNatAg-mini/acanthus_ilicifolius","iNatAg-mini/acanthus_mollis","iNatAg-mini/acca_sellowiana","iNatAg-mini/acer_caesium","iNatAg-mini/acer_campestre","iNatAg-mini/acer_platanoides","iNatAg-mini/acer_pseudoplatanus","iNatAg-mini/acer_saccharum","iNatAg-mini/achillea_fragrantissima","iNatAg-mini/achillea_millefolium","iNatAg-mini/achillea_ptarmica","iNatAg-mini/achnatherum_pekinense","iNatAg-mini/achyranthes_aspera","iNatAg-mini/acmena_smithii","iNatAg-mini/aconitum_napellus","iNatAg-mini/acorus_calamus","iNatAg-mini/acrocarpus_fraxinifolius","iNatAg-mini/acrocomia_aculeata","iNatAg-mini/acrocomia_totai","iNatAg-mini/actaea_racemosa","iNatAg-mini/actinidia_arguta","iNatAg-mini/actinidia_chinensis","iNatAg-mini/adansonia_digitata","iNatAg-mini/adansonia_grandidieri","iNatAg-mini/adansonia_gregorii","iNatAg-mini/adenanthera_pavonina","iNatAg-mini/adesmia_bicolor","iNatAg-mini/adesmia_latifolia","iNatAg-mini/adesmia_punctata","iNatAg-mini/adesmia_securigerifolia","iNatAg-mini/adiantum_capillus-veneris","iNatAg-mini/adina_cordifolia","iNatAg-mini/adonis_annua","iNatAg-mini/adonis_vernalis","iNatAg-mini/aechmea_magdalenae","iNatAg-mini/aegiceras_corniculatum","iNatAg-mini/aegilops_biuncialis","iNatAg-mini/aegilops_cylindrica","iNatAg-mini/aegilops_geniculata","iNatAg-mini/aegilops_triuncialis","iNatAg-mini/aegle_marmelos","iNatAg-mini/aegopodium_podagraria","iNatAg-mini/aeschynomene_americana","iNatAg-mini/aeschynomene_brasiliana","iNatAg-mini/aeschynomene_falcata","iNatAg-mini/aeschynomene_histrix","iNatAg-mini/aeschynomene_indica","iNatAg-mini/aeschynomene_villosa","iNatAg-mini/aesculus_hippocastanum","iNatAg-mini/aesculus_indica","iNatAg-mini/aethusa_cynapium","iNatAg-mini/afzelia_africana","iNatAg-mini/afzelia_quanzensis","iNatAg-mini/agathis_australis","iNatAg-mini/agathis_dammara","iNatAg-mini/agathis_macrophylla","iNatAg-mini/agathis_microstachya","iNatAg-mini/agathis_robusta","iNatAg-mini/agave_fourcroydes","iNatAg-mini/agave_lecheguilla","iNatAg-mini/agave_sisalana","iNatAg-mini/ageratum_conyzoides","iNatAg-mini/agrimonia_eupatoria","iNatAg-mini/agrimonia_gryposepala","iNatAg-mini/agrimonia_parviflora","iNatAg-mini/agropyron_cristatum","iNatAg-mini/agropyron_dasyanthum","iNatAg-mini/agropyron_desertorum","iNatAg-mini/agropyron_scabrum","iNatAg-mini/agrostemma_githago","iNatAg-mini/agrostis_canina","iNatAg-mini/agrostis_capillaris","iNatAg-mini/agrostis_gigantea","iNatAg-mini/agrostis_stolonifera","iNatAg-mini/agrostis_tenuis","iNatAg-mini/ailanthus_altissima","iNatAg-mini/ailanthus_excelsa","iNatAg-mini/aiphanes_aculeata","iNatAg-mini/aira_caryophyllea","iNatAg-mini/ajuga_genevensis","iNatAg-mini/ajuga_reptans","iNatAg-mini/alania_cunninghamii","iNatAg-mini/albizia_adianthifolia","iNatAg-mini/albizia_amara","iNatAg-mini/albizia_chinensis","iNatAg-mini/albizia_falcataria","iNatAg-mini/albizia_harveyi","iNatAg-mini/albizia_lebbeck","iNatAg-mini/albizia_lophantha","iNatAg-mini/albizia_lucida","iNatAg-mini/albizia_odoratissima","iNatAg-mini/albizia_procera","iNatAg-mini/alcea_rosea","iNatAg-mini/alchemilla_monticola","iNatAg-mini/alchemilla_occidentalis","iNatAg-mini/alchemilla_vulgaris","iNatAg-mini/alchemilla_xanthochlora","iNatAg-mini/aleurites_fordii","iNatAg-mini/aleurites_moluccana","iNatAg-mini/alisma_gramineum","iNatAg-mini/alisma_lanceolatum","iNatAg-mini/alisma_plantago-aquatica","iNatAg-mini/alkanna_tinctoria","iNatAg-mini/alliaria_petiolata","iNatAg-mini/allionia_incarnata","iNatAg-mini/allium_ampeloprasum","iNatAg-mini/allium_canadense","iNatAg-mini/allium_cepa","iNatAg-mini/allium_chinense","iNatAg-mini/allium_fistulosum","iNatAg-mini/allium_paniculatum","iNatAg-mini/allium_sativum","iNatAg-mini/allium_schoenoprasum","iNatAg-mini/allium_triquetrum","iNatAg-mini/allium_tuberosum","iNatAg-mini/allium_ursinum","iNatAg-mini/allocasuarina_campestris","iNatAg-mini/allocasuarina_decaisneana","iNatAg-mini/allocasuarina_fraseriana","iNatAg-mini/allocasuarina_huegeliana","iNatAg-mini/allocasuarina_littoralis","iNatAg-mini/allocasuarina_luehmannii","iNatAg-mini/allocasuarina_torulosa","iNatAg-mini/alloteropsis_semialata","iNatAg-mini/alnus_acuminata","iNatAg-mini/alnus_glutinosa","iNatAg-mini/alnus_japonica","iNatAg-mini/alnus_maritima","iNatAg-mini/alnus_nepalensis","iNatAg-mini/alnus_rubra","iNatAg-mini/alocasia_macrorrhizos","iNatAg-mini/aloe_arborescens","iNatAg-mini/aloe_barbadensis","iNatAg-mini/aloe_ferox","iNatAg-mini/aloe_perryi","iNatAg-mini/alopecurus_arundinaceus","iNatAg-mini/alopecurus_carolinianus","iNatAg-mini/alopecurus_geniculatus","iNatAg-mini/alopecurus_myosuroides","iNatAg-mini/alopecurus_pratensis","iNatAg-mini/alopecurus_rendlei","iNatAg-mini/aloysia_triphylla","iNatAg-mini/alphitonia_excelsa","iNatAg-mini/alpinia_galanga","iNatAg-mini/alstonia_scholaris","iNatAg-mini/alternanthera_pungens","iNatAg-mini/althaea_officinalis","iNatAg-mini/altingia_excelsa","iNatAg-mini/alysicarpus_monilifer","iNatAg-mini/alysicarpus_ovalifolius","iNatAg-mini/alysicarpus_rugosus","iNatAg-mini/alysicarpus_vaginalis","iNatAg-mini/alyssum_desertorum","iNatAg-mini/amaranthus_albus","iNatAg-mini/amaranthus_blitum","iNatAg-mini/amaranthus_caudatus","iNatAg-mini/amaranthus_cruentus","iNatAg-mini/amaranthus_dubius","iNatAg-mini/amaranthus_hybridus","iNatAg-mini/amaranthus_hypochondriacus","iNatAg-mini/amaranthus_lividus","iNatAg-mini/amaranthus_retroflexus","iNatAg-mini/amaranthus_speciosus","iNatAg-mini/amaranthus_spinosus","iNatAg-mini/amaranthus_tricolor","iNatAg-mini/amaranthus_viridis","iNatAg-mini/ambelania_acida","iNatAg-mini/ambrosia_acanthicarpa","iNatAg-mini/ambrosia_artemisiifolia","iNatAg-mini/ambrosia_confertiflora","iNatAg-mini/ambrosia_psilostachya","iNatAg-mini/ambrosia_tomentosa","iNatAg-mini/ambrosia_trifida","iNatAg-mini/ammannia_latifolia","iNatAg-mini/ammi_majus","iNatAg-mini/ammophila_arenaria","iNatAg-mini/ammophila_breviligulata","iNatAg-mini/amorpha_fruticosa","iNatAg-mini/amorphophallus_paeoniifolius","iNatAg-mini/amsinckia_douglasiana","iNatAg-mini/amsinckia_lycopsoides","iNatAg-mini/anacardium_occidentale","iNatAg-mini/anagallis_arvensis","iNatAg-mini/ananas_comosus","iNatAg-mini/anchusa_azurea","iNatAg-mini/andrographis_paniculata","iNatAg-mini/andropogon_barbinodis","iNatAg-mini/andropogon_bicornis","iNatAg-mini/andropogon_brachystachyus","iNatAg-mini/andropogon_gayanus","iNatAg-mini/andropogon_gyrans","iNatAg-mini/andropogon_hallii","iNatAg-mini/andropogon_leucostachyus","iNatAg-mini/andropogon_ternarius","iNatAg-mini/androsace_septentrionalis","iNatAg-mini/anemone_hepatica","iNatAg-mini/anemone_nemorosa","iNatAg-mini/anethum_graveolens","iNatAg-mini/angelica_archangelica","iNatAg-mini/angelica_atropurpurea","iNatAg-mini/angelica_sylvestris","iNatAg-mini/angophora_costata","iNatAg-mini/angophora_floribunda","iNatAg-mini/annona_atemoya","iNatAg-mini/annona_cherimola","iNatAg-mini/annona_diversifolia","iNatAg-mini/annona_montana","iNatAg-mini/annona_muricata","iNatAg-mini/annona_purpurea","iNatAg-mini/annona_reticulata","iNatAg-mini/annona_senegalensis","iNatAg-mini/annona_squamosa","iNatAg-mini/anogeissus_acuminata","iNatAg-mini/anogeissus_latifolia","iNatAg-mini/anogeissus_pendula","iNatAg-mini/antennaria_dioica","iNatAg-mini/anthemis_arvensis","iNatAg-mini/anthemis_cotula","iNatAg-mini/anthemis_tinctoria","iNatAg-mini/anthephora_pubescens","iNatAg-mini/anthoxanthum_odoratum","iNatAg-mini/anthriscus_cerefolium","iNatAg-mini/anthyllis_vulneraria","iNatAg-mini/antidesma_bunius","iNatAg-mini/antirrhinum_majus","iNatAg-mini/aphandra_natalia","iNatAg-mini/aphanes_arvensis","iNatAg-mini/apios_americana","iNatAg-mini/apium_graveolens","iNatAg-mini/apocynum_cannabinum","iNatAg-mini/apocynum_sibiricum","iNatAg-mini/aponogeton_distachyos","iNatAg-mini/aquilaria_malaccensis","iNatAg-mini/aquilegia_canadensis","iNatAg-mini/aquilegia_vulgaris","iNatAg-mini/arachis_glabrata","iNatAg-mini/arachis_hypogaea","iNatAg-mini/arachis_pintoi","iNatAg-mini/arachis_villosa","iNatAg-mini/araucaria_angustifolia","iNatAg-mini/araucaria_bidwillii","iNatAg-mini/araucaria_cunninghamii","iNatAg-mini/araucaria_hunsteinii","iNatAg-mini/arbutus_unedo","iNatAg-mini/archidendron_jiringa","iNatAg-mini/arctium_lappa","iNatAg-mini/arctostaphylos_glandulosa","iNatAg-mini/arctostaphylos_manzanita","iNatAg-mini/arctostaphylos_patula","iNatAg-mini/arctostaphylos_uva-ursi","iNatAg-mini/arctostaphylos_viscida","iNatAg-mini/ardisia_crenata","iNatAg-mini/areca_catechu","iNatAg-mini/arenaria_serpyllifolia","iNatAg-mini/arenga_pinnata","iNatAg-mini/argemone_mexicana","iNatAg-mini/argyrodendron_actinophyllum","iNatAg-mini/argyrodendron_peralatum","iNatAg-mini/aria_alnifolia","iNatAg-mini/aristida_adscensionis","iNatAg-mini/aristida_behriana","iNatAg-mini/aristida_congesta","iNatAg-mini/aristida_junciformis","iNatAg-mini/aristida_lanosa","iNatAg-mini/aristida_latifolia","iNatAg-mini/aristida_longispica","iNatAg-mini/aristida_personata","iNatAg-mini/aristida_purpurascens","iNatAg-mini/aristida_schiedeana","iNatAg-mini/aristida_transvaalensis","iNatAg-mini/aristolochia_rotunda","iNatAg-mini/armoracia_rusticana","iNatAg-mini/arnica_montana","iNatAg-mini/arrhenatherum_elatius","iNatAg-mini/artemisia_abrotanum","iNatAg-mini/artemisia_absinthium","iNatAg-mini/artemisia_afra","iNatAg-mini/artemisia_annua","iNatAg-mini/artemisia_campestris","iNatAg-mini/artemisia_dracunculus","iNatAg-mini/artemisia_filifolia","iNatAg-mini/artemisia_glacialis","iNatAg-mini/artemisia_herba-alba","iNatAg-mini/artemisia_ludoviciana","iNatAg-mini/artemisia_stelleriana","iNatAg-mini/artemisia_tridentata","iNatAg-mini/artemisia_vulgaris","iNatAg-mini/artocarpus_altilis","iNatAg-mini/artocarpus_heterophyllus","iNatAg-mini/artocarpus_hirsutus","iNatAg-mini/artocarpus_integer","iNatAg-mini/artocarpus_lakoocha","iNatAg-mini/arundinella_hirta","iNatAg-mini/arundo_donax","iNatAg-mini/asarina_stricta","iNatAg-mini/asarum_europaeum","iNatAg-mini/asclepias_curassavica","iNatAg-mini/asclepias_fascicularis","iNatAg-mini/asclepias_incarnata","iNatAg-mini/asclepias_lanceolata","iNatAg-mini/asclepias_purpurascens","iNatAg-mini/asclepias_speciosa","iNatAg-mini/asclepias_subverticillata","iNatAg-mini/asclepias_tuberosa","iNatAg-mini/asclepias_verticillata","iNatAg-mini/asclepias_viridiflora","iNatAg-mini/asimina_angustifolia","iNatAg-mini/asimina_triloba","iNatAg-mini/asparagus_densiflorus","iNatAg-mini/asparagus_officinalis","iNatAg-mini/asperula_arvensis","iNatAg-mini/asphodelus_albus","iNatAg-mini/asphodelus_tenuifolius","iNatAg-mini/aspilia_angustifolia","iNatAg-mini/asplenium_ruta-muraria","iNatAg-mini/aster_ericoides","iNatAg-mini/astragalus_adsurgens","iNatAg-mini/astragalus_asymmetricus","iNatAg-mini/astragalus_canadensis","iNatAg-mini/astragalus_cicer","iNatAg-mini/astragalus_gummifer","iNatAg-mini/astragalus_mollissimus","iNatAg-mini/astragalus_nuttallianus","iNatAg-mini/astragalus_sinicus","iNatAg-mini/astragalus_tweedyi","iNatAg-mini/astrantia_major","iNatAg-mini/astrebla_lappacea","iNatAg-mini/astrebla_pectinata","iNatAg-mini/astrebla_squarrosa","iNatAg-mini/astrocaryum_jauari","iNatAg-mini/astrocaryum_vulgare","iNatAg-mini/asystasia_gangetica","iNatAg-mini/atalaya_hemiglauca","iNatAg-mini/atherosperma_moschatum","iNatAg-mini/athrotaxis_selaginoides","iNatAg-mini/atriplex_canescens","iNatAg-mini/atriplex_confertifolia","iNatAg-mini/atriplex_gardneri","iNatAg-mini/atriplex_glauca","iNatAg-mini/atriplex_halimus","iNatAg-mini/atriplex_hortensis","iNatAg-mini/atriplex_lentiformis","iNatAg-mini/atriplex_nummularia","iNatAg-mini/atriplex_patula","iNatAg-mini/atriplex_rosea","iNatAg-mini/atriplex_semibaccata","iNatAg-mini/atriplex_vesicaria","iNatAg-mini/atropa_belladonna","iNatAg-mini/attalea_cohune","iNatAg-mini/avena_fatua","iNatAg-mini/avena_sativa","iNatAg-mini/avena_sterilis","iNatAg-mini/avenula_pubescens","iNatAg-mini/averrhoa_bilimbi","iNatAg-mini/averrhoa_carambola","iNatAg-mini/avicennia_germinans","iNatAg-mini/avicennia_marina","iNatAg-mini/avicennia_officinalis","iNatAg-mini/axonopus_affinis","iNatAg-mini/axonopus_compressus","iNatAg-mini/axonopus_fissifolius","iNatAg-mini/axyris_amaranthoides","iNatAg-mini/azadirachta_indica","iNatAg-mini/azanza_garckeana","iNatAg-mini/azolla_filiculoides","iNatAg-mini/azolla_pinnata","iNatAg-mini/baccaurea_motleyana","iNatAg-mini/baccaurea_ramiflora","iNatAg-mini/baccharis_glutinosa","iNatAg-mini/baccharis_pilularis","iNatAg-mini/bactris_gasipaes","iNatAg-mini/baikiaea_plurijuga","iNatAg-mini/balanites_aegyptiaca","iNatAg-mini/bambusa_arundinacea","iNatAg-mini/bambusa_balcooa","iNatAg-mini/bambusa_blumeana","iNatAg-mini/bambusa_tulda","iNatAg-mini/bambusa_vulgaris","iNatAg-mini/banksia_integrifolia","iNatAg-mini/banksia_occidentalis","iNatAg-mini/baphia_nitida","iNatAg-mini/barringtonia_racemosa","iNatAg-mini/basella_alba","iNatAg-mini/bauhinia_aculeata","iNatAg-mini/bauhinia_petersiana","iNatAg-mini/bauhinia_racemosa","iNatAg-mini/bauhinia_rufescens","iNatAg-mini/bauhinia_thonningii","iNatAg-mini/bauhinia_tomentosa","iNatAg-mini/bauhinia_variegata","iNatAg-mini/beckmannia_eruciformis","iNatAg-mini/beckmannia_syzigachne","iNatAg-mini/bellis_perennis","iNatAg-mini/benincasa_hispida","iNatAg-mini/berberis_aquifolium","iNatAg-mini/berberis_thunbergii","iNatAg-mini/berberis_vulgaris","iNatAg-mini/berchemia_discolor","iNatAg-mini/berrya_cordifolia","iNatAg-mini/bersama_lucens","iNatAg-mini/bertholletia_excelsa","iNatAg-mini/beta_vulgaris","iNatAg-mini/betula_nigra","iNatAg-mini/betula_pendula","iNatAg-mini/betula_pubescens","iNatAg-mini/bidens_bipinnata","iNatAg-mini/bidens_cernua","iNatAg-mini/bidens_frondosa","iNatAg-mini/bidens_pilosa","iNatAg-mini/bidens_tripartita","iNatAg-mini/bignonia_capreolata","iNatAg-mini/biserrula_pelecinus","iNatAg-mini/bixa_orellana","iNatAg-mini/blighia_sapida","iNatAg-mini/blumea_balsamifera","iNatAg-mini/bocconia_frutescens","iNatAg-mini/boehmeria_nivea","iNatAg-mini/boerhavia_coccinea","iNatAg-mini/boerhavia_diffusa","iNatAg-mini/boerhavia_erecta","iNatAg-mini/boesenbergia_rotunda","iNatAg-mini/bolusanthus_speciosus","iNatAg-mini/bombacopsis_quinata","iNatAg-mini/bombax_ceiba","iNatAg-mini/bombax_insigne","iNatAg-mini/borago_officinalis","iNatAg-mini/borassus_aethiopum","iNatAg-mini/borassus_flabellifer","iNatAg-mini/borojoa_patinoi","iNatAg-mini/boronia_glabra","iNatAg-mini/boscia_angustifolia","iNatAg-mini/boswellia_serrata","iNatAg-mini/bothriochloa_bladhii","iNatAg-mini/bothriochloa_insculpta","iNatAg-mini/bothriochloa_ischaemum","iNatAg-mini/bothriochloa_pertusa","iNatAg-mini/bougainvillea_glabra","iNatAg-mini/bouteloua_curtipendula","iNatAg-mini/bouteloua_gracilis","iNatAg-mini/brachiaria_brizantha","iNatAg-mini/brachiaria_decumbens","iNatAg-mini/brachiaria_deflexa","iNatAg-mini/brachiaria_distachya","iNatAg-mini/brachiaria_humidicola","iNatAg-mini/brachiaria_mutica","iNatAg-mini/brachiaria_ramosa","iNatAg-mini/brachiaria_serrata","iNatAg-mini/brachychiton_acerifolius","iNatAg-mini/brachychiton_populneus","iNatAg-mini/brachylaena_huillensis","iNatAg-mini/brachystegia_spiciformis","iNatAg-mini/brassica_campestris","iNatAg-mini/brassica_chinensis","iNatAg-mini/brassica_incana","iNatAg-mini/brassica_juncea","iNatAg-mini/brassica_napus","iNatAg-mini/brassica_nigra","iNatAg-mini/brassica_rapa","iNatAg-mini/brassica_tournefortii","iNatAg-mini/bridelia_micrantha","iNatAg-mini/briza_maxima","iNatAg-mini/briza_media","iNatAg-mini/briza_minor","iNatAg-mini/bromus_arvensis","iNatAg-mini/bromus_carinatus","iNatAg-mini/bromus_catharticus","iNatAg-mini/bromus_diandrus","iNatAg-mini/bromus_erectus","iNatAg-mini/bromus_hordeaceus","iNatAg-mini/bromus_inermis","iNatAg-mini/bromus_madritensis","iNatAg-mini/bromus_marginatus","iNatAg-mini/bromus_racemosus","iNatAg-mini/bromus_rubens","iNatAg-mini/bromus_secalinus","iNatAg-mini/bromus_sterilis","iNatAg-mini/bromus_tectorum","iNatAg-mini/bromus_unioloides","iNatAg-mini/bromus_willdenowii","iNatAg-mini/brosimum_alicastrum","iNatAg-mini/broussonetia_papyrifera","iNatAg-mini/bruguiera_gymnorrhiza","iNatAg-mini/bryonia_alba","iNatAg-mini/bryonia_cretica","iNatAg-mini/buchloe_dactyloides","iNatAg-mini/buckinghamia_celsissima","iNatAg-mini/bunias_erucago","iNatAg-mini/bunias_orientalis","iNatAg-mini/burkea_africana","iNatAg-mini/bursera_simaruba","iNatAg-mini/butea_monosperma","iNatAg-mini/butomus_umbellatus","iNatAg-mini/buxus_sempervirens","iNatAg-mini/cacalia_atriplicifolia","iNatAg-mini/caesalpinia_coriaria","iNatAg-mini/caesalpinia_sappan","iNatAg-mini/cajanus_cajan","iNatAg-mini/calamagrostis_epigeios","iNatAg-mini/calathea_allouia","iNatAg-mini/calendula_arvensis","iNatAg-mini/calendula_officinalis","iNatAg-mini/calliandra_calothyrsus","iNatAg-mini/calliandra_tweedii","iNatAg-mini/callisia_angustifolia","iNatAg-mini/callitriche_palustris","iNatAg-mini/callitriche_stagnalis","iNatAg-mini/callitriche_verna","iNatAg-mini/callitris_columellaris","iNatAg-mini/callitris_endlicheri","iNatAg-mini/callitris_macleayana","iNatAg-mini/calluna_vulgaris","iNatAg-mini/calodendrum_capense","iNatAg-mini/calophyllum_apetalum","iNatAg-mini/calophyllum_brasiliense","iNatAg-mini/calophyllum_inophyllum","iNatAg-mini/calopogonium_caeruleum","iNatAg-mini/calopogonium_mucunoides","iNatAg-mini/calotropis_procera","iNatAg-mini/caltha_palustris","iNatAg-mini/calystegia_hederacea","iNatAg-mini/calystegia_occidentalis","iNatAg-mini/calystegia_pubescens","iNatAg-mini/camelina_sativa","iNatAg-mini/camellia_sinensis","iNatAg-mini/campanula_americana","iNatAg-mini/campanula_rapunculus","iNatAg-mini/campanula_rotundifolia","iNatAg-mini/cananga_odorata","iNatAg-mini/canavalia_brasiliensis","iNatAg-mini/canavalia_ensiformis","iNatAg-mini/canavalia_gladiata","iNatAg-mini/canna_indica","iNatAg-mini/canthium_spinosum","iNatAg-mini/capparis_decidua","iNatAg-mini/capparis_spinosa","iNatAg-mini/capparis_tomentosa","iNatAg-mini/capsella_bursa-pastoris","iNatAg-mini/capsicum_annuum","iNatAg-mini/capsicum_chinense","iNatAg-mini/capsicum_frutescens","iNatAg-mini/capsicum_pubescens","iNatAg-mini/caragana_arborescens","iNatAg-mini/caragana_microphylla","iNatAg-mini/carapa_guianensis","iNatAg-mini/cardamine_flexuosa","iNatAg-mini/cardamine_hirsuta","iNatAg-mini/cardamine_impatiens","iNatAg-mini/cardamine_oligosperma","iNatAg-mini/cardamine_parviflora","iNatAg-mini/cardamine_pratensis","iNatAg-mini/cardiospermum_halicacabum","iNatAg-mini/carduus_acanthoides","iNatAg-mini/carduus_crispus","iNatAg-mini/carduus_lanceolatus","iNatAg-mini/carduus_pycnocephalus","iNatAg-mini/carex_nebrascensis","iNatAg-mini/carex_pallescens","iNatAg-mini/carica_cauliflora","iNatAg-mini/carica_papaya","iNatAg-mini/carica_pubescens","iNatAg-mini/cariniana_pyriformis","iNatAg-mini/carissa_carandas","iNatAg-mini/carissa_edulis","iNatAg-mini/carissa_macrocarpa","iNatAg-mini/carlina_acaulis","iNatAg-mini/carludovica_palmata","iNatAg-mini/caroxylon_aphyllum","iNatAg-mini/carpinus_betulus","iNatAg-mini/carthamus_creticus","iNatAg-mini/carthamus_lanatus","iNatAg-mini/carthamus_tinctorius","iNatAg-mini/carum_carvi","iNatAg-mini/carya_illinoensis","iNatAg-mini/caryodendron_orinocense","iNatAg-mini/caryota_urens","iNatAg-mini/casimiroa_edulis","iNatAg-mini/cassia_articulata","iNatAg-mini/cassia_brewsteri","iNatAg-mini/cassia_fistula","iNatAg-mini/cassia_marilandica","iNatAg-mini/cassia_nictitans","iNatAg-mini/cassia_reticulata","iNatAg-mini/cassia_senna","iNatAg-mini/cassia_siamea","iNatAg-mini/cassia_sieberiana","iNatAg-mini/cassia_tomentosa","iNatAg-mini/cassia_tora","iNatAg-mini/castanea_crenata","iNatAg-mini/castanea_dentata","iNatAg-mini/castanea_mollissima","iNatAg-mini/castanea_pumila","iNatAg-mini/castanea_sativa","iNatAg-mini/castanospermum_australe","iNatAg-mini/castilla_elastica","iNatAg-mini/castilleja_angustifolia","iNatAg-mini/castilleja_occidentalis","iNatAg-mini/casuarina_cristata","iNatAg-mini/casuarina_cunninghamiana","iNatAg-mini/casuarina_equisetifolia","iNatAg-mini/casuarina_glauca","iNatAg-mini/casuarina_junghuhniana","iNatAg-mini/casuarina_obesa","iNatAg-mini/catalpa_bignonioides","iNatAg-mini/catha_edulis","iNatAg-mini/catharanthus_roseus","iNatAg-mini/ceanothus_americanus","iNatAg-mini/ceanothus_prostratus","iNatAg-mini/cedrela_odorata","iNatAg-mini/cedrus_deodara","iNatAg-mini/ceiba_pentandra","iNatAg-mini/celastrus_orbiculatus","iNatAg-mini/celastrus_scandens","iNatAg-mini/celosia_argentea","iNatAg-mini/celtis_australis","iNatAg-mini/cenchrus_biflorus","iNatAg-mini/cenchrus_ciliaris","iNatAg-mini/cenchrus_echinatus","iNatAg-mini/cenchrus_setigerus","iNatAg-mini/cenchrus_spinifex","iNatAg-mini/cenchrus_tribuloides","iNatAg-mini/centaurea_biebersteinii","iNatAg-mini/centaurea_calcitrapa","iNatAg-mini/centaurea_cyanus","iNatAg-mini/centaurea_diluta","iNatAg-mini/centaurea_jacea","iNatAg-mini/centaurea_melitensis","iNatAg-mini/centaurea_nigra","iNatAg-mini/centaurea_nigrescens","iNatAg-mini/centaurea_solstitalis","iNatAg-mini/centaurea_solstitialis","iNatAg-mini/centaurea_stoebe","iNatAg-mini/centaurea_virgata","iNatAg-mini/centella_asiatica","iNatAg-mini/centropodia_glauca","iNatAg-mini/centrosema_brasilianum","iNatAg-mini/centrosema_macrocarpum","iNatAg-mini/centrosema_pascuorum","iNatAg-mini/centrosema_plumieri","iNatAg-mini/centrosema_pubescens","iNatAg-mini/centrosema_virginianum","iNatAg-mini/cephalanthus_occidentalis","iNatAg-mini/cerastium_arvense","iNatAg-mini/cerastium_nutans","iNatAg-mini/cerastium_vulgatum","iNatAg-mini/ceratonia_siliqua","iNatAg-mini/ceratopetalum_apetalum","iNatAg-mini/ceratophyllum_demersum","iNatAg-mini/ceratophyllum_echinatum","iNatAg-mini/ceriops_tagal","iNatAg-mini/cestrum_diurnum","iNatAg-mini/ceterach_officinarum","iNatAg-mini/chaerophyllum_tainturieri","iNatAg-mini/chamaebatia_foliolosa","iNatAg-mini/chamaecrista_nictitans","iNatAg-mini/chamaecrista_rotundifolia","iNatAg-mini/chamaedorea_tepejilote","iNatAg-mini/chamaerops_humilis","iNatAg-mini/chara_intermedia","iNatAg-mini/chelidonium_majus","iNatAg-mini/chenopodium_album","iNatAg-mini/chenopodium_ambrosioides","iNatAg-mini/chenopodium_ambrosoides","iNatAg-mini/chenopodium_berlandieri","iNatAg-mini/chenopodium_bonus-henricus","iNatAg-mini/chenopodium_botrys","iNatAg-mini/chenopodium_ficifolium","iNatAg-mini/chenopodium_gigantospermum","iNatAg-mini/chenopodium_glaucum","iNatAg-mini/chenopodium_missouriense","iNatAg-mini/chenopodium_multifidum","iNatAg-mini/chenopodium_murale","iNatAg-mini/chenopodium_polyspermum","iNatAg-mini/chenopodium_quinoa","iNatAg-mini/chenopodium_rubrum","iNatAg-mini/chenopodium_urbicum","iNatAg-mini/chloris_ciliata","iNatAg-mini/chloris_gayana","iNatAg-mini/chloris_roxburghiana","iNatAg-mini/chloris_verticillata","iNatAg-mini/chloris_virgata","iNatAg-mini/chlorogalum_pomeridianum","iNatAg-mini/chlorophora_excelsa","iNatAg-mini/chlorophytum_comosum","iNatAg-mini/chloroxylon_swietenia","iNatAg-mini/chromolaena_odorata","iNatAg-mini/chrysanthemum_coronarium","iNatAg-mini/chrysanthemum_leucanthemum","iNatAg-mini/chrysophyllum_cainito","iNatAg-mini/chrysopogon_aciculatus","iNatAg-mini/chukrasia_velutina","iNatAg-mini/cicer_arietinum","iNatAg-mini/cichorium_endivia","iNatAg-mini/cichorium_intybus","iNatAg-mini/cicuta_bulbifera","iNatAg-mini/cicuta_mackenzieana","iNatAg-mini/cicuta_maculata","iNatAg-mini/cicuta_virosa","iNatAg-mini/cimicifuga_racemosa","iNatAg-mini/cinchona_officinalis","iNatAg-mini/cinchona_pubescens","iNatAg-mini/cinnamomum_burmannii","iNatAg-mini/cinnamomum_camphora","iNatAg-mini/cinnamomum_cassia","iNatAg-mini/cinnamomum_verum","iNatAg-mini/cistus_creticus","iNatAg-mini/citrofortunella_microcarpa","iNatAg-mini/citrullus_colocynthis","iNatAg-mini/citrullus_lanatus","iNatAg-mini/citrus_aurantifolia","iNatAg-mini/citrus_aurantium","iNatAg-mini/citrus_deliciosa","iNatAg-mini/citrus_latifolia","iNatAg-mini/citrus_limon","iNatAg-mini/citrus_madurensis","iNatAg-mini/citrus_medica","iNatAg-mini/citrus_paradisi","iNatAg-mini/citrus_reticulata","iNatAg-mini/citrus_sinensis","iNatAg-mini/citrus_unshiu","iNatAg-mini/clausena_lansium","iNatAg-mini/claytonia_caroliniana","iNatAg-mini/claytonia_virginica","iNatAg-mini/cleistogenes_squarrosa","iNatAg-mini/clematis_ligusticifolia","iNatAg-mini/clematis_orientalis","iNatAg-mini/clematis_virginiana","iNatAg-mini/clematis_vitalba","iNatAg-mini/cleome_gynandra","iNatAg-mini/cleome_hassleriana","iNatAg-mini/cleome_viscosa","iNatAg-mini/clitoria_laurifolia","iNatAg-mini/clitoria_ternatea","iNatAg-mini/clusia_occidentalis","iNatAg-mini/cnicus_benedictus","iNatAg-mini/coccoloba_uvifera","iNatAg-mini/cochlospermum_religiosum","iNatAg-mini/cocos_nucifera","iNatAg-mini/coffea_arabica","iNatAg-mini/coffea_canephora","iNatAg-mini/coffea_liberica","iNatAg-mini/coix_lacryma-jobi","iNatAg-mini/cola_acuminata","iNatAg-mini/cola_nitida","iNatAg-mini/colchicum_autumnale","iNatAg-mini/coleus_amboinicus","iNatAg-mini/colocasia_esculenta","iNatAg-mini/colophospermum_mopane","iNatAg-mini/combretum_aculeatum","iNatAg-mini/combretum_micranthum","iNatAg-mini/combretum_molle","iNatAg-mini/commelina_bengalensis","iNatAg-mini/commelina_benghalensis","iNatAg-mini/commelina_communis","iNatAg-mini/commelina_erecta","iNatAg-mini/commiphora_africana","iNatAg-mini/conium_maculatum","iNatAg-mini/conocarpus_erectus","iNatAg-mini/conocarpus_lancifolius","iNatAg-mini/convallaria_majalis","iNatAg-mini/convolvulus_althaeoides","iNatAg-mini/convolvulus_arvensis","iNatAg-mini/convolvulus_equitans","iNatAg-mini/convolvulus_sepium","iNatAg-mini/copaifera_langsdorffii","iNatAg-mini/corchorus_aestuans","iNatAg-mini/corchorus_capsularis","iNatAg-mini/cordia_africana","iNatAg-mini/cordia_alliodora","iNatAg-mini/coreopsis_lanceolata","iNatAg-mini/coreopsis_tinctoria","iNatAg-mini/coreopsis_verticillata","iNatAg-mini/coriandrum_sativum","iNatAg-mini/corispermum_hyssopifolium","iNatAg-mini/corispermum_villosum","iNatAg-mini/cornus_canadensis","iNatAg-mini/cornus_florida","iNatAg-mini/cornus_mas","iNatAg-mini/cornus_sanguinea","iNatAg-mini/coronilla_varia","iNatAg-mini/corylus_avellana","iNatAg-mini/corylus_maxima","iNatAg-mini/cotoneaster_franchetii","iNatAg-mini/cotula_coronopifolia","iNatAg-mini/crambe_cordifolia","iNatAg-mini/crambe_maritima","iNatAg-mini/crassula_sieberiana","iNatAg-mini/crataegus_crus-galli","iNatAg-mini/crataegus_crus-gallii","iNatAg-mini/crataegus_marshallii","iNatAg-mini/crataegus_monogyna","iNatAg-mini/crataegus_oxyacantha","iNatAg-mini/crataegus_rivularis","iNatAg-mini/cratylia_argentea","iNatAg-mini/crepis_biennis","iNatAg-mini/crepis_occidentalis","iNatAg-mini/crepis_vesicaria","iNatAg-mini/cressa_truxillensis","iNatAg-mini/crinum_americanum","iNatAg-mini/crithmum_maritimum","iNatAg-mini/crocus_sativus","iNatAg-mini/crotalaria_juncea","iNatAg-mini/crotalaria_lanceolata","iNatAg-mini/crotalaria_pallida","iNatAg-mini/crotalaria_podocarpa","iNatAg-mini/crotalaria_retusa","iNatAg-mini/crotalaria_sagittalis","iNatAg-mini/crotalaria_spectabilis","iNatAg-mini/croton_monanthogynus","iNatAg-mini/crucianella_angustifolia","iNatAg-mini/cryptocarya_erythroxylon","iNatAg-mini/cryptomeria_japonica","iNatAg-mini/cryptotaenia_japonica","iNatAg-mini/ctenium_concinnum","iNatAg-mini/cucumis_anguria","iNatAg-mini/cucumis_melo","iNatAg-mini/cucumis_sativus","iNatAg-mini/cucurbita_argyrosperma","iNatAg-mini/cucurbita_digitata","iNatAg-mini/cucurbita_ficifolia","iNatAg-mini/cucurbita_foetidissima","iNatAg-mini/cucurbita_maxima","iNatAg-mini/cucurbita_mixta","iNatAg-mini/cucurbita_moschata","iNatAg-mini/cucurbita_pepo","iNatAg-mini/cunninghamia_lanceolata","iNatAg-mini/cupania_auriculata","iNatAg-mini/cuphea_viscosissima","iNatAg-mini/cupressus_arizonica","iNatAg-mini/cupressus_lusitanica","iNatAg-mini/cupressus_macrocarpa","iNatAg-mini/cupressus_sempervirens","iNatAg-mini/cupressus_torulosa","iNatAg-mini/curcuma_longa","iNatAg-mini/curcuma_zedoaria","iNatAg-mini/cuscuta_approximata","iNatAg-mini/cuscuta_epithymum","iNatAg-mini/cuscuta_obtusiflora","iNatAg-mini/cuscuta_planiflora","iNatAg-mini/cuscuta_sandwichiana","iNatAg-mini/cydonia_oblonga","iNatAg-mini/cymbalaria_muralis","iNatAg-mini/cymbopogon_citratus","iNatAg-mini/cynanchum_scoparium","iNatAg-mini/cynara_cardunculus","iNatAg-mini/cynara_scolymus","iNatAg-mini/cynodon_dactylon","iNatAg-mini/cynodon_nlemfuensis","iNatAg-mini/cynoglossum_officinale","iNatAg-mini/cynometra_cauliflora","iNatAg-mini/cynosurus_cristatus","iNatAg-mini/cyperus_alopecuroides","iNatAg-mini/cyperus_articulatus","iNatAg-mini/cyperus_compressus","iNatAg-mini/cyperus_croceus","iNatAg-mini/cyperus_cuspidatus","iNatAg-mini/cyperus_difformis","iNatAg-mini/cyperus_eragrostis","iNatAg-mini/cyperus_erythrorhizos","iNatAg-mini/cyperus_esculentus","iNatAg-mini/cyperus_flavescens","iNatAg-mini/cyperus_fuscus","iNatAg-mini/cyperus_hyalinus","iNatAg-mini/cyperus_involucratus","iNatAg-mini/cyperus_iria","iNatAg-mini/cyperus_lanceolatus","iNatAg-mini/cyperus_longus","iNatAg-mini/cyperus_odoratus","iNatAg-mini/cyperus_pilosus","iNatAg-mini/cyperus_prolifer","iNatAg-mini/cyperus_pseudovegetus","iNatAg-mini/cyperus_rotundus","iNatAg-mini/cyperus_sanguinolentus","iNatAg-mini/cyperus_squarrosus","iNatAg-mini/cyperus_strigosus","iNatAg-mini/cyperus_subsquarrosus","iNatAg-mini/cyperus_surinamensis","iNatAg-mini/cyphomandra_betacea","iNatAg-mini/cytisus_albus","iNatAg-mini/cytisus_proliferus","iNatAg-mini/cytisus_supinus","iNatAg-mini/dacrydium_franklinii","iNatAg-mini/dactylis_glomerata","iNatAg-mini/dactyloctenium_aegyptium","iNatAg-mini/dactyloctenium_giganteum","iNatAg-mini/dalbergia_latifolia","iNatAg-mini/dalbergia_melanoxylon","iNatAg-mini/dalbergia_sissoo","iNatAg-mini/daphne_laureola","iNatAg-mini/daphne_mezereum","iNatAg-mini/datura_ferox","iNatAg-mini/datura_quercifolia","iNatAg-mini/datura_stramonium","iNatAg-mini/daucus_carota","iNatAg-mini/daucus_carrota","iNatAg-mini/delairea_odorata","iNatAg-mini/delonix_regia","iNatAg-mini/delphinium_bicolor","iNatAg-mini/delphinium_carolinianum","iNatAg-mini/delphinium_menziesii","iNatAg-mini/delphinium_trolliifolium","iNatAg-mini/dendrocalamus_asper","iNatAg-mini/dendrocalamus_giganteus","iNatAg-mini/dendrocalamus_strictus","iNatAg-mini/dendrolobium_umbellatum","iNatAg-mini/derris_elliptica","iNatAg-mini/deschampsia_caespitosa","iNatAg-mini/deschampsia_flexuosa","iNatAg-mini/desmanthus_leptophyllus","iNatAg-mini/desmanthus_virgatus","iNatAg-mini/desmodium_affine","iNatAg-mini/desmodium_barbatum","iNatAg-mini/desmodium_cuneatum","iNatAg-mini/desmodium_cuspidatum","iNatAg-mini/desmodium_distortum","iNatAg-mini/desmodium_gyroides","iNatAg-mini/desmodium_heterophyllum","iNatAg-mini/desmodium_incanum","iNatAg-mini/desmodium_intortum","iNatAg-mini/desmodium_paniculatum","iNatAg-mini/desmodium_psilocarpum","iNatAg-mini/desmodium_reticulatum","iNatAg-mini/desmodium_sandwicense","iNatAg-mini/desmodium_scorpiurus","iNatAg-mini/desmodium_tortuosum","iNatAg-mini/desmodium_triflorum","iNatAg-mini/desmodium_uncinatum","iNatAg-mini/desmodium_velutinum","iNatAg-mini/dialium_guineense","iNatAg-mini/dianthus_armeria","iNatAg-mini/dichanthium_annulatum","iNatAg-mini/dichanthium_aristatum","iNatAg-mini/dichanthium_caricosum","iNatAg-mini/dichanthium_sericeum","iNatAg-mini/dichondra_carolinensis","iNatAg-mini/dichondra_micrantha","iNatAg-mini/dichrostachys_cinerea","iNatAg-mini/dictamnus_albus","iNatAg-mini/didymopanax_morototoni","iNatAg-mini/diervilla_lonicera","iNatAg-mini/digitalis_lanata","iNatAg-mini/digitalis_lutea","iNatAg-mini/digitalis_purpurea","iNatAg-mini/digitaria_argyrograpta","iNatAg-mini/digitaria_ciliaris","iNatAg-mini/digitaria_decumbens","iNatAg-mini/digitaria_didactyla","iNatAg-mini/digitaria_eriantha","iNatAg-mini/digitaria_tricholaenoides","iNatAg-mini/digitaria_violascens","iNatAg-mini/dillenia_indica","iNatAg-mini/dillenia_pentagyna","iNatAg-mini/diodia_virginiana","iNatAg-mini/dioscorea_alata","iNatAg-mini/dioscorea_bulbifera","iNatAg-mini/dioscorea_esculenta","iNatAg-mini/dioscorea_opposita","iNatAg-mini/dioscorea_oppositifolia","iNatAg-mini/dioscorea_trifida","iNatAg-mini/diospyros_digyna","iNatAg-mini/diospyros_kaki","iNatAg-mini/diospyros_malabarica","iNatAg-mini/diospyros_melanoxylon","iNatAg-mini/diospyros_mespiliformis","iNatAg-mini/diospyros_virginiana","iNatAg-mini/diplachne_fusca","iNatAg-mini/diploglottis_cunninghamii","iNatAg-mini/dipsacus_fullonum","iNatAg-mini/dipsacus_laciniatus","iNatAg-mini/dipsacus_sylvestris","iNatAg-mini/dipterocarpus_alatus","iNatAg-mini/dipterocarpus_indicus","iNatAg-mini/dipterocarpus_turbinatus","iNatAg-mini/dodonaea_viscosa","iNatAg-mini/dovyalis_caffra","iNatAg-mini/dovyalis_hebecarpa","iNatAg-mini/draba_nemorosa","iNatAg-mini/draba_verna","iNatAg-mini/dracocephalum_parviflorum","iNatAg-mini/dracocephalum_thymiflorum","iNatAg-mini/drosera_rotundifolia","iNatAg-mini/dryopteris_filix-mas","iNatAg-mini/duboisia_myoporoides","iNatAg-mini/durio_zibethinus","iNatAg-mini/dysoxylum_fraserianum","iNatAg-mini/ecballium_elaterium","iNatAg-mini/echinacea_purpurea","iNatAg-mini/echinochloa_colona","iNatAg-mini/echinochloa_crus-galli","iNatAg-mini/echinochloa_frumentacea","iNatAg-mini/echinochloa_polystachya","iNatAg-mini/echinochloa_pyramidalis","iNatAg-mini/echinops_sphaerocephalus","iNatAg-mini/echium_plantagineum","iNatAg-mini/echium_vulgare","iNatAg-mini/ehrharta_calycina","iNatAg-mini/ehrharta_erecta","iNatAg-mini/ehrharta_longiflora","iNatAg-mini/ehrharta_villosa","iNatAg-mini/eichhornia_crassipes","iNatAg-mini/ekebergia_capensis","iNatAg-mini/elaeagnus_angustifolia","iNatAg-mini/elaeagnus_multiflora","iNatAg-mini/elaeis_guineensis","iNatAg-mini/elaeis_oleifera","iNatAg-mini/elaeocarpus_grandis","iNatAg-mini/eleagnus_angustifolia","iNatAg-mini/elegia_cuspidata","iNatAg-mini/eleocharis_cellulosa","iNatAg-mini/eleocharis_dulcis","iNatAg-mini/eleocharis_macrostachya","iNatAg-mini/eleocharis_montevidensis","iNatAg-mini/eleocharis_vivipara","iNatAg-mini/elephantopus_mollis","iNatAg-mini/elephantorrhiza_elephantina","iNatAg-mini/elettaria_cardamomum","iNatAg-mini/eleusine_indica","iNatAg-mini/ellisia_nyctelea","iNatAg-mini/elsholtzia_ciliata","iNatAg-mini/elymus_canadensis","iNatAg-mini/elymus_caput-medusae","iNatAg-mini/elymus_cinereus","iNatAg-mini/elymus_condensatus","iNatAg-mini/elymus_dahuricus","iNatAg-mini/elymus_glaucus","iNatAg-mini/elymus_viginicus","iNatAg-mini/elymus_virginicus","iNatAg-mini/emilia_sonchifolia","iNatAg-mini/encalypta_intermedia","iNatAg-mini/enneapogon_scoparius","iNatAg-mini/ensete_ventricosum","iNatAg-mini/entada_abyssinica","iNatAg-mini/entada_africana","iNatAg-mini/enterolobium_cyclocarpum","iNatAg-mini/epilobium_angustifolium","iNatAg-mini/epilobium_ciliatum","iNatAg-mini/equisetum_arvense","iNatAg-mini/equisetum_hyemale","iNatAg-mini/equisetum_palustre","iNatAg-mini/equisetum_sylvaticum","iNatAg-mini/equisetum_telmateia","iNatAg-mini/eragrostis_amabilis","iNatAg-mini/eragrostis_barrelieri","iNatAg-mini/eragrostis_capillaris","iNatAg-mini/eragrostis_chloromelas","iNatAg-mini/eragrostis_cilianensis","iNatAg-mini/eragrostis_curvula","iNatAg-mini/eragrostis_interrupta","iNatAg-mini/eragrostis_lehmanniana","iNatAg-mini/eragrostis_minor","iNatAg-mini/eragrostis_obtusa","iNatAg-mini/eragrostis_pilosa","iNatAg-mini/eragrostis_racemosa","iNatAg-mini/eragrostis_superba","iNatAg-mini/eragrostis_tef","iNatAg-mini/eragrostis_tremula","iNatAg-mini/eragrostis_trichodes","iNatAg-mini/eragrostis_unioloides","iNatAg-mini/eremochloa_ophiuroides","iNatAg-mini/erigeron_canadensis","iNatAg-mini/erigeron_cascadensis","iNatAg-mini/erigeron_divaricatus","iNatAg-mini/erigeron_philadelphicus","iNatAg-mini/eriobotrya_japonica","iNatAg-mini/eriochloa_punctata","iNatAg-mini/eriogonum_deflexum","iNatAg-mini/eriogonum_longifolium","iNatAg-mini/eriosema_psoraleoides","iNatAg-mini/eruca_sativa","iNatAg-mini/eryngium_campestre","iNatAg-mini/eryngium_yuccifolium","iNatAg-mini/erysimum_cheiranthoides","iNatAg-mini/erysimum_hieracifolium","iNatAg-mini/erysimum_hieraciifolium","iNatAg-mini/erysimum_repandum","iNatAg-mini/erythrina_abyssinica","iNatAg-mini/erythrina_caffra","iNatAg-mini/erythrina_edulis","iNatAg-mini/erythrina_fusca","iNatAg-mini/erythrina_poeppigiana","iNatAg-mini/erythrina_variegata","iNatAg-mini/erythrina_vespertilio","iNatAg-mini/erythrophleum_chlorostachys","iNatAg-mini/erythroxylum_coca","iNatAg-mini/eucalyptus_accedens","iNatAg-mini/eucalyptus_agglomerata","iNatAg-mini/eucalyptus_albens","iNatAg-mini/eucalyptus_astringens","iNatAg-mini/eucalyptus_bosistoana","iNatAg-mini/eucalyptus_botryoides","iNatAg-mini/eucalyptus_brockwayi","iNatAg-mini/eucalyptus_calophylla","iNatAg-mini/eucalyptus_camaldulensis","iNatAg-mini/eucalyptus_cinerea","iNatAg-mini/eucalyptus_citriodora","iNatAg-mini/eucalyptus_cladocalyx","iNatAg-mini/eucalyptus_cloeziana","iNatAg-mini/eucalyptus_consideniana","iNatAg-mini/eucalyptus_cornuta","iNatAg-mini/eucalyptus_crebra","iNatAg-mini/eucalyptus_cypellocarpa","iNatAg-mini/eucalyptus_dalrympleana","iNatAg-mini/eucalyptus_deglupta","iNatAg-mini/eucalyptus_delegatensis","iNatAg-mini/eucalyptus_diversicolor","iNatAg-mini/eucalyptus_dumosa","iNatAg-mini/eucalyptus_elata","iNatAg-mini/eucalyptus_eremophila","iNatAg-mini/eucalyptus_eugenioides","iNatAg-mini/eucalyptus_exserta","iNatAg-mini/eucalyptus_fastigata","iNatAg-mini/eucalyptus_fraxinoides","iNatAg-mini/eucalyptus_globoidea","iNatAg-mini/eucalyptus_globulus","iNatAg-mini/eucalyptus_gomphocephala","iNatAg-mini/eucalyptus_gongylocarpa","iNatAg-mini/eucalyptus_grandis","iNatAg-mini/eucalyptus_guilfoylei","iNatAg-mini/eucalyptus_gummifera","iNatAg-mini/eucalyptus_intertexta","iNatAg-mini/eucalyptus_jacksonii","iNatAg-mini/eucalyptus_johnstonii","iNatAg-mini/eucalyptus_kessellii","iNatAg-mini/eucalyptus_laophila","iNatAg-mini/eucalyptus_largiflorens","iNatAg-mini/eucalyptus_leucoxylon","iNatAg-mini/eucalyptus_longifolia","iNatAg-mini/eucalyptus_loxophleba","iNatAg-mini/eucalyptus_maculata","iNatAg-mini/eucalyptus_marginata","iNatAg-mini/eucalyptus_melliodora","iNatAg-mini/eucalyptus_microcarpa","iNatAg-mini/eucalyptus_microcorys","iNatAg-mini/eucalyptus_microtheca","iNatAg-mini/eucalyptus_mitchelliana","iNatAg-mini/eucalyptus_moluccana","iNatAg-mini/eucalyptus_muelleriana","iNatAg-mini/eucalyptus_nigrifunda","iNatAg-mini/eucalyptus_niphophila","iNatAg-mini/eucalyptus_nitens","iNatAg-mini/eucalyptus_obliqua","iNatAg-mini/eucalyptus_occidentalis","iNatAg-mini/eucalyptus_ochrophloia","iNatAg-mini/eucalyptus_oreades","iNatAg-mini/eucalyptus_paniculata","iNatAg-mini/eucalyptus_papuana","iNatAg-mini/eucalyptus_patens","iNatAg-mini/eucalyptus_pauciflora","iNatAg-mini/eucalyptus_pellita","iNatAg-mini/eucalyptus_phoenicea","iNatAg-mini/eucalyptus_pilularis","iNatAg-mini/eucalyptus_piperita","iNatAg-mini/eucalyptus_planchoniana","iNatAg-mini/eucalyptus_pleurocarpa","iNatAg-mini/eucalyptus_polyanthemos","iNatAg-mini/eucalyptus_populnea","iNatAg-mini/eucalyptus_propinqua","iNatAg-mini/eucalyptus_pulchella","iNatAg-mini/eucalyptus_punctata","iNatAg-mini/eucalyptus_pyrocarpa","iNatAg-mini/eucalyptus_quadrangulata","iNatAg-mini/eucalyptus_regnans","iNatAg-mini/eucalyptus_resinifera","iNatAg-mini/eucalyptus_robusta","iNatAg-mini/eucalyptus_rubida","iNatAg-mini/eucalyptus_rudis","iNatAg-mini/eucalyptus_saligna","iNatAg-mini/eucalyptus_salmonophloia","iNatAg-mini/eucalyptus_salubris","iNatAg-mini/eucalyptus_sargentii","iNatAg-mini/eucalyptus_scias","iNatAg-mini/eucalyptus_sideroxylon","iNatAg-mini/eucalyptus_sieberi","iNatAg-mini/eucalyptus_socialis","iNatAg-mini/eucalyptus_subcrenulata","iNatAg-mini/eucalyptus_tereticornis","iNatAg-mini/eucalyptus_thozetiana","iNatAg-mini/eucalyptus_transcontinentalis","iNatAg-mini/eucalyptus_trivalva","iNatAg-mini/eucalyptus_urnigera","iNatAg-mini/eucalyptus_urophylla","iNatAg-mini/eucalyptus_utilis","iNatAg-mini/eucalyptus_viminalis","iNatAg-mini/eucalyptus_wandoo","iNatAg-mini/eucalyptus_woollsiana","iNatAg-mini/eucryphia_lucida","iNatAg-mini/eugenia_aromatica","iNatAg-mini/eugenia_stipitata","iNatAg-mini/eugenia_uniflora","iNatAg-mini/euonymus_atropurpureus","iNatAg-mini/euonymus_europaeus","iNatAg-mini/euonymus_japonicus","iNatAg-mini/eupatorium_album","iNatAg-mini/eupatorium_altissimum","iNatAg-mini/eupatorium_cannabinum","iNatAg-mini/eupatorium_compositifolium","iNatAg-mini/eupatorium_hyssopifolium","iNatAg-mini/eupatorium_maculatum","iNatAg-mini/eupatorium_perfoliatum","iNatAg-mini/eupatorium_purpureum","iNatAg-mini/eupatorium_serotinum","iNatAg-mini/euphorbia_cyathophora","iNatAg-mini/euphorbia_cyparissias","iNatAg-mini/euphorbia_dendroides","iNatAg-mini/euphorbia_epicyparissias","iNatAg-mini/euphorbia_esula","iNatAg-mini/euphorbia_helioscopia","iNatAg-mini/euphorbia_heterophylla","iNatAg-mini/euphorbia_hirsuta","iNatAg-mini/euphorbia_hirta","iNatAg-mini/euphorbia_hyssopifolia","iNatAg-mini/euphorbia_lathyris","iNatAg-mini/euphorbia_lathyrus","iNatAg-mini/euphorbia_maculata","iNatAg-mini/euphorbia_marginata","iNatAg-mini/euphorbia_nutans","iNatAg-mini/euphorbia_peplis","iNatAg-mini/euphorbia_peplus","iNatAg-mini/euphorbia_platyphyllos","iNatAg-mini/euphorbia_prostata","iNatAg-mini/euphorbia_prostrata","iNatAg-mini/euphorbia_serphyllifolia","iNatAg-mini/euphorbia_serpyllifolia","iNatAg-mini/euphorbia_serrata","iNatAg-mini/euphorbia_serrulata","iNatAg-mini/euphorbia_spathulata","iNatAg-mini/euphorbia_terracina","iNatAg-mini/euphorbia_tirucalli","iNatAg-mini/euphorbia_vermiculata","iNatAg-mini/eurycoma_longifolia","iNatAg-mini/eusideroxylon_zwageri","iNatAg-mini/eustachys_paspaloides","iNatAg-mini/euterpe_edulis","iNatAg-mini/euterpe_oleracea","iNatAg-mini/euthamia_occidentalis","iNatAg-mini/evax_multicaulis","iNatAg-mini/evonymus_europaeus","iNatAg-mini/excoecaria_agallocha","iNatAg-mini/fagopyrum_esculentum","iNatAg-mini/fagopyrum_tataricum","iNatAg-mini/fagraea_fragrans","iNatAg-mini/fagus_grandifolia","iNatAg-mini/fagus_sylvatica","iNatAg-mini/faidherbia_albida","iNatAg-mini/faurea_saligna","iNatAg-mini/feijoa_sellowiana","iNatAg-mini/festuca_arundinacea","iNatAg-mini/festuca_gigantea","iNatAg-mini/festuca_idahoensis","iNatAg-mini/festuca_microstachys","iNatAg-mini/festuca_myuros","iNatAg-mini/festuca_ovina","iNatAg-mini/festuca_pratensis","iNatAg-mini/festuca_rubra","iNatAg-mini/festuca_scabra","iNatAg-mini/fibraurea_tinctoria","iNatAg-mini/ficus_abutilifolia","iNatAg-mini/ficus_auriculata","iNatAg-mini/ficus_benghalensis","iNatAg-mini/ficus_carica","iNatAg-mini/ficus_elastica","iNatAg-mini/ficus_glumosa","iNatAg-mini/ficus_macrophylla","iNatAg-mini/ficus_sycomorus","iNatAg-mini/ficus_thonningii","iNatAg-mini/filago_gallica","iNatAg-mini/filipendula_vulgaris","iNatAg-mini/flacourtia_indica","iNatAg-mini/flemingia_macrophylla","iNatAg-mini/flindersia_bourjotiana","iNatAg-mini/flindersia_brayleyana","iNatAg-mini/flindersia_pimenteliana","iNatAg-mini/foeniculum_vulgare","iNatAg-mini/fortunella_hindsii","iNatAg-mini/fortunella_japonica","iNatAg-mini/fortunella_margarita","iNatAg-mini/fragaria_ananassa","iNatAg-mini/fragaria_chiloensis","iNatAg-mini/fragaria_vesca","iNatAg-mini/fragaria_virginiana","iNatAg-mini/frangula_alnus","iNatAg-mini/fraxinus_americana","iNatAg-mini/fraxinus_excelsior","iNatAg-mini/frithia_humilis","iNatAg-mini/fuirena_simplex","iNatAg-mini/fumaria_capreolata","iNatAg-mini/fumaria_officinalis","iNatAg-mini/fumaria_parviflora","iNatAg-mini/gaillardia_pulchella","iNatAg-mini/galactia_marginalis","iNatAg-mini/galactia_striata","iNatAg-mini/galega_officinalis","iNatAg-mini/galega_orientalis","iNatAg-mini/galeopsis_ladanum","iNatAg-mini/galeopsis_tetrahit","iNatAg-mini/galinsoga_quadriradiata","iNatAg-mini/galium_aparine","iNatAg-mini/galium_mollugo","iNatAg-mini/galium_paniculatum","iNatAg-mini/galium_parisiense","iNatAg-mini/galium_saxatile","iNatAg-mini/galium_spurium","iNatAg-mini/galium_tricornutum","iNatAg-mini/galium_verum","iNatAg-mini/garcinia_dulcis","iNatAg-mini/garcinia_mangostana","iNatAg-mini/garcinia_multiflora","iNatAg-mini/garcinia_xanthochymus","iNatAg-mini/garuga_pinnata","iNatAg-mini/gaultheria_procumbens","iNatAg-mini/gaura_biennis","iNatAg-mini/geissois_benthamii","iNatAg-mini/genipa_americana","iNatAg-mini/genista_canariensis","iNatAg-mini/genista_tinctoria","iNatAg-mini/gentiana_acaulis","iNatAg-mini/gentiana_lutea","iNatAg-mini/geranium_carolinianum","iNatAg-mini/geranium_dissectum","iNatAg-mini/geranium_molle","iNatAg-mini/geranium_pratense","iNatAg-mini/geranium_pusillum","iNatAg-mini/geranium_robertianum","iNatAg-mini/girardinia_diversifolia","iNatAg-mini/glechoma_hederacea","iNatAg-mini/glecoma_hederacea","iNatAg-mini/gleditsia_triacanthos","iNatAg-mini/gliricidia_sepium","iNatAg-mini/globularia_vulgaris","iNatAg-mini/glyceria_fluitans","iNatAg-mini/glyceria_septentrionalis","iNatAg-mini/glycine_max","iNatAg-mini/glycyrrhiza_glabra","iNatAg-mini/glycyrrhiza_lepidota","iNatAg-mini/gmelina_arborea","iNatAg-mini/gmelina_leichhardtii","iNatAg-mini/gnaphalium_calviceps","iNatAg-mini/gnaphalium_luteo-album","iNatAg-mini/gnaphalium_luteoalbum","iNatAg-mini/gnaphalium_palustre","iNatAg-mini/gnaphalium_pensylvanicum","iNatAg-mini/gnaphalium_purpureum","iNatAg-mini/gnaphalium_uliginosum","iNatAg-mini/gossypium_barbadense","iNatAg-mini/gossypium_herbaceum","iNatAg-mini/gossypium_hirsutum","iNatAg-mini/grevillea_parallela","iNatAg-mini/grevillea_robusta","iNatAg-mini/grewia_asiatica","iNatAg-mini/grewia_bicolor","iNatAg-mini/grewia_tiliifolia","iNatAg-mini/guaiacum_officinale","iNatAg-mini/guaiacum_sanctum","iNatAg-mini/guazuma_ulmifolia","iNatAg-mini/guizotia_abyssinica","iNatAg-mini/gunnera_tinctoria","iNatAg-mini/gypsophila_paniculata","iNatAg-mini/hagenia_abyssinica","iNatAg-mini/hamamelis_virginiana","iNatAg-mini/hardwickia_binata","iNatAg-mini/harpagophytum_procumbens","iNatAg-mini/harpochloa_falx","iNatAg-mini/harungana_madagascariensis","iNatAg-mini/hedera_helix","iNatAg-mini/hedysarum_coronarium","iNatAg-mini/hedysarum_pallidum","iNatAg-mini/hedysarum_spinosissimum","iNatAg-mini/helenium_autumnale","iNatAg-mini/helenium_tenuifolium","iNatAg-mini/helianthus_annus","iNatAg-mini/helianthus_annuus","iNatAg-mini/helianthus_ciliaris","iNatAg-mini/helianthus_pauciflorus","iNatAg-mini/helianthus_petiolaris","iNatAg-mini/helianthus_tuberosus","iNatAg-mini/helictotrichon_turgidulum","iNatAg-mini/heliotropium_amplexicaule","iNatAg-mini/heliotropium_curassavicum","iNatAg-mini/heliotropium_europaeum","iNatAg-mini/hemarthria_altissima","iNatAg-mini/hemizonia_congesta","iNatAg-mini/heracleum_sphondylium","iNatAg-mini/heritiera_littoralis","iNatAg-mini/heteropogon_contortus","iNatAg-mini/heterotheca_grandiflora","iNatAg-mini/heuchera_mexicana","iNatAg-mini/hevea_brasiliensis","iNatAg-mini/hibiscus_cannabinus","iNatAg-mini/hibiscus_sabdariffa","iNatAg-mini/hibiscus_syriacus","iNatAg-mini/hibiscus_tiliaceus","iNatAg-mini/hibiscus_tilliaceus","iNatAg-mini/hieracium_aurantiacum","iNatAg-mini/hieracium_gronovii","iNatAg-mini/hieracium_lachenalii","iNatAg-mini/hieracium_laevigatum","iNatAg-mini/hieracium_murorum","iNatAg-mini/hieracium_pilosella","iNatAg-mini/hieracium_piloselloides","iNatAg-mini/hieracium_umbellatum","iNatAg-mini/hieracium_venosum","iNatAg-mini/hieracium_vulgatum","iNatAg-mini/hierochloe_odorata","iNatAg-mini/hilaria_jamesii","iNatAg-mini/hilaria_mutica","iNatAg-mini/hippophae_rhamnoides","iNatAg-mini/hippophae_salicifolia","iNatAg-mini/hippuris_vulgaris","iNatAg-mini/holcus_lanatus","iNatAg-mini/holcus_mollis","iNatAg-mini/hopea_odorata","iNatAg-mini/hopea_parviflora","iNatAg-mini/hopea_wightiana","iNatAg-mini/hordeum_brachyantherum","iNatAg-mini/hordeum_brevisubulatum","iNatAg-mini/hordeum_bulbosum","iNatAg-mini/hordeum_distichon","iNatAg-mini/hordeum_geniculatum","iNatAg-mini/hordeum_jubatum","iNatAg-mini/hordeum_murinum","iNatAg-mini/hordeum_vulgare","iNatAg-mini/houstonia_caerulea","iNatAg-mini/humulus_lupulus","iNatAg-mini/hydnocarpus_alpina","iNatAg-mini/hydrocotyle_americana","iNatAg-mini/hydrocotyle_mexicana","iNatAg-mini/hydrocotyle_ranunculoides","iNatAg-mini/hydrocotyle_sibthorpioides","iNatAg-mini/hydrocotyle_umbellata","iNatAg-mini/hydrocotyle_verticillata","iNatAg-mini/hydrolea_uniflora","iNatAg-mini/hylocereus_undatus","iNatAg-mini/hymenaea_courbaril","iNatAg-mini/hymenopappus_scabiosaeus","iNatAg-mini/hymenoxys_odorata","iNatAg-mini/hyosciamus_niger","iNatAg-mini/hyoscyamus_niger","iNatAg-mini/hyparrhenia_dregeana","iNatAg-mini/hyparrhenia_filipendula","iNatAg-mini/hyparrhenia_hirta","iNatAg-mini/hyparrhenia_rufa","iNatAg-mini/hypericum_canadense","iNatAg-mini/hypericum_canariense","iNatAg-mini/hypericum_mutilum","iNatAg-mini/hypericum_mutlium","iNatAg-mini/hypericum_perforatum","iNatAg-mini/hypericum_prolificum","iNatAg-mini/hypericum_punctatum","iNatAg-mini/hyperthelia_dissoluta","iNatAg-mini/hyphaene_compressa","iNatAg-mini/hyphaene_thebaica","iNatAg-mini/hypochaeris_glabra","iNatAg-mini/hypochaeris_radicata","iNatAg-mini/hypoxis_hemerocallidea","iNatAg-mini/hyssopus_officinalis","iNatAg-mini/ilex_aquifolium","iNatAg-mini/ilex_dipyrena","iNatAg-mini/ilex_paraguariensis","iNatAg-mini/impatiens_balsamina","iNatAg-mini/impatiens_parviflora","iNatAg-mini/imperata_brevifolia","iNatAg-mini/imperata_cylindrica","iNatAg-mini/indigofera_arrecta","iNatAg-mini/indigofera_hirsuta","iNatAg-mini/indigofera_oblongifolia","iNatAg-mini/indigofera_schimperi","iNatAg-mini/indigofera_spicata","iNatAg-mini/indigofera_suffruticosa","iNatAg-mini/indigofera_tinctoria","iNatAg-mini/inga_edulis","iNatAg-mini/inga_vera","iNatAg-mini/intsia_bijuga","iNatAg-mini/inula_britannica","iNatAg-mini/inula_helenium","iNatAg-mini/ipomoea_alba","iNatAg-mini/ipomoea_aquatica","iNatAg-mini/ipomoea_batatas","iNatAg-mini/ipomoea_coccinea","iNatAg-mini/ipomoea_hederifolia","iNatAg-mini/ipomoea_lacunosa","iNatAg-mini/ipomoea_quamoclit","iNatAg-mini/ipomoea_tricolor","iNatAg-mini/ipomoea_triloba","iNatAg-mini/ipomoea_turbinata","iNatAg-mini/iris_germanica","iNatAg-mini/iris_missouriensis","iNatAg-mini/iris_pseudacorus","iNatAg-mini/iris_pseudoacorus","iNatAg-mini/iris_virginica","iNatAg-mini/isatis_tinctoria","iNatAg-mini/ischaemum_ciliare","iNatAg-mini/ischaemum_muticum","iNatAg-mini/ischaemum_rugosum","iNatAg-mini/iseilema_vaginiflorum","iNatAg-mini/iva_angustifolia","iNatAg-mini/iva_annua","iNatAg-mini/jacaranda_copaia","iNatAg-mini/jacaranda_mimosifolia","iNatAg-mini/jatropha_curcas","iNatAg-mini/jatropha_gossypifolia","iNatAg-mini/jatropha_gossypiifolia","iNatAg-mini/juglans_hindsii","iNatAg-mini/juglans_nigra","iNatAg-mini/juglans_regia","iNatAg-mini/juncus_bufonius","iNatAg-mini/juncus_effusus","iNatAg-mini/juniperus_communis","iNatAg-mini/juniperus_occidentalis","iNatAg-mini/juniperus_pinchotii","iNatAg-mini/juniperus_procera","iNatAg-mini/juniperus_sabina","iNatAg-mini/justicia_adhatoda","iNatAg-mini/kalmia_angustifolia","iNatAg-mini/khaya_anthotheca","iNatAg-mini/khaya_senegalensis","iNatAg-mini/kigelia_pinnata","iNatAg-mini/kyllinga_gracillima","iNatAg-mini/kyllinga_odorata","iNatAg-mini/lablab_purpureus","iNatAg-mini/lactuca_canadensis","iNatAg-mini/lactuca_indica","iNatAg-mini/lactuca_saligna","iNatAg-mini/lactuca_serriola","iNatAg-mini/lactuca_virosa","iNatAg-mini/lagascea_mollis","iNatAg-mini/lagenaria_siceraria","iNatAg-mini/lagerstroemia_flos-reginae","iNatAg-mini/lagerstroemia_lanceolata","iNatAg-mini/lagerstroemia_parviflora","iNatAg-mini/laguncularia_racemosa","iNatAg-mini/lamium_album","iNatAg-mini/lamium_amplexicaule","iNatAg-mini/lamium_maculatum","iNatAg-mini/lamium_purpureum","iNatAg-mini/lannea_coromandelica","iNatAg-mini/lannea_edulis","iNatAg-mini/lansium_domesticum","iNatAg-mini/lantana_camara","iNatAg-mini/lapsana_communis","iNatAg-mini/larix_decidua","iNatAg-mini/larrea_divaricata","iNatAg-mini/lathyrus_angulatus","iNatAg-mini/lathyrus_cicera","iNatAg-mini/lathyrus_hirsutus","iNatAg-mini/lathyrus_latifolius","iNatAg-mini/lathyrus_ochrus","iNatAg-mini/lathyrus_odoratus","iNatAg-mini/lathyrus_palustris","iNatAg-mini/lathyrus_pratensis","iNatAg-mini/lathyrus_pubescens","iNatAg-mini/lathyrus_sativus","iNatAg-mini/lathyrus_tingitanus","iNatAg-mini/lathyrus_tuberosus","iNatAg-mini/laurus_nobilis","iNatAg-mini/lavandula_angustifolia","iNatAg-mini/lavandula_dentata","iNatAg-mini/lavandula_latifolia","iNatAg-mini/lawsonia_inermis","iNatAg-mini/ledum_groenlandicum","iNatAg-mini/leersia_hexandra","iNatAg-mini/leersia_lenticularis","iNatAg-mini/lemna_aequinoctialis","iNatAg-mini/lemna_gibba","iNatAg-mini/lemna_minor","iNatAg-mini/lemna_trisulca","iNatAg-mini/lens_culinaris","iNatAg-mini/leontodon_autumnale","iNatAg-mini/leontodon_autumnalis","iNatAg-mini/leontodon_hirtus","iNatAg-mini/leontodon_saxatilis","iNatAg-mini/leontopodium_alpinum","iNatAg-mini/leonurus_cardiaca","iNatAg-mini/leonurus_marrubiastrum","iNatAg-mini/leonurus_sibericus","iNatAg-mini/leonurus_sibiricus","iNatAg-mini/lepidium_austrinum","iNatAg-mini/lepidium_chalepense","iNatAg-mini/lepidium_didymum","iNatAg-mini/lepidium_draba","iNatAg-mini/lepidium_lasiocarpum","iNatAg-mini/lepidium_latifolium","iNatAg-mini/lepidium_perfoliatum","iNatAg-mini/lepidium_ruderale","iNatAg-mini/lepidium_sativum","iNatAg-mini/lepidium_virginicum","iNatAg-mini/leptochloa_chinensis","iNatAg-mini/leptochloa_fusca","iNatAg-mini/leptochloa_nealleyi","iNatAg-mini/lespedeza_cuneata","iNatAg-mini/lespedeza_striata","iNatAg-mini/lesquerella_fendleri","iNatAg-mini/leucaena_diversifolia","iNatAg-mini/leucaena_leucocephala","iNatAg-mini/leucanthemum_vulgare","iNatAg-mini/leucojum_aestivum","iNatAg-mini/levisticum_officinale","iNatAg-mini/liatris_mucronata","iNatAg-mini/licuala_ramsayi","iNatAg-mini/ligustrum_ovalifolium","iNatAg-mini/ligustrum_vulgare","iNatAg-mini/lilium_canadense","iNatAg-mini/lilium_candidum","iNatAg-mini/limnanthes_alba","iNatAg-mini/limnophila_sessiliflora","iNatAg-mini/linaria_vulgaris","iNatAg-mini/lindernia_grandiflora","iNatAg-mini/linum_usitatissimum","iNatAg-mini/lippia_alba","iNatAg-mini/liquidambar_styraciflua","iNatAg-mini/liriodendron_tulipifera","iNatAg-mini/litchi_chinensis","iNatAg-mini/lithospermum_arvense","iNatAg-mini/lithospermum_officinale","iNatAg-mini/livistona_australis","iNatAg-mini/lobelia_inflata","iNatAg-mini/lobelia_siphilitica","iNatAg-mini/lolium_multiflorum","iNatAg-mini/lolium_perenne","iNatAg-mini/lolium_rigidum","iNatAg-mini/lolium_temulentum","iNatAg-mini/lonchocarpus_laxiflorus","iNatAg-mini/lonicera_caerulea","iNatAg-mini/lonicera_caprifolium","iNatAg-mini/lonicera_periclymenum","iNatAg-mini/lonicera_sempervirens","iNatAg-mini/lonicera_tartarica","iNatAg-mini/lonicera_tatarica","iNatAg-mini/lonicera_xylosteum","iNatAg-mini/lophostemon_suaveolens","iNatAg-mini/lotus_corniculatus","iNatAg-mini/lotus_creticus","iNatAg-mini/lotus_edulis","iNatAg-mini/lotus_halophilus","iNatAg-mini/lotus_parviflorus","iNatAg-mini/lotus_tenuis","iNatAg-mini/lotus_uliginosus","iNatAg-mini/loudetia_simplex","iNatAg-mini/ludwigia_adscendens","iNatAg-mini/ludwigia_alternifolia","iNatAg-mini/luffa_acutangula","iNatAg-mini/luffa_cylindrica","iNatAg-mini/lumnitzera_littorea","iNatAg-mini/lumnitzera_racemosa","iNatAg-mini/lunaria_annua","iNatAg-mini/lupinus_albus","iNatAg-mini/lupinus_angustifolius","iNatAg-mini/lupinus_arboreus","iNatAg-mini/lupinus_cosentinii","iNatAg-mini/lupinus_luteus","iNatAg-mini/lupinus_mutabilis","iNatAg-mini/lupinus_pilosus","iNatAg-mini/lychnis_chalcedonica","iNatAg-mini/lychnis_flos-cuculi","iNatAg-mini/lychnis_viscaria","iNatAg-mini/lycium_barbarum","iNatAg-mini/lycium_berlandieri","iNatAg-mini/lycium_chinense","iNatAg-mini/lycium_ferocissimum","iNatAg-mini/lycium_halimifolium","iNatAg-mini/lycopersicon_esculentum","iNatAg-mini/lycopodium_clavatum","iNatAg-mini/lycopus_europaeus","iNatAg-mini/lysimachia_ciliata","iNatAg-mini/lysimachia_nummularia","iNatAg-mini/lysimachia_punctata","iNatAg-mini/lysimachia_vulgaris","iNatAg-mini/lythrum_hyssopifolia","iNatAg-mini/lythrum_salicaria","iNatAg-mini/lythrum_virgatum","iNatAg-mini/macadamia_integrifolia","iNatAg-mini/macadamia_tetraphylla","iNatAg-mini/macaranga_tanarius","iNatAg-mini/macroptilium_atropurpureum","iNatAg-mini/macroptilium_erythroloma","iNatAg-mini/macroptilium_gracile","iNatAg-mini/macroptilium_lathyroides","iNatAg-mini/macroptilium_longepedunculatum","iNatAg-mini/macrotyloma_axillare","iNatAg-mini/maesopsis_eminii","iNatAg-mini/maianthemum_canadense","iNatAg-mini/majorana_hortensis","iNatAg-mini/malachra_alceifolia","iNatAg-mini/mallotus_philippensis","iNatAg-mini/malpighia_glabra","iNatAg-mini/malus_domestica","iNatAg-mini/malus_sylvestris","iNatAg-mini/malva_alcea","iNatAg-mini/malva_moschata","iNatAg-mini/malva_nicaeensis","iNatAg-mini/malva_parviflora","iNatAg-mini/malva_pusilla","iNatAg-mini/malva_rotundifolia","iNatAg-mini/malva_silvestris","iNatAg-mini/malva_sylvestris","iNatAg-mini/mammea_americana","iNatAg-mini/mangifera_indica","iNatAg-mini/manihot_esculenta","iNatAg-mini/manilkara_zapota","iNatAg-mini/maranta_arundinacea","iNatAg-mini/markhamia_lutea","iNatAg-mini/marrubium_vulgare","iNatAg-mini/marsilea_quadrifolia","iNatAg-mini/matricaria_chamomila","iNatAg-mini/matricaria_chamomilla","iNatAg-mini/matricaria_discoidea","iNatAg-mini/matricaria_perforata","iNatAg-mini/matricaria_recutita","iNatAg-mini/mauritia_flexuosa","iNatAg-mini/mayaca_fluviatilis","iNatAg-mini/medicago_arabica","iNatAg-mini/medicago_falcata","iNatAg-mini/medicago_intertexta","iNatAg-mini/medicago_laciniata","iNatAg-mini/medicago_littoralis","iNatAg-mini/medicago_lupulina","iNatAg-mini/medicago_marina","iNatAg-mini/medicago_minima","iNatAg-mini/medicago_orbicularis","iNatAg-mini/medicago_polymorpha","iNatAg-mini/medicago_rigidula","iNatAg-mini/medicago_rugosa","iNatAg-mini/medicago_sativa","iNatAg-mini/medicago_scutellata","iNatAg-mini/medicago_tornata","iNatAg-mini/medicago_truncatula","iNatAg-mini/medicago_turbinata","iNatAg-mini/melaleuca_bracteata","iNatAg-mini/melaleuca_cajuputi","iNatAg-mini/melaleuca_dealbata","iNatAg-mini/melaleuca_lanceolata","iNatAg-mini/melaleuca_leucadendron","iNatAg-mini/melaleuca_nervosa","iNatAg-mini/melaleuca_quinquenervia","iNatAg-mini/melaleuca_viridiflora","iNatAg-mini/melampyrum_lineare","iNatAg-mini/melastoma_malabathricum","iNatAg-mini/melastoma_melabathricum","iNatAg-mini/melia_azedarach","iNatAg-mini/melica_decumbens","iNatAg-mini/melicoccus_bijugatus","iNatAg-mini/melilotus_albus","iNatAg-mini/melilotus_indica","iNatAg-mini/melilotus_officinalis","iNatAg-mini/melilotus_suaveolens","iNatAg-mini/melinis_minutiflora","iNatAg-mini/melissa_officinalis","iNatAg-mini/melochia_corchorifolia","iNatAg-mini/melothria_pendula","iNatAg-mini/mentha_arvensis","iNatAg-mini/mentha_longifolia","iNatAg-mini/mentha_piperita","iNatAg-mini/mentha_pulegium","iNatAg-mini/mentha_rotundifolia","iNatAg-mini/mentha_spicata","iNatAg-mini/menyanthes_trifoliata","iNatAg-mini/mercurialis_annua","iNatAg-mini/mesembryanthemum_cristallinum","iNatAg-mini/mesembryanthemum_noctiflorum","iNatAg-mini/mespilus_germanica","iNatAg-mini/mesua_ferrea","iNatAg-mini/metroxylon_sagu","iNatAg-mini/michelia_champaca","iNatAg-mini/microstegium_ciliatum","iNatAg-mini/miliusa_velutina","iNatAg-mini/mimosa_casta","iNatAg-mini/mimosa_dutrae","iNatAg-mini/mimosa_pigra","iNatAg-mini/mimosa_pudica","iNatAg-mini/mirabilis_jalapa","iNatAg-mini/molinia_caerulea","iNatAg-mini/mollugo_verticillata","iNatAg-mini/momordica_charantia","iNatAg-mini/momordica_cochinchinensis","iNatAg-mini/monarda_fistulosa","iNatAg-mini/monarda_punctata","iNatAg-mini/monochoria_hastata","iNatAg-mini/monochoria_vaginalis","iNatAg-mini/monocymbium_ceresiiforme","iNatAg-mini/monstera_deliciosa","iNatAg-mini/montanoa_hibiscifolia","iNatAg-mini/morinda_citrifolia","iNatAg-mini/moringa_oleifera","iNatAg-mini/morus_alba","iNatAg-mini/morus_nigra","iNatAg-mini/morus_rubra","iNatAg-mini/mucuna_pruriens","iNatAg-mini/muntingia_calabura","iNatAg-mini/murraya_koenigii","iNatAg-mini/musa_acuminata","iNatAg-mini/musa_acuminata_×_balbisiana","iNatAg-mini/musa_balbisiana","iNatAg-mini/musa_sapientium","iNatAg-mini/musanga_cecropioides","iNatAg-mini/muscari_comosum","iNatAg-mini/myosotis_alpestris","iNatAg-mini/myosurus_minimus","iNatAg-mini/myrica_cerifera","iNatAg-mini/myriophyllum_heterophyllum","iNatAg-mini/myriophyllum_implicatum","iNatAg-mini/myriophyllum_sibiricum","iNatAg-mini/myriophyllum_spicatum","iNatAg-mini/myriophyllum_verticillatum","iNatAg-mini/myristica_fragrans","iNatAg-mini/myroxylon_balsamum","iNatAg-mini/myrsine_africana","iNatAg-mini/myrtus_communis","iNatAg-mini/nardus_stricta","iNatAg-mini/nasturtium_officinale","iNatAg-mini/nauclea_orientalis","iNatAg-mini/nelumbo_nucifera","iNatAg-mini/neofabricia_myrtifolia","iNatAg-mini/neoglaziovia_variegata","iNatAg-mini/neonotonia_wightii","iNatAg-mini/nepeta_cataria","iNatAg-mini/nephelium_lappaceum","iNatAg-mini/nephelium_mutabile","iNatAg-mini/nerium_oleander","iNatAg-mini/nicotiana_quadrivalvis","iNatAg-mini/nicotiana_rustica","iNatAg-mini/nicotiana_trigonophylla","iNatAg-mini/nigella_sativa","iNatAg-mini/nothofagus_cunninghamii","iNatAg-mini/nothofagus_moorei","iNatAg-mini/nothoscordum_borbonicum","iNatAg-mini/nuphar_advena","iNatAg-mini/nuphar_lutea","iNatAg-mini/nymphaea_alba","iNatAg-mini/nypa_fruticans","iNatAg-mini/ochroma_pyramidale","iNatAg-mini/ocimum_americanum","iNatAg-mini/ocimum_basilicum","iNatAg-mini/ocimum_tenuiflorum","iNatAg-mini/octomeles_sumatrana","iNatAg-mini/oenanthe_javanica","iNatAg-mini/oenothera_albicaulis","iNatAg-mini/oenothera_biennis","iNatAg-mini/oenothera_parviflora","iNatAg-mini/oenothera_perennis","iNatAg-mini/oldenlandia_corymbosa","iNatAg-mini/olea_africana","iNatAg-mini/olea_capensis","iNatAg-mini/olea_europaea","iNatAg-mini/olea_europea","iNatAg-mini/oncosperma_tigillarium","iNatAg-mini/onobrychis_viciifolia","iNatAg-mini/ononis_alopecuroides","iNatAg-mini/ononis_spinosa","iNatAg-mini/onopordum_acanthium","iNatAg-mini/onopordum_illyricum","iNatAg-mini/onosmodium_discolor","iNatAg-mini/opuntia_ficus-indica","iNatAg-mini/opuntia_leptocaulis","iNatAg-mini/opuntia_polyacantha","iNatAg-mini/opuntia_polycantha","iNatAg-mini/origanum_majorana","iNatAg-mini/origanum_onites","iNatAg-mini/origanum_vulgare","iNatAg-mini/ornithogalum_nutans","iNatAg-mini/ornithogalum_umbellatum","iNatAg-mini/ornithopus_compressus","iNatAg-mini/ornithopus_sativus","iNatAg-mini/orobanche_flava","iNatAg-mini/orobanche_ludoviciana","iNatAg-mini/orobanche_minor","iNatAg-mini/orobanche_ramosa","iNatAg-mini/orontium_aquaticum","iNatAg-mini/orthosiphon_aristatus","iNatAg-mini/oryza_sativa","iNatAg-mini/oryzopsis_holciformis","iNatAg-mini/oryzopsis_miliacea","iNatAg-mini/osmorhiza_berteroi","iNatAg-mini/osmunda_regalis","iNatAg-mini/ottochloa_nodosa","iNatAg-mini/oxalis_acetosella","iNatAg-mini/oxalis_corniculata","iNatAg-mini/oxalis_pes-caprae","iNatAg-mini/oxalis_pescaprae","iNatAg-mini/oxalis_stricta","iNatAg-mini/oxalis_tuberosa","iNatAg-mini/oxytropis_lambertii","iNatAg-mini/pachyrhizus_erosus","iNatAg-mini/paederia_cruddasiana","iNatAg-mini/paederia_foetida","iNatAg-mini/paeonia_officinalis","iNatAg-mini/panax_ginseng","iNatAg-mini/panax_quinquefolius","iNatAg-mini/pangium_edule","iNatAg-mini/panicum_antidotale","iNatAg-mini/panicum_capillare","iNatAg-mini/panicum_coloratum","iNatAg-mini/panicum_ecklonii","iNatAg-mini/panicum_gattingeri","iNatAg-mini/panicum_maximum","iNatAg-mini/panicum_miliaceum","iNatAg-mini/panicum_natalense","iNatAg-mini/panicum_obtusum","iNatAg-mini/panicum_pilosum","iNatAg-mini/panicum_racemosum","iNatAg-mini/panicum_repens","iNatAg-mini/panicum_sphaerocarpon","iNatAg-mini/panicum_trichocladum","iNatAg-mini/panicum_turgidum","iNatAg-mini/panicum_virgatum","iNatAg-mini/papaver_argemone","iNatAg-mini/papaver_bracteatum","iNatAg-mini/papaver_dubium","iNatAg-mini/papaver_rhoeas","iNatAg-mini/papaver_somniferum","iNatAg-mini/parietaria_floridana","iNatAg-mini/parietaria_officinalis","iNatAg-mini/parinari_curatellifolia","iNatAg-mini/parkia_biglobosa","iNatAg-mini/parkia_speciosa","iNatAg-mini/parkinsonia_aculeata","iNatAg-mini/parnassia_palustris","iNatAg-mini/parsonsia_latifolia","iNatAg-mini/parthenium_argentatum","iNatAg-mini/parthenium_hysterophorus","iNatAg-mini/paspalum_conjugatum","iNatAg-mini/paspalum_dilatatum","iNatAg-mini/paspalum_distichum","iNatAg-mini/paspalum_nicorae","iNatAg-mini/paspalum_notatum","iNatAg-mini/paspalum_plicatulum","iNatAg-mini/paspalum_scrobiculatum","iNatAg-mini/paspalum_separatum","iNatAg-mini/paspalum_urvillei","iNatAg-mini/paspalum_vaginatum","iNatAg-mini/passiflora_bicornis","iNatAg-mini/passiflora_edulis","iNatAg-mini/passiflora_foetida","iNatAg-mini/passiflora_incarnata","iNatAg-mini/passiflora_laurifolia","iNatAg-mini/passiflora_ligularis","iNatAg-mini/passiflora_lutea","iNatAg-mini/passiflora_mollissima","iNatAg-mini/passiflora_quadrangularis","iNatAg-mini/passiflora_suberosa","iNatAg-mini/pastinaca_sativa","iNatAg-mini/paullinia_cupana","iNatAg-mini/paulownia_tomentosa","iNatAg-mini/peganum_harmala","iNatAg-mini/pelargonium_graveolens","iNatAg-mini/peltandra_sagittifolia","iNatAg-mini/peltandra_virginica","iNatAg-mini/peltophorum_africanum","iNatAg-mini/peltophorum_pterocarpum","iNatAg-mini/pennisetum_clandestinum","iNatAg-mini/pennisetum_glaucum","iNatAg-mini/pennisetum_macrourum","iNatAg-mini/pennisetum_pedicellatum","iNatAg-mini/pennisetum_polystachyon","iNatAg-mini/pennisetum_purpureum","iNatAg-mini/pennisetum_setaceum","iNatAg-mini/pennisetum_villosum","iNatAg-mini/perilla_frutescens","iNatAg-mini/persea_americana","iNatAg-mini/persicaria_maculosa","iNatAg-mini/persoonia_falcata","iNatAg-mini/petalostigma_pubescens","iNatAg-mini/petasites_albus","iNatAg-mini/petasites_hybridus","iNatAg-mini/petroselinum_crispum","iNatAg-mini/petunia_parviflora","iNatAg-mini/peucedanum_ostruthium","iNatAg-mini/phalaris_aquatica","iNatAg-mini/phalaris_arundinacea","iNatAg-mini/phalaris_arundinaceae","iNatAg-mini/phalaris_brachystachys","iNatAg-mini/phalaris_canariensis","iNatAg-mini/phalaris_caroliniana","iNatAg-mini/phalaris_coerulescens","iNatAg-mini/phalaris_paradoxa","iNatAg-mini/phaseolus_acutifolius","iNatAg-mini/phaseolus_coccineus","iNatAg-mini/phaseolus_lunatus","iNatAg-mini/phaseolus_vulgaris","iNatAg-mini/phleum_alpinum","iNatAg-mini/phleum_pratense","iNatAg-mini/phoenix_dactylifera","iNatAg-mini/phoenix_reclinata","iNatAg-mini/phoenix_sylvestris","iNatAg-mini/phormium_tenax","iNatAg-mini/phragmites_australis","iNatAg-mini/phragmites_communis","iNatAg-mini/phragmites_karka","iNatAg-mini/phyllanthus_niruri","iNatAg-mini/phyllanthus_tenellus","iNatAg-mini/phyllanthus_urinaria","iNatAg-mini/phyllocladus_aspleniifolius","iNatAg-mini/physalis_alkekengi","iNatAg-mini/physalis_angulata","iNatAg-mini/physalis_heterophylla","iNatAg-mini/physalis_lancifolia","iNatAg-mini/physalis_peruviana","iNatAg-mini/physalis_philadelphica","iNatAg-mini/physalis_pubescens","iNatAg-mini/physalis_virginiana","iNatAg-mini/physalis_viscosa","iNatAg-mini/phytolacca_acinosa","iNatAg-mini/phytolacca_americana","iNatAg-mini/phytolacca_dioica","iNatAg-mini/picea_abies","iNatAg-mini/picea_omorica","iNatAg-mini/picea_omorika","iNatAg-mini/picris_echioides","iNatAg-mini/picris_hieracioides","iNatAg-mini/piliostigma_reticulatum","iNatAg-mini/piliostigma_thonningii","iNatAg-mini/pimenta_dioica","iNatAg-mini/pimenta_racemosa","iNatAg-mini/pimpinella_anisum","iNatAg-mini/pimpinella_saxifraga","iNatAg-mini/pinguicula_vulgaris","iNatAg-mini/pinus_ayacahuite","iNatAg-mini/pinus_brutia","iNatAg-mini/pinus_canariensis","iNatAg-mini/pinus_caribaea","iNatAg-mini/pinus_chiapensis","iNatAg-mini/pinus_douglasiana","iNatAg-mini/pinus_durangensis","iNatAg-mini/pinus_greggii","iNatAg-mini/pinus_halepensis","iNatAg-mini/pinus_hartwegii","iNatAg-mini/pinus_kesiya","iNatAg-mini/pinus_merkusii","iNatAg-mini/pinus_montezumae","iNatAg-mini/pinus_mugo","iNatAg-mini/pinus_occidentalis","iNatAg-mini/pinus_oocarpa","iNatAg-mini/pinus_palustris","iNatAg-mini/pinus_patula","iNatAg-mini/pinus_pinaster","iNatAg-mini/pinus_pinea","iNatAg-mini/pinus_ponderosa","iNatAg-mini/pinus_pseudostrobus","iNatAg-mini/pinus_radiata","iNatAg-mini/pinus_roxburghii","iNatAg-mini/pinus_sylvestris","iNatAg-mini/pinus_tabuliformis","iNatAg-mini/pinus_taeda","iNatAg-mini/pinus_teocote","iNatAg-mini/piper_aduncum","iNatAg-mini/piper_betle","iNatAg-mini/piper_longum","iNatAg-mini/piper_methysticum","iNatAg-mini/piper_nigrum","iNatAg-mini/pistacia_atlantica","iNatAg-mini/pistacia_lentiscus","iNatAg-mini/pistacia_vera","iNatAg-mini/pistia_stratiotes","iNatAg-mini/pisum_sativum","iNatAg-mini/pithecellobium_dulce","iNatAg-mini/pittosporum_resiniferum","iNatAg-mini/pittosporum_undulatum","iNatAg-mini/plagiobothrys_canescens","iNatAg-mini/plantago_coronopus","iNatAg-mini/plantago_heterophylla","iNatAg-mini/plantago_indica","iNatAg-mini/plantago_lanceolata","iNatAg-mini/plantago_major","iNatAg-mini/plantago_media","iNatAg-mini/plantago_ovata","iNatAg-mini/plantago_psyllium","iNatAg-mini/plantago_virginica","iNatAg-mini/platanus_orientalis","iNatAg-mini/poa_alpina","iNatAg-mini/poa_annua","iNatAg-mini/poa_bulbosa","iNatAg-mini/poa_compressa","iNatAg-mini/poa_cuspidata","iNatAg-mini/poa_fendleriana","iNatAg-mini/poa_nemoralis","iNatAg-mini/poa_pratensis","iNatAg-mini/poa_trivialis","iNatAg-mini/podocarpus_elatus","iNatAg-mini/podocarpus_falcatus","iNatAg-mini/poeciloneuron_indicum","iNatAg-mini/pogostemon_cablin","iNatAg-mini/polemonium_caeruleum","iNatAg-mini/polemonium_micranthum","iNatAg-mini/polyalthia_fragrans","iNatAg-mini/polycarpon_tetraphyllum","iNatAg-mini/polygonatum_orientale","iNatAg-mini/polygonum_achoreum","iNatAg-mini/polygonum_arenastrum","iNatAg-mini/polygonum_aviculare","iNatAg-mini/polygonum_bistorta","iNatAg-mini/polygonum_convolvulus","iNatAg-mini/polygonum_equisetiforme","iNatAg-mini/polygonum_erectum","iNatAg-mini/polygonum_hydropiper","iNatAg-mini/polygonum_hydropiperoides","iNatAg-mini/polygonum_lapathifolium","iNatAg-mini/polygonum_orientale","iNatAg-mini/polygonum_pensylvanicum","iNatAg-mini/polygonum_perfoliatum","iNatAg-mini/polygonum_persicaria","iNatAg-mini/polygonum_punctatum","iNatAg-mini/polygonum_ramosissimum","iNatAg-mini/polygonum_scandens","iNatAg-mini/polymnia_sonchifolia","iNatAg-mini/polypodium_vulgare","iNatAg-mini/polypogon_interruptus","iNatAg-mini/polypremum_procumbens","iNatAg-mini/polyscias_fulva","iNatAg-mini/polytrichum_commune","iNatAg-mini/pongamia_pinnata","iNatAg-mini/pontederia_cordata","iNatAg-mini/pontederia_rotundifolia","iNatAg-mini/populus_balsamifera","iNatAg-mini/populus_ciliata","iNatAg-mini/populus_deltoides","iNatAg-mini/populus_euphratica","iNatAg-mini/populus_simonii","iNatAg-mini/portulaca_oleracea","iNatAg-mini/portulaca_pilosa","iNatAg-mini/portulaca_pilosa_pilosa","iNatAg-mini/portulaca_quadrifida","iNatAg-mini/potamogeton_diversifolius","iNatAg-mini/potamogeton_epihydrus","iNatAg-mini/potamogeton_filiformis","iNatAg-mini/potamogeton_foliosus","iNatAg-mini/potamogeton_friesii","iNatAg-mini/potamogeton_gramineus","iNatAg-mini/potamogeton_illinoensis","iNatAg-mini/potamogeton_natans","iNatAg-mini/potamogeton_nodosus","iNatAg-mini/potamogeton_pectinatus","iNatAg-mini/potamogeton_praelongus","iNatAg-mini/potamogeton_pusillus","iNatAg-mini/potamogeton_zosteriformis","iNatAg-mini/potentilla_anserina","iNatAg-mini/potentilla_argentea","iNatAg-mini/potentilla_erecta","iNatAg-mini/potentilla_fruticosa","iNatAg-mini/potentilla_intermedia","iNatAg-mini/potentilla_norvegica","iNatAg-mini/potentilla_norvegicae","iNatAg-mini/potentilla_recta","iNatAg-mini/potentilla_reptans","iNatAg-mini/potentilla_tridentata","iNatAg-mini/poterium_sanguisorba","iNatAg-mini/pouteria_campechiana","iNatAg-mini/pouteria_lucuma","iNatAg-mini/pouteria_sapota","iNatAg-mini/prasophyllum_elatum","iNatAg-mini/primula_veris","iNatAg-mini/proserpinaca_palustris","iNatAg-mini/proserpinaca_pectinata","iNatAg-mini/prosopis_affinis","iNatAg-mini/prosopis_africana","iNatAg-mini/prosopis_alba","iNatAg-mini/prosopis_chilensis","iNatAg-mini/prosopis_cineraria","iNatAg-mini/prosopis_glandulosa","iNatAg-mini/prosopis_juliflora","iNatAg-mini/prosopis_nigra","iNatAg-mini/prosopis_pallida","iNatAg-mini/prosopis_tamarugo","iNatAg-mini/prosopis_velutina","iNatAg-mini/prunella_vulgaris","iNatAg-mini/prunus_africana","iNatAg-mini/prunus_amygdalus","iNatAg-mini/prunus_armeniaca","iNatAg-mini/prunus_avium","iNatAg-mini/prunus_capuli","iNatAg-mini/prunus_cerasus","iNatAg-mini/prunus_domestica","iNatAg-mini/prunus_laurocerasus","iNatAg-mini/prunus_mahaleb","iNatAg-mini/prunus_mume","iNatAg-mini/prunus_padus","iNatAg-mini/prunus_pensylvanica","iNatAg-mini/prunus_persica","iNatAg-mini/prunus_salicina","iNatAg-mini/prunus_spinosa","iNatAg-mini/prunus_virginiana","iNatAg-mini/psathyrostachys_juncea","iNatAg-mini/psidium_cattleianum","iNatAg-mini/psidium_friedrichsthalianum","iNatAg-mini/psidium_guajava","iNatAg-mini/psophocarpus_tetragonolobus","iNatAg-mini/psoralea_repens","iNatAg-mini/ptelea_trifoliata","iNatAg-mini/pterocarpus_angolensis","iNatAg-mini/pterocarpus_dalbergioides","iNatAg-mini/pterocarpus_erinaceus","iNatAg-mini/pterocarpus_indicus","iNatAg-mini/pterocarpus_lucens","iNatAg-mini/pterocarpus_macrocarpus","iNatAg-mini/pterocarpus_marsupium","iNatAg-mini/pterocarpus_santalinoides","iNatAg-mini/pterocarpus_santalinus","iNatAg-mini/pueraria_lobata","iNatAg-mini/pueraria_phaseoloides","iNatAg-mini/pulmonaria_officinalis","iNatAg-mini/punica_granatum","iNatAg-mini/pycnanthus_angolensis","iNatAg-mini/pyrola_rotundifolia","iNatAg-mini/pyrus_communis","iNatAg-mini/pyrus_pyrifolia","iNatAg-mini/quercus_agrifolia","iNatAg-mini/quercus_alba","iNatAg-mini/quercus_bicolor","iNatAg-mini/quercus_chrysolepis","iNatAg-mini/quercus_dumosa","iNatAg-mini/quercus_fusiformis","iNatAg-mini/quercus_ilex","iNatAg-mini/quercus_incana","iNatAg-mini/quercus_lanata","iNatAg-mini/quercus_nigra","iNatAg-mini/quercus_phellos","iNatAg-mini/quercus_robur","iNatAg-mini/quercus_semecarpifolia","iNatAg-mini/quercus_suber","iNatAg-mini/quercus_virginiana","iNatAg-mini/quisqualis_indica","iNatAg-mini/ranunculus_abortivus","iNatAg-mini/ranunculus_acris","iNatAg-mini/ranunculus_arbortivus","iNatAg-mini/ranunculus_arvensis","iNatAg-mini/ranunculus_bulbosus","iNatAg-mini/ranunculus_californicus","iNatAg-mini/ranunculus_cymbalaria","iNatAg-mini/ranunculus_ficaria","iNatAg-mini/ranunculus_flabellaris","iNatAg-mini/ranunculus_muricatulus","iNatAg-mini/ranunculus_muricatus","iNatAg-mini/ranunculus_occidentalis","iNatAg-mini/ranunculus_orthorhynchus","iNatAg-mini/ranunculus_parviflorus","iNatAg-mini/ranunculus_sceleratus","iNatAg-mini/ranunculus_testiculatus","iNatAg-mini/ranunculus_trichophyllus","iNatAg-mini/raphanus_raphanistrum","iNatAg-mini/raphanus_sativus","iNatAg-mini/rauvolfia_caffra","iNatAg-mini/rauvolfia_serpentina","iNatAg-mini/reseda_alba","iNatAg-mini/reseda_lutea","iNatAg-mini/retama_monosperma","iNatAg-mini/rhamnus_cathartica","iNatAg-mini/rhamnus_prinoides","iNatAg-mini/rheum_palmatum","iNatAg-mini/rheum_rhaponticum","iNatAg-mini/rhigozum_trichotomum","iNatAg-mini/rhinanthus_crista-galli","iNatAg-mini/rhinanthus_minor","iNatAg-mini/rhizophora_mangle","iNatAg-mini/rhizophora_mucronata","iNatAg-mini/rhizophora_stylosa","iNatAg-mini/rhodiola_rosea","iNatAg-mini/rhododendron_ferrugineum","iNatAg-mini/rhus_copallinum","iNatAg-mini/rhus_glabra","iNatAg-mini/rhus_typhina","iNatAg-mini/rhynchosia_minima","iNatAg-mini/rhynchosia_senna","iNatAg-mini/rhynchosia_sublobata","iNatAg-mini/ribes_hirtellum","iNatAg-mini/ribes_nigrum","iNatAg-mini/ribes_rubrum","iNatAg-mini/ribes_uva-crispa","iNatAg-mini/ribes_viscosissimum","iNatAg-mini/richardia_brasiliensis","iNatAg-mini/richardia_scabra","iNatAg-mini/ricinus_communis","iNatAg-mini/ricinus_comunis","iNatAg-mini/rivina_humilis","iNatAg-mini/robinia_pseudoacacia","iNatAg-mini/roemeria_refracta","iNatAg-mini/rosa_canina","iNatAg-mini/rosa_cinnamomea","iNatAg-mini/rosa_eglanteria","iNatAg-mini/rosa_pendulina","iNatAg-mini/rosa_pimpinellifolia","iNatAg-mini/rosa_rubiginosa","iNatAg-mini/rosa_spinosissima","iNatAg-mini/roseodendron_donnell-smithii","iNatAg-mini/rosmarinus_officinalis","iNatAg-mini/rubia_tinctorum","iNatAg-mini/rubus_ellipticus","iNatAg-mini/rubus_fructicosus","iNatAg-mini/rubus_fruticosus","iNatAg-mini/rubus_hispidus","iNatAg-mini/rubus_idaeus","iNatAg-mini/rubus_moluccanus","iNatAg-mini/rubus_occidentalis","iNatAg-mini/rubus_pensilvanicus","iNatAg-mini/rudbeckia_amplexicaulis","iNatAg-mini/rudbeckia_hirta","iNatAg-mini/rudbeckia_laciniata","iNatAg-mini/rudbeckia_triloba","iNatAg-mini/rumex_acetosa","iNatAg-mini/rumex_acetosella","iNatAg-mini/rumex_aquaticus","iNatAg-mini/rumex_crispus","iNatAg-mini/rumex_dentatus","iNatAg-mini/rumex_hymenosepalus","iNatAg-mini/rumex_longifolius","iNatAg-mini/rumex_maritimus","iNatAg-mini/rumex_obtusifolius","iNatAg-mini/rumex_patienta","iNatAg-mini/rumex_patientia","iNatAg-mini/rumex_pseudonatronatus","iNatAg-mini/rumex_pulcher","iNatAg-mini/rumex_verticillatus","iNatAg-mini/ruppia_maritima","iNatAg-mini/ruscus_aculeatus","iNatAg-mini/ruta_graveolens","iNatAg-mini/saccharum_officinarum","iNatAg-mini/saccharum_sinense","iNatAg-mini/saccharum_spontaneum","iNatAg-mini/sacorstemma_cynanchoides","iNatAg-mini/sagina_procumbens","iNatAg-mini/sagittaria_kurziana","iNatAg-mini/sagittaria_lancifolia","iNatAg-mini/sagittaria_latifolia","iNatAg-mini/sagittaria_sagittifolia","iNatAg-mini/salacca_wallichiana","iNatAg-mini/salacca_zalacca","iNatAg-mini/salicornia_bigelovii","iNatAg-mini/salix_alba","iNatAg-mini/salix_caprea","iNatAg-mini/salix_laevigata","iNatAg-mini/salix_pentandra","iNatAg-mini/salix_viminalis","iNatAg-mini/salsola_kali","iNatAg-mini/salsola_tragus","iNatAg-mini/salsola_vermiculata","iNatAg-mini/salvadora_persica","iNatAg-mini/salvia_lyrata","iNatAg-mini/salvia_officinalis","iNatAg-mini/salvia_sclarea","iNatAg-mini/salvia_verticillata","iNatAg-mini/salvinia_auriculata","iNatAg-mini/samanea_saman","iNatAg-mini/sambucus_canadensis","iNatAg-mini/sambucus_canadiensis","iNatAg-mini/sambucus_cerulea","iNatAg-mini/sambucus_ebulus","iNatAg-mini/sambucus_nigra","iNatAg-mini/sambucus_racemosa","iNatAg-mini/samolus_parviflorus","iNatAg-mini/samolus_valerandi","iNatAg-mini/sanguisorba_minor","iNatAg-mini/sanguisorba_officinalis","iNatAg-mini/sanicula_europaea","iNatAg-mini/santalum_acuminatum","iNatAg-mini/santalum_album","iNatAg-mini/santolina_chamaecyparissus","iNatAg-mini/sapindus_emarginatus","iNatAg-mini/sapindus_saponaria","iNatAg-mini/sapium_sebiferum","iNatAg-mini/saponaria_officinalis","iNatAg-mini/sarcostemma_cynanchoides","iNatAg-mini/satureja_hortensis","iNatAg-mini/satureja_montana","iNatAg-mini/sauropus_androgynus","iNatAg-mini/saururus_cernuus","iNatAg-mini/scandix_pecten-veneris","iNatAg-mini/schima_wallichii","iNatAg-mini/schinus_molle","iNatAg-mini/schinus_terebinthifolia","iNatAg-mini/schinus_terebinthifolius","iNatAg-mini/schismus_arabicus","iNatAg-mini/schizolobium_parahyba","iNatAg-mini/schizomeria_ovata","iNatAg-mini/schleichera_oleosa","iNatAg-mini/scirpus_lacustris","iNatAg-mini/scleranthus_annuus","iNatAg-mini/sclerocarya_caffra","iNatAg-mini/scoparia_dulcis","iNatAg-mini/scorzonera_laciniata","iNatAg-mini/scrophularia_lanceolata","iNatAg-mini/searsia_angustifolia","iNatAg-mini/secale_cereale","iNatAg-mini/secale_montanum","iNatAg-mini/sechium_edule","iNatAg-mini/securidaca_longepedunculata","iNatAg-mini/securidaca_longipedunculata","iNatAg-mini/sedum_acre","iNatAg-mini/sedum_telephium","iNatAg-mini/sehima_nervosum","iNatAg-mini/sempervivum_arachnoideum","iNatAg-mini/sempervivum_tectorum","iNatAg-mini/senecio_elegans","iNatAg-mini/senecio_jacobaea","iNatAg-mini/senecio_madagascariensis","iNatAg-mini/senecio_plattensis","iNatAg-mini/senecio_squalidus","iNatAg-mini/senecio_sylvaticus","iNatAg-mini/senecio_viscosus","iNatAg-mini/senecio_vulgaris","iNatAg-mini/senna_spectabilis","iNatAg-mini/serenoa_repens","iNatAg-mini/sesamum_indicum","iNatAg-mini/sesbania_bispinosa","iNatAg-mini/sesbania_cannabina","iNatAg-mini/sesbania_exaltata","iNatAg-mini/sesbania_formosa","iNatAg-mini/sesbania_grandiflora","iNatAg-mini/sesbania_pachycarpa","iNatAg-mini/sesbania_sesban","iNatAg-mini/setaria_incrassata","iNatAg-mini/setaria_italica","iNatAg-mini/setaria_lindenbergiana","iNatAg-mini/setaria_pumila","iNatAg-mini/seymeria_pectinata","iNatAg-mini/shorea_robusta","iNatAg-mini/shorea_talura","iNatAg-mini/sicyos_angulatus","iNatAg-mini/sida_angustifolia","iNatAg-mini/sida_cordifolia","iNatAg-mini/sida_spinosa","iNatAg-mini/silene_antirrhina","iNatAg-mini/silene_armeria","iNatAg-mini/silene_conica","iNatAg-mini/silene_conoidea","iNatAg-mini/silene_gallica","iNatAg-mini/silene_noctiflora","iNatAg-mini/silene_pendula","iNatAg-mini/silphium_asperrimum","iNatAg-mini/silphium_integrifolium","iNatAg-mini/silphium_laciniatum","iNatAg-mini/silybum_marianum","iNatAg-mini/simarouba_glauca","iNatAg-mini/simmondsia_chinensis","iNatAg-mini/simsia_auriculata","iNatAg-mini/sinapis_alba","iNatAg-mini/sinapis_arvensis","iNatAg-mini/sinapis_incana","iNatAg-mini/siphonochilus_aethiopicus","iNatAg-mini/sisymbrium_altissimum","iNatAg-mini/sisymbrium_erysimoides","iNatAg-mini/sisymbrium_irio","iNatAg-mini/sisymbrium_officinale","iNatAg-mini/sisymbrium_orientale","iNatAg-mini/sisymbrium_sophia","iNatAg-mini/sisyrinchium_montanum","iNatAg-mini/sloanea_woollsii","iNatAg-mini/smilax_aspera","iNatAg-mini/smilax_bona-nox","iNatAg-mini/smilax_laurifolia","iNatAg-mini/smilax_rotundifolia","iNatAg-mini/solanum_aethiopicum","iNatAg-mini/solanum_americanum","iNatAg-mini/solanum_capsicoides","iNatAg-mini/solanum_carolinense","iNatAg-mini/solanum_coriaceum","iNatAg-mini/solanum_dimidiatum","iNatAg-mini/solanum_diphyllum","iNatAg-mini/solanum_dulcamara","iNatAg-mini/solanum_elaeagnifolium","iNatAg-mini/solanum_eleagnifolium","iNatAg-mini/solanum_ellipticum","iNatAg-mini/solanum_ferox","iNatAg-mini/solanum_heterodoxum","iNatAg-mini/solanum_incanum","iNatAg-mini/solanum_jamaicense","iNatAg-mini/solanum_lanceolatum","iNatAg-mini/solanum_macrocarpon","iNatAg-mini/solanum_mammosum","iNatAg-mini/solanum_marginatum","iNatAg-mini/solanum_mauritianum","iNatAg-mini/solanum_melongena","iNatAg-mini/solanum_muricatum","iNatAg-mini/solanum_nigrum","iNatAg-mini/solanum_physalifolium","iNatAg-mini/solanum_pseudo-capsicum","iNatAg-mini/solanum_pseudocapsicum","iNatAg-mini/solanum_quitoense","iNatAg-mini/solanum_sisymbrifolium","iNatAg-mini/solanum_sisymbriifolium","iNatAg-mini/solanum_tampicense","iNatAg-mini/solanum_torvum","iNatAg-mini/solanum_tuberosum","iNatAg-mini/solanum_violaceum","iNatAg-mini/soldanella_alpina","iNatAg-mini/solidago_californica","iNatAg-mini/solidago_canadensis","iNatAg-mini/solidago_fistulosa","iNatAg-mini/solidago_missouriensis","iNatAg-mini/solidago_nemoralis","iNatAg-mini/solidago_rigida","iNatAg-mini/solidago_sempervirens","iNatAg-mini/solidago_virgaurea","iNatAg-mini/sonchus_arvensis","iNatAg-mini/sonchus_oleraceus","iNatAg-mini/sonchus_palustris","iNatAg-mini/sonneratia_apetala","iNatAg-mini/sonneratia_caseolaris","iNatAg-mini/sorbus_aucuparia","iNatAg-mini/sorbus_domestica","iNatAg-mini/sorghum_bicolor","iNatAg-mini/sorghum_drummondii","iNatAg-mini/sorghum_halepense","iNatAg-mini/soymida_febrifuga","iNatAg-mini/sparganium_americanum","iNatAg-mini/sparganium_erectum","iNatAg-mini/spartina_pectinata","iNatAg-mini/spartium_junceum","iNatAg-mini/spathodea_campanulata","iNatAg-mini/spergula_arvensis","iNatAg-mini/spermacoce_verticillata","iNatAg-mini/spinacia_oleracea","iNatAg-mini/spinifex_hirsutus","iNatAg-mini/spirea_tomentosa","iNatAg-mini/spodiopogon_sibiricus","iNatAg-mini/spondias_cythera","iNatAg-mini/spondias_mombin","iNatAg-mini/spondias_purpurea","iNatAg-mini/sporobolus_airoides","iNatAg-mini/sporobolus_fimbriatus","iNatAg-mini/sporobolus_maritimus","iNatAg-mini/sporobolus_neglectus","iNatAg-mini/sporobolus_spicatus","iNatAg-mini/sporobolus_virginicus","iNatAg-mini/stachys_affinis","iNatAg-mini/stachys_palustris","iNatAg-mini/stachytarpheta_incana","iNatAg-mini/stachytarpheta_indica","iNatAg-mini/stellaria_graminea","iNatAg-mini/stellaria_holostea","iNatAg-mini/stellaria_media","iNatAg-mini/stenotaphrum_secundatum","iNatAg-mini/sterculia_foetida","iNatAg-mini/sterculia_urens","iNatAg-mini/sterculia_villosa","iNatAg-mini/stereospermum_kunthianum","iNatAg-mini/stevia_rebaudiana","iNatAg-mini/stipa_baicalensis","iNatAg-mini/stipa_brachychaeta","iNatAg-mini/stipa_capillata","iNatAg-mini/stipa_glareosa","iNatAg-mini/stipa_grandis","iNatAg-mini/stipa_krylovii","iNatAg-mini/stipa_lagascae","iNatAg-mini/stipa_occidentalis","iNatAg-mini/stipa_parviflora","iNatAg-mini/stipa_tenacissima","iNatAg-mini/stipa_trichotoma","iNatAg-mini/stipagrostis_amabilis","iNatAg-mini/stipagrostis_zeyheri","iNatAg-mini/stratiotes_aloides","iNatAg-mini/strychnos_cocculoides","iNatAg-mini/strychnos_innocua","iNatAg-mini/strychnos_spinosa","iNatAg-mini/stylidium_desertorum","iNatAg-mini/stylosanthes_capitata","iNatAg-mini/stylosanthes_fruticosa","iNatAg-mini/stylosanthes_hamata","iNatAg-mini/stylosanthes_humilis","iNatAg-mini/stylosanthes_scabra","iNatAg-mini/stylosanthes_viscosa","iNatAg-mini/succisa_pratensis","iNatAg-mini/swertia_baicalensis","iNatAg-mini/swietenia_macrophylla","iNatAg-mini/swietenia_mahogani","iNatAg-mini/symphoricarpos_mollis","iNatAg-mini/symphoricarpos_occidentalis","iNatAg-mini/symphoricarpos_orbiculatus","iNatAg-mini/symphoricarpos_rotundifolius","iNatAg-mini/symphytum_officinale","iNatAg-mini/syncarpia_glomulifera","iNatAg-mini/syncarpia_hillii","iNatAg-mini/syzygium_cordatum","iNatAg-mini/syzygium_cumini","iNatAg-mini/syzygium_guineense","iNatAg-mini/syzygium_malaccense","iNatAg-mini/syzygium_taiwanicum","iNatAg-mini/tabebuia_rosea","iNatAg-mini/tabebuia_serratifolia","iNatAg-mini/tagetes_minuta","iNatAg-mini/talinum_triangulare","iNatAg-mini/tamarindus_indica","iNatAg-mini/tamarix_aphylla","iNatAg-mini/tamarix_chinensis","iNatAg-mini/tamarix_gallica","iNatAg-mini/tamarix_parviflora","iNatAg-mini/tanacetum_balsamita","iNatAg-mini/tanacetum_vulgare","iNatAg-mini/taraxacum_officinale","iNatAg-mini/taraxia_breviflora","iNatAg-mini/tarchonanthus_camphoratus","iNatAg-mini/taxodium_distichum","iNatAg-mini/taxus_baccata","iNatAg-mini/tecoma_stans","iNatAg-mini/tectona_grandis","iNatAg-mini/tephrosia_candida","iNatAg-mini/tephrosia_lupinifolia","iNatAg-mini/tephrosia_obovata","iNatAg-mini/tephrosia_purpurea","iNatAg-mini/tephrosia_vogelii","iNatAg-mini/teramnus_labialis","iNatAg-mini/terminalia_arjuna","iNatAg-mini/terminalia_bellirica","iNatAg-mini/terminalia_brownii","iNatAg-mini/terminalia_calamansanai","iNatAg-mini/terminalia_catappa","iNatAg-mini/terminalia_chebula","iNatAg-mini/terminalia_ivorensis","iNatAg-mini/terminalia_mantaly","iNatAg-mini/terminalia_myriocarpa","iNatAg-mini/terminalia_paniculata","iNatAg-mini/terminalia_prunioides","iNatAg-mini/terminalia_sericocarpa","iNatAg-mini/terminalia_tomentosa","iNatAg-mini/tetradymia_canescens","iNatAg-mini/tetragonia_tetragonioides","iNatAg-mini/teucrium_botrys","iNatAg-mini/teucrium_canadense","iNatAg-mini/teucrium_chamaedrys","iNatAg-mini/teucrium_polium","iNatAg-mini/thalia_geniculata","iNatAg-mini/thalictrum_pubescens","iNatAg-mini/thaumatococcus_daniellii","iNatAg-mini/themeda_australis","iNatAg-mini/themeda_quadrivalvis","iNatAg-mini/themeda_triandra","iNatAg-mini/theobroma_bicolor","iNatAg-mini/theobroma_cacao","iNatAg-mini/theobroma_grandiflorum","iNatAg-mini/thermopsis_montana","iNatAg-mini/thermopsis_rhombifolia","iNatAg-mini/thespesia_populnea","iNatAg-mini/thlaspi_arvense","iNatAg-mini/thlaspi_perfoliatum","iNatAg-mini/thuja_occidentalis","iNatAg-mini/thymus_serphyllum","iNatAg-mini/thymus_serpyllum","iNatAg-mini/thymus_vulgaris","iNatAg-mini/thyrsostachys_siamensis","iNatAg-mini/thysanolaena_latifolia","iNatAg-mini/tilia_cordata","iNatAg-mini/tilia_platyphyllos","iNatAg-mini/tipuana_tipu","iNatAg-mini/tithonia_diversifolia","iNatAg-mini/toona_ciliata","iNatAg-mini/torenia_glabra","iNatAg-mini/toxicodendron_pubescens","iNatAg-mini/trachypogon_spicatus","iNatAg-mini/tradescantia_bracteata","iNatAg-mini/tradescantia_fluminensis","iNatAg-mini/tradescantia_ohiensis","iNatAg-mini/tradescantia_virginiana","iNatAg-mini/tragia_betonicifolia","iNatAg-mini/tragopogon_lamottei","iNatAg-mini/tragopogon_porrifolius","iNatAg-mini/tragopogon_pratensis","iNatAg-mini/tragus_koelerioides","iNatAg-mini/trapa_natans","iNatAg-mini/trema_orientale","iNatAg-mini/trianthema_portulacastrum","iNatAg-mini/tribulus_cistoides","iNatAg-mini/tribulus_terrestris","iNatAg-mini/trichanthera_gigantea","iNatAg-mini/trichoneura_grandiglumis","iNatAg-mini/trichosanthes_cucumerina","iNatAg-mini/trichostema_lanceolatum","iNatAg-mini/tridax_procumbens","iNatAg-mini/trifolium_africanum","iNatAg-mini/trifolium_alexandrinum","iNatAg-mini/trifolium_ambiguum","iNatAg-mini/trifolium_angustifolium","iNatAg-mini/trifolium_arvense","iNatAg-mini/trifolium_burchellianum","iNatAg-mini/trifolium_campestre","iNatAg-mini/trifolium_carolinianum","iNatAg-mini/trifolium_cherleri","iNatAg-mini/trifolium_dubium","iNatAg-mini/trifolium_fragiferum","iNatAg-mini/trifolium_glanduliferum","iNatAg-mini/trifolium_glomeratum","iNatAg-mini/trifolium_hirtum","iNatAg-mini/trifolium_hybridum","iNatAg-mini/trifolium_incarnatum","iNatAg-mini/trifolium_medium","iNatAg-mini/trifolium_michelianum","iNatAg-mini/trifolium_nigrescens","iNatAg-mini/trifolium_patens","iNatAg-mini/trifolium_pilulare","iNatAg-mini/trifolium_polymorphum","iNatAg-mini/trifolium_pratense","iNatAg-mini/trifolium_reflexum","iNatAg-mini/trifolium_repens","iNatAg-mini/trifolium_resupinatum","iNatAg-mini/trifolium_subterraneum","iNatAg-mini/trifolium_tomentosum","iNatAg-mini/trifolium_variegatum","iNatAg-mini/trifolium_vesiculosum","iNatAg-mini/trifolium_wormskioldii","iNatAg-mini/triglochin_maritima","iNatAg-mini/triglochin_maritimum","iNatAg-mini/triglochin_palustre","iNatAg-mini/trigonella_foenum-graecum","iNatAg-mini/tripsacum_dactyloides","iNatAg-mini/trisetum_flavescens","iNatAg-mini/tristachya_leucothrix","iNatAg-mini/triticum_aestivum","iNatAg-mini/triticum_dicoccoides","iNatAg-mini/triticum_durum","iNatAg-mini/triticum_spelta","iNatAg-mini/triumfetta_rhomboidea","iNatAg-mini/triumfetta_semitriloba","iNatAg-mini/trollius_europaeus","iNatAg-mini/tropaeolum_majus","iNatAg-mini/tropaeolum_tuberosum","iNatAg-mini/tropidocarpum_gracile","iNatAg-mini/turritis_glabra","iNatAg-mini/tussilago_farfara","iNatAg-mini/tylosema_esculentum","iNatAg-mini/typha_angustifolia","iNatAg-mini/typha_domingensis","iNatAg-mini/typha_latifolia","iNatAg-mini/uapaca_kirkiana","iNatAg-mini/ulex_europaeus","iNatAg-mini/ullucus_tuberosus","iNatAg-mini/ulmus_procera","iNatAg-mini/umbilicus_rupestris","iNatAg-mini/uncaria_gambir","iNatAg-mini/urelytrum_agropyroides","iNatAg-mini/urena_lobata","iNatAg-mini/urochloa_mosambicensis","iNatAg-mini/urochloa_panicoides","iNatAg-mini/urtica_chamaedryoides","iNatAg-mini/urtica_dioica","iNatAg-mini/urtica_urens","iNatAg-mini/utricularia_floridana","iNatAg-mini/utricularia_foliosa","iNatAg-mini/utricularia_gibba","iNatAg-mini/utricularia_purpurea","iNatAg-mini/utricularia_radiata","iNatAg-mini/utricularia_vulgaris","iNatAg-mini/uvaria_littoralis","iNatAg-mini/uvularia_sessilifolia","iNatAg-mini/vaccinium_angustifolium","iNatAg-mini/vaccinium_corymbosum","iNatAg-mini/vaccinium_macrocarpon","iNatAg-mini/vaccinium_myrtillus","iNatAg-mini/vaccinium_uliginosum","iNatAg-mini/vaccinium_vitis-idaea","iNatAg-mini/valeriana_officinalis","iNatAg-mini/valerianella_eriocarpa","iNatAg-mini/vallisneria_americana","iNatAg-mini/vangueria_infausta","iNatAg-mini/vangueria_madagascariensis","iNatAg-mini/vanilla_planifolia","iNatAg-mini/vateria_indica","iNatAg-mini/ventilago_viminalis","iNatAg-mini/veratrum_album","iNatAg-mini/veratrum_californicum","iNatAg-mini/verbascum_blattaria","iNatAg-mini/verbascum_lychnitis","iNatAg-mini/verbascum_phlomoides","iNatAg-mini/verbascum_thapsus","iNatAg-mini/verbascum_thaspus","iNatAg-mini/verbena_bonariensis","iNatAg-mini/verbena_brasiliensis","iNatAg-mini/verbena_hastata","iNatAg-mini/verbena_officinalis","iNatAg-mini/verbena_urticifolia","iNatAg-mini/vernonia_altissima","iNatAg-mini/vernonia_amygdalina","iNatAg-mini/vernonia_baldwinii","iNatAg-mini/vernonia_chamaedrys","iNatAg-mini/vernonia_fasciculata","iNatAg-mini/veronica_agrestis","iNatAg-mini/veronica_anagallis-aquatica","iNatAg-mini/veronica_arvensis","iNatAg-mini/veronica_biloba","iNatAg-mini/veronica_chamaedrys","iNatAg-mini/veronica_filiformis","iNatAg-mini/veronica_hederaefolia","iNatAg-mini/veronica_hederifolia","iNatAg-mini/veronica_longifolia","iNatAg-mini/veronica_officinalis","iNatAg-mini/veronica_peregrina","iNatAg-mini/veronica_polita","iNatAg-mini/veronica_serpyllifolia","iNatAg-mini/vetiveria_zizanioides","iNatAg-mini/viburnum_cassinoides","iNatAg-mini/viburnum_lentago","iNatAg-mini/viburnum_prunifolium","iNatAg-mini/viccia_cracca","iNatAg-mini/vicia_augustifolia","iNatAg-mini/vicia_benghalensis","iNatAg-mini/vicia_cracca","iNatAg-mini/vicia_ervilia","iNatAg-mini/vicia_faba","iNatAg-mini/vicia_monantha","iNatAg-mini/vicia_narbonensis","iNatAg-mini/vicia_pannonica","iNatAg-mini/vicia_sativa","iNatAg-mini/vicia_sepium","iNatAg-mini/vigna_adenantha","iNatAg-mini/vigna_angularis","iNatAg-mini/vigna_hosei","iNatAg-mini/vigna_lanceolata","iNatAg-mini/vigna_longifolia","iNatAg-mini/vigna_luteola","iNatAg-mini/vigna_parkeri","iNatAg-mini/vigna_radiata","iNatAg-mini/vigna_trilobata","iNatAg-mini/vigna_umbellata","iNatAg-mini/vigna_unguiculata","iNatAg-mini/vigna_vexillata","iNatAg-mini/vinca_major","iNatAg-mini/vinca_minor","iNatAg-mini/viola_lanceolata","iNatAg-mini/viola_odorata","iNatAg-mini/viola_tricolor","iNatAg-mini/viscum_album","iNatAg-mini/vitellaria_paradoxa","iNatAg-mini/vitex_agnus-castus","iNatAg-mini/vitex_doniana","iNatAg-mini/vitex_negundo","iNatAg-mini/vitis_labrusca","iNatAg-mini/vitis_rotundifolia","iNatAg-mini/vitis_vinifera","iNatAg-mini/vitis_vulpina","iNatAg-mini/waltheria_indica","iNatAg-mini/warburgia_salutaris","iNatAg-mini/warburgia_ugandensis","iNatAg-mini/withania_somnifera","iNatAg-mini/wrightia_tomentosa","iNatAg-mini/xanthium_spinosum","iNatAg-mini/xanthium_strumarium","iNatAg-mini/xanthosoma_sagittifolium","iNatAg-mini/ximenia_americana","iNatAg-mini/xylia_xylocarpa","iNatAg-mini/xylocarpus_granatum","iNatAg-mini/xylocarpus_mekongensis","iNatAg-mini/xylocarpus_moluccensis","iNatAg-mini/xylorhiza_glabriuscula","iNatAg-mini/yucca_elephantipes","iNatAg-mini/zannichellia_palustris","iNatAg-mini/zanthoxylum_americanum","iNatAg-mini/zea_mays","iNatAg-mini/zingiber_officinale","iNatAg-mini/zizania_aquatica","iNatAg-mini/zizania_latifolia","iNatAg-mini/ziziphus_abyssinica","iNatAg-mini/ziziphus_mauritiana","iNatAg-mini/ziziphus_mucronata","iNatAg-mini/zornia_diphylla","iNatAg-mini/zornia_glochidiata","iNatAg-mini/zornia_latifolia","iNatAg-mini/zostera_marina","iNatAg-mini/zoysia_matrella","iNatAg-mini/zygophyllum_fabago","iNatAg/abelmoschus_esculentus","iNatAg/abelmoschus_manihot","iNatAg/abelmoschus_moschatus","iNatAg/abies_alba","iNatAg/abies_amabilis","iNatAg/abies_balsamea","iNatAg/abies_concolor","iNatAg/abies_pindrow","iNatAg/abroma_augustum","iNatAg/abrus_pecatorius","iNatAg/abrus_precatorius","iNatAg/abutilon_theophrasti","iNatAg/acacia_abyssinica","iNatAg/acacia_acradenia","iNatAg/acacia_acuminata","iNatAg/acacia_ampliceps","iNatAg/acacia_anceps","iNatAg/acacia_ancistrocarpa","iNatAg/acacia_aneura","iNatAg/acacia_angustissima","iNatAg/acacia_ataxacantha","iNatAg/acacia_aulacocarpa","iNatAg/acacia_auriculiformis","iNatAg/acacia_bidwillii","iNatAg/acacia_brachystachya","iNatAg/acacia_brevispica","iNatAg/acacia_burkei","iNatAg/acacia_caffra","iNatAg/acacia_cambagei","iNatAg/acacia_catechu","iNatAg/acacia_catenulata","iNatAg/acacia_caven","iNatAg/acacia_cincinnata","iNatAg/acacia_coriacea","iNatAg/acacia_cowleana","iNatAg/acacia_crassicarpa","iNatAg/acacia_cyclops","iNatAg/acacia_cyperophylla","iNatAg/acacia_dealbata","iNatAg/acacia_deanei","iNatAg/acacia_decurrens","iNatAg/acacia_difficilis","iNatAg/acacia_doratoxylon","iNatAg/acacia_ehrenbergiana","iNatAg/acacia_erioloba","iNatAg/acacia_estrophiolata","iNatAg/acacia_excelsa","iNatAg/acacia_falciformis","iNatAg/acacia_farnesiana","iNatAg/acacia_fasciculifera","iNatAg/acacia_flavescens","iNatAg/acacia_georginae","iNatAg/acacia_gerrardii","iNatAg/acacia_glaucocarpa","iNatAg/acacia_gourmaensis","iNatAg/acacia_harpophylla","iNatAg/acacia_holosericea","iNatAg/acacia_irrorata","iNatAg/acacia_ixiophylla","iNatAg/acacia_karroo","iNatAg/acacia_koa","iNatAg/acacia_leptocarpa","iNatAg/acacia_leucophloea","iNatAg/acacia_ligulata","iNatAg/acacia_maidenii","iNatAg/acacia_mangium","iNatAg/acacia_mearnsii","iNatAg/acacia_melanoxylon","iNatAg/acacia_mellifera","iNatAg/acacia_murrayana","iNatAg/acacia_neriifolia","iNatAg/acacia_nigrescens","iNatAg/acacia_nilotica","iNatAg/acacia_occidentalis","iNatAg/acacia_oraria","iNatAg/acacia_oswaldii","iNatAg/acacia_pachycarpa","iNatAg/acacia_papyrocarpa","iNatAg/acacia_paradoxa","iNatAg/acacia_pendula","iNatAg/acacia_peuce","iNatAg/acacia_podalyriifolia","iNatAg/acacia_polyacantha","iNatAg/acacia_polystachya","iNatAg/acacia_pruinocarpa","iNatAg/acacia_pycnantha","iNatAg/acacia_salicina","iNatAg/acacia_saligna","iNatAg/acacia_sclerosperma","iNatAg/acacia_senegal","iNatAg/acacia_seyal","iNatAg/acacia_shirleyi","iNatAg/acacia_sieberiana","iNatAg/acacia_silvestris","iNatAg/acacia_simsii","iNatAg/acacia_stenophylla","iNatAg/acacia_tetragonophylla","iNatAg/acacia_tortilis","iNatAg/acacia_torulosa","iNatAg/acacia_trachycarpa","iNatAg/acacia_victoriae","iNatAg/acaena_novae-zelandiae","iNatAg/acalypha_rhomboidea","iNatAg/acalypha_virginica","iNatAg/acanthosicyos_horridus","iNatAg/acanthosicyos_naudinianus","iNatAg/acanthospermum_hispidum","iNatAg/acanthus_ilicifolius","iNatAg/acanthus_mollis","iNatAg/acca_sellowiana","iNatAg/acer_caesium","iNatAg/acer_campestre","iNatAg/acer_platanoides","iNatAg/acer_pseudoplatanus","iNatAg/acer_saccharum","iNatAg/achillea_fragrantissima","iNatAg/achillea_millefolium","iNatAg/achillea_ptarmica","iNatAg/achnatherum_pekinense","iNatAg/achyranthes_aspera","iNatAg/acmena_smithii","iNatAg/aconitum_napellus","iNatAg/acorus_calamus","iNatAg/acrocarpus_fraxinifolius","iNatAg/acrocomia_aculeata","iNatAg/acrocomia_totai","iNatAg/actaea_racemosa","iNatAg/actinidia_arguta","iNatAg/actinidia_chinensis","iNatAg/adansonia_digitata","iNatAg/adansonia_grandidieri","iNatAg/adansonia_gregorii","iNatAg/adenanthera_pavonina","iNatAg/adesmia_bicolor","iNatAg/adesmia_latifolia","iNatAg/adesmia_punctata","iNatAg/adesmia_securigerifolia","iNatAg/adiantum_capillus-veneris","iNatAg/adina_cordifolia","iNatAg/adonis_annua","iNatAg/adonis_vernalis","iNatAg/aechmea_magdalenae","iNatAg/aegiceras_corniculatum","iNatAg/aegilops_biuncialis","iNatAg/aegilops_cylindrica","iNatAg/aegilops_geniculata","iNatAg/aegilops_triuncialis","iNatAg/aegle_marmelos","iNatAg/aegopodium_podagraria","iNatAg/aeschynomene_americana","iNatAg/aeschynomene_brasiliana","iNatAg/aeschynomene_falcata","iNatAg/aeschynomene_histrix","iNatAg/aeschynomene_indica","iNatAg/aeschynomene_villosa","iNatAg/aesculus_hippocastanum","iNatAg/aesculus_indica","iNatAg/aethusa_cynapium","iNatAg/afzelia_africana","iNatAg/afzelia_quanzensis","iNatAg/agathis_australis","iNatAg/agathis_dammara","iNatAg/agathis_macrophylla","iNatAg/agathis_microstachya","iNatAg/agathis_robusta","iNatAg/agave_fourcroydes","iNatAg/agave_lecheguilla","iNatAg/agave_sisalana","iNatAg/ageratum_conyzoides","iNatAg/agrimonia_eupatoria","iNatAg/agrimonia_gryposepala","iNatAg/agrimonia_parviflora","iNatAg/agropyron_cristatum","iNatAg/agropyron_dasyanthum","iNatAg/agropyron_desertorum","iNatAg/agropyron_scabrum","iNatAg/agrostemma_githago","iNatAg/agrostis_canina","iNatAg/agrostis_capillaris","iNatAg/agrostis_gigantea","iNatAg/agrostis_stolonifera","iNatAg/agrostis_tenuis","iNatAg/ailanthus_altissima","iNatAg/ailanthus_excelsa","iNatAg/aiphanes_aculeata","iNatAg/aira_caryophyllea","iNatAg/ajuga_genevensis","iNatAg/ajuga_reptans","iNatAg/alania_cunninghamii","iNatAg/albizia_adianthifolia","iNatAg/albizia_amara","iNatAg/albizia_chinensis","iNatAg/albizia_falcataria","iNatAg/albizia_harveyi","iNatAg/albizia_lebbeck","iNatAg/albizia_lophantha","iNatAg/albizia_lucida","iNatAg/albizia_odoratissima","iNatAg/albizia_procera","iNatAg/alcea_rosea","iNatAg/alchemilla_monticola","iNatAg/alchemilla_occidentalis","iNatAg/alchemilla_vulgaris","iNatAg/alchemilla_xanthochlora","iNatAg/aleurites_fordii","iNatAg/aleurites_moluccana","iNatAg/alisma_gramineum","iNatAg/alisma_lanceolatum","iNatAg/alisma_plantago-aquatica","iNatAg/alkanna_tinctoria","iNatAg/alliaria_petiolata","iNatAg/allionia_incarnata","iNatAg/allium_ampeloprasum","iNatAg/allium_canadense","iNatAg/allium_cepa","iNatAg/allium_chinense","iNatAg/allium_fistulosum","iNatAg/allium_paniculatum","iNatAg/allium_sativum","iNatAg/allium_schoenoprasum","iNatAg/allium_triquetrum","iNatAg/allium_tuberosum","iNatAg/allium_ursinum","iNatAg/allocasuarina_campestris","iNatAg/allocasuarina_decaisneana","iNatAg/allocasuarina_fraseriana","iNatAg/allocasuarina_huegeliana","iNatAg/allocasuarina_littoralis","iNatAg/allocasuarina_luehmannii","iNatAg/allocasuarina_torulosa","iNatAg/alloteropsis_semialata","iNatAg/alnus_acuminata","iNatAg/alnus_glutinosa","iNatAg/alnus_japonica","iNatAg/alnus_maritima","iNatAg/alnus_nepalensis","iNatAg/alnus_rubra","iNatAg/alocasia_macrorrhizos","iNatAg/aloe_arborescens","iNatAg/aloe_barbadensis","iNatAg/aloe_ferox","iNatAg/aloe_perryi","iNatAg/alopecurus_arundinaceus","iNatAg/alopecurus_carolinianus","iNatAg/alopecurus_geniculatus","iNatAg/alopecurus_myosuroides","iNatAg/alopecurus_pratensis","iNatAg/alopecurus_rendlei","iNatAg/aloysia_triphylla","iNatAg/alphitonia_excelsa","iNatAg/alpinia_galanga","iNatAg/alstonia_scholaris","iNatAg/alternanthera_pungens","iNatAg/althaea_officinalis","iNatAg/altingia_excelsa","iNatAg/alysicarpus_monilifer","iNatAg/alysicarpus_ovalifolius","iNatAg/alysicarpus_rugosus","iNatAg/alysicarpus_vaginalis","iNatAg/alyssum_desertorum","iNatAg/amaranthus_albus","iNatAg/amaranthus_blitum","iNatAg/amaranthus_caudatus","iNatAg/amaranthus_cruentus","iNatAg/amaranthus_dubius","iNatAg/amaranthus_hybridus","iNatAg/amaranthus_hypochondriacus","iNatAg/amaranthus_lividus","iNatAg/amaranthus_retroflexus","iNatAg/amaranthus_speciosus","iNatAg/amaranthus_spinosus","iNatAg/amaranthus_tricolor","iNatAg/amaranthus_viridis","iNatAg/ambelania_acida","iNatAg/ambrosia_acanthicarpa","iNatAg/ambrosia_artemisiifolia","iNatAg/ambrosia_confertiflora","iNatAg/ambrosia_psilostachya","iNatAg/ambrosia_tomentosa","iNatAg/ambrosia_trifida","iNatAg/ammannia_latifolia","iNatAg/ammi_majus","iNatAg/ammophila_arenaria","iNatAg/ammophila_breviligulata","iNatAg/amorpha_fruticosa","iNatAg/amorphophallus_paeoniifolius","iNatAg/amsinckia_douglasiana","iNatAg/amsinckia_lycopsoides","iNatAg/anacardium_occidentale","iNatAg/anagallis_arvensis","iNatAg/ananas_comosus","iNatAg/anchusa_azurea","iNatAg/andrographis_paniculata","iNatAg/andropogon_barbinodis","iNatAg/andropogon_bicornis","iNatAg/andropogon_brachystachyus","iNatAg/andropogon_gayanus","iNatAg/andropogon_gyrans","iNatAg/andropogon_hallii","iNatAg/andropogon_leucostachyus","iNatAg/andropogon_ternarius","iNatAg/androsace_septentrionalis","iNatAg/anemone_hepatica","iNatAg/anemone_nemorosa","iNatAg/anethum_graveolens","iNatAg/angelica_archangelica","iNatAg/angelica_atropurpurea","iNatAg/angelica_sylvestris","iNatAg/angophora_costata","iNatAg/angophora_floribunda","iNatAg/annona_atemoya","iNatAg/annona_cherimola","iNatAg/annona_diversifolia","iNatAg/annona_montana","iNatAg/annona_muricata","iNatAg/annona_purpurea","iNatAg/annona_reticulata","iNatAg/annona_senegalensis","iNatAg/annona_squamosa","iNatAg/anogeissus_acuminata","iNatAg/anogeissus_latifolia","iNatAg/anogeissus_pendula","iNatAg/antennaria_dioica","iNatAg/anthemis_arvensis","iNatAg/anthemis_cotula","iNatAg/anthemis_tinctoria","iNatAg/anthephora_pubescens","iNatAg/anthoxanthum_odoratum","iNatAg/anthriscus_cerefolium","iNatAg/anthyllis_vulneraria","iNatAg/antidesma_bunius","iNatAg/antirrhinum_majus","iNatAg/aphandra_natalia","iNatAg/aphanes_arvensis","iNatAg/apios_americana","iNatAg/apium_graveolens","iNatAg/apocynum_cannabinum","iNatAg/apocynum_sibiricum","iNatAg/aponogeton_distachyos","iNatAg/aquilaria_malaccensis","iNatAg/aquilegia_canadensis","iNatAg/aquilegia_vulgaris","iNatAg/arachis_glabrata","iNatAg/arachis_hypogaea","iNatAg/arachis_pintoi","iNatAg/arachis_villosa","iNatAg/araucaria_angustifolia","iNatAg/araucaria_bidwillii","iNatAg/araucaria_cunninghamii","iNatAg/araucaria_hunsteinii","iNatAg/arbutus_unedo","iNatAg/archidendron_jiringa","iNatAg/arctium_lappa","iNatAg/arctostaphylos_glandulosa","iNatAg/arctostaphylos_manzanita","iNatAg/arctostaphylos_patula","iNatAg/arctostaphylos_uva-ursi","iNatAg/arctostaphylos_viscida","iNatAg/ardisia_crenata","iNatAg/areca_catechu","iNatAg/arenaria_serpyllifolia","iNatAg/arenga_pinnata","iNatAg/argemone_mexicana","iNatAg/argyrodendron_actinophyllum","iNatAg/argyrodendron_peralatum","iNatAg/aria_alnifolia","iNatAg/aristida_adscensionis","iNatAg/aristida_behriana","iNatAg/aristida_congesta","iNatAg/aristida_junciformis","iNatAg/aristida_lanosa","iNatAg/aristida_latifolia","iNatAg/aristida_longispica","iNatAg/aristida_personata","iNatAg/aristida_purpurascens","iNatAg/aristida_schiedeana","iNatAg/aristida_transvaalensis","iNatAg/aristolochia_rotunda","iNatAg/armoracia_rusticana","iNatAg/arnica_montana","iNatAg/arrhenatherum_elatius","iNatAg/artemisia_abrotanum","iNatAg/artemisia_absinthium","iNatAg/artemisia_afra","iNatAg/artemisia_annua","iNatAg/artemisia_campestris","iNatAg/artemisia_dracunculus","iNatAg/artemisia_filifolia","iNatAg/artemisia_glacialis","iNatAg/artemisia_herba-alba","iNatAg/artemisia_ludoviciana","iNatAg/artemisia_stelleriana","iNatAg/artemisia_tridentata","iNatAg/artemisia_vulgaris","iNatAg/artocarpus_altilis","iNatAg/artocarpus_heterophyllus","iNatAg/artocarpus_hirsutus","iNatAg/artocarpus_integer","iNatAg/artocarpus_lakoocha","iNatAg/arundinella_hirta","iNatAg/arundo_donax","iNatAg/asarina_stricta","iNatAg/asarum_europaeum","iNatAg/asclepias_curassavica","iNatAg/asclepias_fascicularis","iNatAg/asclepias_incarnata","iNatAg/asclepias_lanceolata","iNatAg/asclepias_purpurascens","iNatAg/asclepias_speciosa","iNatAg/asclepias_subverticillata","iNatAg/asclepias_tuberosa","iNatAg/asclepias_verticillata","iNatAg/asclepias_viridiflora","iNatAg/asimina_angustifolia","iNatAg/asimina_triloba","iNatAg/asparagus_densiflorus","iNatAg/asparagus_officinalis","iNatAg/asperula_arvensis","iNatAg/asphodelus_albus","iNatAg/asphodelus_tenuifolius","iNatAg/aspilia_angustifolia","iNatAg/asplenium_ruta-muraria","iNatAg/aster_ericoides","iNatAg/astragalus_adsurgens","iNatAg/astragalus_asymmetricus","iNatAg/astragalus_canadensis","iNatAg/astragalus_cicer","iNatAg/astragalus_gummifer","iNatAg/astragalus_mollissimus","iNatAg/astragalus_nuttallianus","iNatAg/astragalus_sinicus","iNatAg/astragalus_tweedyi","iNatAg/astrantia_major","iNatAg/astrebla_lappacea","iNatAg/astrebla_pectinata","iNatAg/astrebla_squarrosa","iNatAg/astrocaryum_jauari","iNatAg/astrocaryum_vulgare","iNatAg/asystasia_gangetica","iNatAg/atalaya_hemiglauca","iNatAg/atherosperma_moschatum","iNatAg/athrotaxis_selaginoides","iNatAg/atriplex_canescens","iNatAg/atriplex_confertifolia","iNatAg/atriplex_gardneri","iNatAg/atriplex_glauca","iNatAg/atriplex_halimus","iNatAg/atriplex_hortensis","iNatAg/atriplex_lentiformis","iNatAg/atriplex_nummularia","iNatAg/atriplex_patula","iNatAg/atriplex_rosea","iNatAg/atriplex_semibaccata","iNatAg/atriplex_vesicaria","iNatAg/atropa_belladonna","iNatAg/attalea_cohune","iNatAg/avena_fatua","iNatAg/avena_sativa","iNatAg/avena_sterilis","iNatAg/avenula_pubescens","iNatAg/averrhoa_bilimbi","iNatAg/averrhoa_carambola","iNatAg/avicennia_germinans","iNatAg/avicennia_marina","iNatAg/avicennia_officinalis","iNatAg/axonopus_affinis","iNatAg/axonopus_compressus","iNatAg/axonopus_fissifolius","iNatAg/axyris_amaranthoides","iNatAg/azadirachta_indica","iNatAg/azanza_garckeana","iNatAg/azolla_filiculoides","iNatAg/azolla_pinnata","iNatAg/baccaurea_motleyana","iNatAg/baccaurea_ramiflora","iNatAg/baccharis_glutinosa","iNatAg/baccharis_pilularis","iNatAg/bactris_gasipaes","iNatAg/baikiaea_plurijuga","iNatAg/balanites_aegyptiaca","iNatAg/bambusa_arundinacea","iNatAg/bambusa_balcooa","iNatAg/bambusa_blumeana","iNatAg/bambusa_tulda","iNatAg/bambusa_vulgaris","iNatAg/banksia_integrifolia","iNatAg/banksia_occidentalis","iNatAg/baphia_nitida","iNatAg/barringtonia_racemosa","iNatAg/basella_alba","iNatAg/bauhinia_aculeata","iNatAg/bauhinia_petersiana","iNatAg/bauhinia_racemosa","iNatAg/bauhinia_rufescens","iNatAg/bauhinia_thonningii","iNatAg/bauhinia_tomentosa","iNatAg/bauhinia_variegata","iNatAg/beckmannia_eruciformis","iNatAg/beckmannia_syzigachne","iNatAg/bellis_perennis","iNatAg/benincasa_hispida","iNatAg/berberis_aquifolium","iNatAg/berberis_thunbergii","iNatAg/berberis_vulgaris","iNatAg/berchemia_discolor","iNatAg/berrya_cordifolia","iNatAg/bersama_lucens","iNatAg/bertholletia_excelsa","iNatAg/beta_vulgaris","iNatAg/betula_nigra","iNatAg/betula_pendula","iNatAg/betula_pubescens","iNatAg/bidens_bipinnata","iNatAg/bidens_cernua","iNatAg/bidens_frondosa","iNatAg/bidens_pilosa","iNatAg/bidens_tripartita","iNatAg/bignonia_capreolata","iNatAg/biserrula_pelecinus","iNatAg/bixa_orellana","iNatAg/blighia_sapida","iNatAg/blumea_balsamifera","iNatAg/bocconia_frutescens","iNatAg/boehmeria_nivea","iNatAg/boerhavia_coccinea","iNatAg/boerhavia_diffusa","iNatAg/boerhavia_erecta","iNatAg/boesenbergia_rotunda","iNatAg/bolusanthus_speciosus","iNatAg/bombacopsis_quinata","iNatAg/bombax_ceiba","iNatAg/bombax_insigne","iNatAg/borago_officinalis","iNatAg/borassus_aethiopum","iNatAg/borassus_flabellifer","iNatAg/borojoa_patinoi","iNatAg/boronia_glabra","iNatAg/boscia_angustifolia","iNatAg/boswellia_serrata","iNatAg/bothriochloa_bladhii","iNatAg/bothriochloa_insculpta","iNatAg/bothriochloa_ischaemum","iNatAg/bothriochloa_pertusa","iNatAg/bougainvillea_glabra","iNatAg/bouteloua_curtipendula","iNatAg/bouteloua_gracilis","iNatAg/brachiaria_brizantha","iNatAg/brachiaria_decumbens","iNatAg/brachiaria_deflexa","iNatAg/brachiaria_distachya","iNatAg/brachiaria_humidicola","iNatAg/brachiaria_mutica","iNatAg/brachiaria_ramosa","iNatAg/brachiaria_serrata","iNatAg/brachychiton_acerifolius","iNatAg/brachychiton_populneus","iNatAg/brachylaena_huillensis","iNatAg/brachystegia_spiciformis","iNatAg/brassica_campestris","iNatAg/brassica_chinensis","iNatAg/brassica_incana","iNatAg/brassica_juncea","iNatAg/brassica_napus","iNatAg/brassica_nigra","iNatAg/brassica_rapa","iNatAg/brassica_tournefortii","iNatAg/bridelia_micrantha","iNatAg/briza_maxima","iNatAg/briza_media","iNatAg/briza_minor","iNatAg/bromus_arvensis","iNatAg/bromus_carinatus","iNatAg/bromus_catharticus","iNatAg/bromus_diandrus","iNatAg/bromus_erectus","iNatAg/bromus_hordeaceus","iNatAg/bromus_inermis","iNatAg/bromus_madritensis","iNatAg/bromus_marginatus","iNatAg/bromus_racemosus","iNatAg/bromus_rubens","iNatAg/bromus_secalinus","iNatAg/bromus_sterilis","iNatAg/bromus_tectorum","iNatAg/bromus_unioloides","iNatAg/bromus_willdenowii","iNatAg/brosimum_alicastrum","iNatAg/broussonetia_papyrifera","iNatAg/bruguiera_gymnorrhiza","iNatAg/bryonia_alba","iNatAg/bryonia_cretica","iNatAg/buchloe_dactyloides","iNatAg/buckinghamia_celsissima","iNatAg/bunias_erucago","iNatAg/bunias_orientalis","iNatAg/burkea_africana","iNatAg/bursera_simaruba","iNatAg/butea_monosperma","iNatAg/butomus_umbellatus","iNatAg/buxus_sempervirens","iNatAg/cacalia_atriplicifolia","iNatAg/caesalpinia_coriaria","iNatAg/caesalpinia_sappan","iNatAg/cajanus_cajan","iNatAg/calamagrostis_epigeios","iNatAg/calathea_allouia","iNatAg/calendula_arvensis","iNatAg/calendula_officinalis","iNatAg/calliandra_calothyrsus","iNatAg/calliandra_tweedii","iNatAg/callisia_angustifolia","iNatAg/callitriche_palustris","iNatAg/callitriche_stagnalis","iNatAg/callitriche_verna","iNatAg/callitris_columellaris","iNatAg/callitris_endlicheri","iNatAg/callitris_macleayana","iNatAg/calluna_vulgaris","iNatAg/calodendrum_capense","iNatAg/calophyllum_apetalum","iNatAg/calophyllum_brasiliense","iNatAg/calophyllum_inophyllum","iNatAg/calopogonium_caeruleum","iNatAg/calopogonium_mucunoides","iNatAg/calotropis_procera","iNatAg/caltha_palustris","iNatAg/calystegia_hederacea","iNatAg/calystegia_occidentalis","iNatAg/calystegia_pubescens","iNatAg/camelina_sativa","iNatAg/camellia_sinensis","iNatAg/campanula_americana","iNatAg/campanula_rapunculus","iNatAg/campanula_rotundifolia","iNatAg/cananga_odorata","iNatAg/canavalia_brasiliensis","iNatAg/canavalia_ensiformis","iNatAg/canavalia_gladiata","iNatAg/canna_indica","iNatAg/canthium_spinosum","iNatAg/capparis_decidua","iNatAg/capparis_spinosa","iNatAg/capparis_tomentosa","iNatAg/capsella_bursa-pastoris","iNatAg/capsicum_annuum","iNatAg/capsicum_chinense","iNatAg/capsicum_frutescens","iNatAg/capsicum_pubescens","iNatAg/caragana_arborescens","iNatAg/caragana_microphylla","iNatAg/carapa_guianensis","iNatAg/cardamine_flexuosa","iNatAg/cardamine_hirsuta","iNatAg/cardamine_impatiens","iNatAg/cardamine_oligosperma","iNatAg/cardamine_parviflora","iNatAg/cardamine_pratensis","iNatAg/cardiospermum_halicacabum","iNatAg/carduus_acanthoides","iNatAg/carduus_crispus","iNatAg/carduus_lanceolatus","iNatAg/carduus_pycnocephalus","iNatAg/carex_nebrascensis","iNatAg/carex_pallescens","iNatAg/carica_cauliflora","iNatAg/carica_papaya","iNatAg/carica_pubescens","iNatAg/cariniana_pyriformis","iNatAg/carissa_carandas","iNatAg/carissa_edulis","iNatAg/carissa_macrocarpa","iNatAg/carlina_acaulis","iNatAg/carludovica_palmata","iNatAg/caroxylon_aphyllum","iNatAg/carpinus_betulus","iNatAg/carthamus_creticus","iNatAg/carthamus_lanatus","iNatAg/carthamus_tinctorius","iNatAg/carum_carvi","iNatAg/carya_illinoensis","iNatAg/caryodendron_orinocense","iNatAg/caryota_urens","iNatAg/casimiroa_edulis","iNatAg/cassia_articulata","iNatAg/cassia_brewsteri","iNatAg/cassia_fistula","iNatAg/cassia_marilandica","iNatAg/cassia_nictitans","iNatAg/cassia_reticulata","iNatAg/cassia_senna","iNatAg/cassia_siamea","iNatAg/cassia_sieberiana","iNatAg/cassia_tomentosa","iNatAg/cassia_tora","iNatAg/castanea_crenata","iNatAg/castanea_dentata","iNatAg/castanea_mollissima","iNatAg/castanea_pumila","iNatAg/castanea_sativa","iNatAg/castanospermum_australe","iNatAg/castilla_elastica","iNatAg/castilleja_angustifolia","iNatAg/castilleja_occidentalis","iNatAg/casuarina_cristata","iNatAg/casuarina_cunninghamiana","iNatAg/casuarina_equisetifolia","iNatAg/casuarina_glauca","iNatAg/casuarina_junghuhniana","iNatAg/casuarina_obesa","iNatAg/catalpa_bignonioides","iNatAg/catha_edulis","iNatAg/catharanthus_roseus","iNatAg/ceanothus_americanus","iNatAg/ceanothus_prostratus","iNatAg/cedrela_odorata","iNatAg/cedrus_deodara","iNatAg/ceiba_pentandra","iNatAg/celastrus_orbiculatus","iNatAg/celastrus_scandens","iNatAg/celosia_argentea","iNatAg/celtis_australis","iNatAg/cenchrus_biflorus","iNatAg/cenchrus_ciliaris","iNatAg/cenchrus_echinatus","iNatAg/cenchrus_setigerus","iNatAg/cenchrus_spinifex","iNatAg/cenchrus_tribuloides","iNatAg/centaurea_biebersteinii","iNatAg/centaurea_calcitrapa","iNatAg/centaurea_cyanus","iNatAg/centaurea_diluta","iNatAg/centaurea_jacea","iNatAg/centaurea_melitensis","iNatAg/centaurea_nigra","iNatAg/centaurea_nigrescens","iNatAg/centaurea_solstitalis","iNatAg/centaurea_solstitialis","iNatAg/centaurea_stoebe","iNatAg/centaurea_virgata","iNatAg/centella_asiatica","iNatAg/centropodia_glauca","iNatAg/centrosema_brasilianum","iNatAg/centrosema_macrocarpum","iNatAg/centrosema_pascuorum","iNatAg/centrosema_plumieri","iNatAg/centrosema_pubescens","iNatAg/centrosema_virginianum","iNatAg/cephalanthus_occidentalis","iNatAg/cerastium_arvense","iNatAg/cerastium_nutans","iNatAg/cerastium_vulgatum","iNatAg/ceratonia_siliqua","iNatAg/ceratopetalum_apetalum","iNatAg/ceratophyllum_demersum","iNatAg/ceratophyllum_echinatum","iNatAg/ceriops_tagal","iNatAg/cestrum_diurnum","iNatAg/ceterach_officinarum","iNatAg/chaerophyllum_tainturieri","iNatAg/chamaebatia_foliolosa","iNatAg/chamaecrista_nictitans","iNatAg/chamaecrista_rotundifolia","iNatAg/chamaedorea_tepejilote","iNatAg/chamaerops_humilis","iNatAg/chara_intermedia","iNatAg/chelidonium_majus","iNatAg/chenopodium_album","iNatAg/chenopodium_ambrosioides","iNatAg/chenopodium_ambrosoides","iNatAg/chenopodium_berlandieri","iNatAg/chenopodium_bonus-henricus","iNatAg/chenopodium_botrys","iNatAg/chenopodium_ficifolium","iNatAg/chenopodium_gigantospermum","iNatAg/chenopodium_glaucum","iNatAg/chenopodium_missouriense","iNatAg/chenopodium_multifidum","iNatAg/chenopodium_murale","iNatAg/chenopodium_polyspermum","iNatAg/chenopodium_quinoa","iNatAg/chenopodium_rubrum","iNatAg/chenopodium_urbicum","iNatAg/chloris_ciliata","iNatAg/chloris_gayana","iNatAg/chloris_roxburghiana","iNatAg/chloris_verticillata","iNatAg/chloris_virgata","iNatAg/chlorogalum_pomeridianum","iNatAg/chlorophora_excelsa","iNatAg/chlorophytum_comosum","iNatAg/chloroxylon_swietenia","iNatAg/chromolaena_odorata","iNatAg/chrysanthemum_coronarium","iNatAg/chrysanthemum_leucanthemum","iNatAg/chrysophyllum_cainito","iNatAg/chrysopogon_aciculatus","iNatAg/chukrasia_velutina","iNatAg/cicer_arietinum","iNatAg/cichorium_endivia","iNatAg/cichorium_intybus","iNatAg/cicuta_bulbifera","iNatAg/cicuta_mackenzieana","iNatAg/cicuta_maculata","iNatAg/cicuta_virosa","iNatAg/cimicifuga_racemosa","iNatAg/cinchona_officinalis","iNatAg/cinchona_pubescens","iNatAg/cinnamomum_burmannii","iNatAg/cinnamomum_camphora","iNatAg/cinnamomum_cassia","iNatAg/cinnamomum_verum","iNatAg/cistus_creticus","iNatAg/citrofortunella_microcarpa","iNatAg/citrullus_colocynthis","iNatAg/citrullus_lanatus","iNatAg/citrus_aurantifolia","iNatAg/citrus_aurantium","iNatAg/citrus_deliciosa","iNatAg/citrus_latifolia","iNatAg/citrus_limon","iNatAg/citrus_madurensis","iNatAg/citrus_medica","iNatAg/citrus_paradisi","iNatAg/citrus_reticulata","iNatAg/citrus_sinensis","iNatAg/citrus_unshiu","iNatAg/clausena_lansium","iNatAg/claytonia_caroliniana","iNatAg/claytonia_virginica","iNatAg/cleistogenes_squarrosa","iNatAg/clematis_ligusticifolia","iNatAg/clematis_orientalis","iNatAg/clematis_virginiana","iNatAg/clematis_vitalba","iNatAg/cleome_gynandra","iNatAg/cleome_hassleriana","iNatAg/cleome_viscosa","iNatAg/clitoria_laurifolia","iNatAg/clitoria_ternatea","iNatAg/clusia_occidentalis","iNatAg/cnicus_benedictus","iNatAg/coccoloba_uvifera","iNatAg/cochlospermum_religiosum","iNatAg/cocos_nucifera","iNatAg/coffea_arabica","iNatAg/coffea_canephora","iNatAg/coffea_liberica","iNatAg/coix_lacryma-jobi","iNatAg/cola_acuminata","iNatAg/cola_nitida","iNatAg/colchicum_autumnale","iNatAg/coleus_amboinicus","iNatAg/colocasia_esculenta","iNatAg/colophospermum_mopane","iNatAg/combretum_aculeatum","iNatAg/combretum_micranthum","iNatAg/combretum_molle","iNatAg/commelina_bengalensis","iNatAg/commelina_benghalensis","iNatAg/commelina_communis","iNatAg/commelina_erecta","iNatAg/commiphora_africana","iNatAg/conium_maculatum","iNatAg/conocarpus_erectus","iNatAg/conocarpus_lancifolius","iNatAg/convallaria_majalis","iNatAg/convolvulus_althaeoides","iNatAg/convolvulus_arvensis","iNatAg/convolvulus_equitans","iNatAg/convolvulus_sepium","iNatAg/copaifera_langsdorffii","iNatAg/corchorus_aestuans","iNatAg/corchorus_capsularis","iNatAg/cordia_africana","iNatAg/cordia_alliodora","iNatAg/coreopsis_lanceolata","iNatAg/coreopsis_tinctoria","iNatAg/coreopsis_verticillata","iNatAg/coriandrum_sativum","iNatAg/corispermum_hyssopifolium","iNatAg/corispermum_villosum","iNatAg/cornus_canadensis","iNatAg/cornus_florida","iNatAg/cornus_mas","iNatAg/cornus_sanguinea","iNatAg/coronilla_varia","iNatAg/corylus_avellana","iNatAg/corylus_maxima","iNatAg/cotoneaster_franchetii","iNatAg/cotula_coronopifolia","iNatAg/crambe_cordifolia","iNatAg/crambe_maritima","iNatAg/crassula_sieberiana","iNatAg/crataegus_crus-galli","iNatAg/crataegus_crus-gallii","iNatAg/crataegus_marshallii","iNatAg/crataegus_monogyna","iNatAg/crataegus_oxyacantha","iNatAg/crataegus_rivularis","iNatAg/cratylia_argentea","iNatAg/crepis_biennis","iNatAg/crepis_occidentalis","iNatAg/crepis_vesicaria","iNatAg/cressa_truxillensis","iNatAg/crinum_americanum","iNatAg/crithmum_maritimum","iNatAg/crocus_sativus","iNatAg/crotalaria_juncea","iNatAg/crotalaria_lanceolata","iNatAg/crotalaria_pallida","iNatAg/crotalaria_podocarpa","iNatAg/crotalaria_retusa","iNatAg/crotalaria_sagittalis","iNatAg/crotalaria_spectabilis","iNatAg/croton_monanthogynus","iNatAg/crucianella_angustifolia","iNatAg/cryptocarya_erythroxylon","iNatAg/cryptomeria_japonica","iNatAg/cryptotaenia_japonica","iNatAg/ctenium_concinnum","iNatAg/cucumis_anguria","iNatAg/cucumis_melo","iNatAg/cucumis_sativus","iNatAg/cucurbita_argyrosperma","iNatAg/cucurbita_digitata","iNatAg/cucurbita_ficifolia","iNatAg/cucurbita_foetidissima","iNatAg/cucurbita_maxima","iNatAg/cucurbita_mixta","iNatAg/cucurbita_moschata","iNatAg/cucurbita_pepo","iNatAg/cunninghamia_lanceolata","iNatAg/cupania_auriculata","iNatAg/cuphea_viscosissima","iNatAg/cupressus_arizonica","iNatAg/cupressus_lusitanica","iNatAg/cupressus_macrocarpa","iNatAg/cupressus_sempervirens","iNatAg/cupressus_torulosa","iNatAg/curcuma_longa","iNatAg/curcuma_zedoaria","iNatAg/cuscuta_approximata","iNatAg/cuscuta_epithymum","iNatAg/cuscuta_obtusiflora","iNatAg/cuscuta_planiflora","iNatAg/cuscuta_sandwichiana","iNatAg/cydonia_oblonga","iNatAg/cymbalaria_muralis","iNatAg/cymbopogon_citratus","iNatAg/cynanchum_scoparium","iNatAg/cynara_cardunculus","iNatAg/cynara_scolymus","iNatAg/cynodon_dactylon","iNatAg/cynodon_nlemfuensis","iNatAg/cynoglossum_officinale","iNatAg/cynometra_cauliflora","iNatAg/cynosurus_cristatus","iNatAg/cyperus_alopecuroides","iNatAg/cyperus_articulatus","iNatAg/cyperus_compressus","iNatAg/cyperus_croceus","iNatAg/cyperus_cuspidatus","iNatAg/cyperus_difformis","iNatAg/cyperus_eragrostis","iNatAg/cyperus_erythrorhizos","iNatAg/cyperus_esculentus","iNatAg/cyperus_flavescens","iNatAg/cyperus_fuscus","iNatAg/cyperus_hyalinus","iNatAg/cyperus_involucratus","iNatAg/cyperus_iria","iNatAg/cyperus_lanceolatus","iNatAg/cyperus_longus","iNatAg/cyperus_odoratus","iNatAg/cyperus_pilosus","iNatAg/cyperus_prolifer","iNatAg/cyperus_pseudovegetus","iNatAg/cyperus_rotundus","iNatAg/cyperus_sanguinolentus","iNatAg/cyperus_squarrosus","iNatAg/cyperus_strigosus","iNatAg/cyperus_subsquarrosus","iNatAg/cyperus_surinamensis","iNatAg/cyphomandra_betacea","iNatAg/cytisus_albus","iNatAg/cytisus_proliferus","iNatAg/cytisus_supinus","iNatAg/dacrydium_franklinii","iNatAg/dactylis_glomerata","iNatAg/dactyloctenium_aegyptium","iNatAg/dactyloctenium_giganteum","iNatAg/dalbergia_latifolia","iNatAg/dalbergia_melanoxylon","iNatAg/dalbergia_sissoo","iNatAg/daphne_laureola","iNatAg/daphne_mezereum","iNatAg/datura_ferox","iNatAg/datura_quercifolia","iNatAg/datura_stramonium","iNatAg/daucus_carota","iNatAg/daucus_carrota","iNatAg/delairea_odorata","iNatAg/delonix_regia","iNatAg/delphinium_bicolor","iNatAg/delphinium_carolinianum","iNatAg/delphinium_menziesii","iNatAg/delphinium_trolliifolium","iNatAg/dendrocalamus_asper","iNatAg/dendrocalamus_giganteus","iNatAg/dendrocalamus_strictus","iNatAg/dendrolobium_umbellatum","iNatAg/derris_elliptica","iNatAg/deschampsia_caespitosa","iNatAg/deschampsia_flexuosa","iNatAg/desmanthus_leptophyllus","iNatAg/desmanthus_virgatus","iNatAg/desmodium_affine","iNatAg/desmodium_barbatum","iNatAg/desmodium_cuneatum","iNatAg/desmodium_cuspidatum","iNatAg/desmodium_distortum","iNatAg/desmodium_gyroides","iNatAg/desmodium_heterophyllum","iNatAg/desmodium_incanum","iNatAg/desmodium_intortum","iNatAg/desmodium_paniculatum","iNatAg/desmodium_psilocarpum","iNatAg/desmodium_reticulatum","iNatAg/desmodium_sandwicense","iNatAg/desmodium_scorpiurus","iNatAg/desmodium_tortuosum","iNatAg/desmodium_triflorum","iNatAg/desmodium_uncinatum","iNatAg/desmodium_velutinum","iNatAg/dialium_guineense","iNatAg/dianthus_armeria","iNatAg/dichanthium_annulatum","iNatAg/dichanthium_aristatum","iNatAg/dichanthium_caricosum","iNatAg/dichanthium_sericeum","iNatAg/dichondra_carolinensis","iNatAg/dichondra_micrantha","iNatAg/dichrostachys_cinerea","iNatAg/dictamnus_albus","iNatAg/didymopanax_morototoni","iNatAg/diervilla_lonicera","iNatAg/digitalis_lanata","iNatAg/digitalis_lutea","iNatAg/digitalis_purpurea","iNatAg/digitaria_argyrograpta","iNatAg/digitaria_ciliaris","iNatAg/digitaria_decumbens","iNatAg/digitaria_didactyla","iNatAg/digitaria_eriantha","iNatAg/digitaria_tricholaenoides","iNatAg/digitaria_violascens","iNatAg/dillenia_indica","iNatAg/dillenia_pentagyna","iNatAg/diodia_virginiana","iNatAg/dioscorea_alata","iNatAg/dioscorea_bulbifera","iNatAg/dioscorea_esculenta","iNatAg/dioscorea_opposita","iNatAg/dioscorea_oppositifolia","iNatAg/dioscorea_trifida","iNatAg/diospyros_digyna","iNatAg/diospyros_kaki","iNatAg/diospyros_malabarica","iNatAg/diospyros_melanoxylon","iNatAg/diospyros_mespiliformis","iNatAg/diospyros_virginiana","iNatAg/diplachne_fusca","iNatAg/diploglottis_cunninghamii","iNatAg/dipsacus_fullonum","iNatAg/dipsacus_laciniatus","iNatAg/dipsacus_sylvestris","iNatAg/dipterocarpus_alatus","iNatAg/dipterocarpus_indicus","iNatAg/dipterocarpus_turbinatus","iNatAg/dodonaea_viscosa","iNatAg/dovyalis_caffra","iNatAg/dovyalis_hebecarpa","iNatAg/draba_nemorosa","iNatAg/draba_verna","iNatAg/dracocephalum_parviflorum","iNatAg/dracocephalum_thymiflorum","iNatAg/drosera_rotundifolia","iNatAg/dryopteris_filix-mas","iNatAg/duboisia_myoporoides","iNatAg/durio_zibethinus","iNatAg/dysoxylum_fraserianum","iNatAg/ecballium_elaterium","iNatAg/echinacea_purpurea","iNatAg/echinochloa_colona","iNatAg/echinochloa_crus-galli","iNatAg/echinochloa_frumentacea","iNatAg/echinochloa_polystachya","iNatAg/echinochloa_pyramidalis","iNatAg/echinops_sphaerocephalus","iNatAg/echium_plantagineum","iNatAg/echium_vulgare","iNatAg/ehrharta_calycina","iNatAg/ehrharta_erecta","iNatAg/ehrharta_longiflora","iNatAg/ehrharta_villosa","iNatAg/eichhornia_crassipes","iNatAg/ekebergia_capensis","iNatAg/elaeagnus_angustifolia","iNatAg/elaeagnus_multiflora","iNatAg/elaeis_guineensis","iNatAg/elaeis_oleifera","iNatAg/elaeocarpus_grandis","iNatAg/eleagnus_angustifolia","iNatAg/elegia_cuspidata","iNatAg/eleocharis_cellulosa","iNatAg/eleocharis_dulcis","iNatAg/eleocharis_macrostachya","iNatAg/eleocharis_montevidensis","iNatAg/eleocharis_vivipara","iNatAg/elephantopus_mollis","iNatAg/elephantorrhiza_elephantina","iNatAg/elettaria_cardamomum","iNatAg/eleusine_indica","iNatAg/ellisia_nyctelea","iNatAg/elsholtzia_ciliata","iNatAg/elymus_canadensis","iNatAg/elymus_caput-medusae","iNatAg/elymus_cinereus","iNatAg/elymus_condensatus","iNatAg/elymus_dahuricus","iNatAg/elymus_glaucus","iNatAg/elymus_viginicus","iNatAg/elymus_virginicus","iNatAg/emilia_sonchifolia","iNatAg/encalypta_intermedia","iNatAg/enneapogon_scoparius","iNatAg/ensete_ventricosum","iNatAg/entada_abyssinica","iNatAg/entada_africana","iNatAg/enterolobium_cyclocarpum","iNatAg/epilobium_angustifolium","iNatAg/epilobium_ciliatum","iNatAg/equisetum_arvense","iNatAg/equisetum_hyemale","iNatAg/equisetum_palustre","iNatAg/equisetum_sylvaticum","iNatAg/equisetum_telmateia","iNatAg/eragrostis_amabilis","iNatAg/eragrostis_barrelieri","iNatAg/eragrostis_capillaris","iNatAg/eragrostis_chloromelas","iNatAg/eragrostis_cilianensis","iNatAg/eragrostis_curvula","iNatAg/eragrostis_interrupta","iNatAg/eragrostis_lehmanniana","iNatAg/eragrostis_minor","iNatAg/eragrostis_obtusa","iNatAg/eragrostis_pilosa","iNatAg/eragrostis_racemosa","iNatAg/eragrostis_superba","iNatAg/eragrostis_tef","iNatAg/eragrostis_tremula","iNatAg/eragrostis_trichodes","iNatAg/eragrostis_unioloides","iNatAg/eremochloa_ophiuroides","iNatAg/erigeron_canadensis","iNatAg/erigeron_cascadensis","iNatAg/erigeron_divaricatus","iNatAg/erigeron_philadelphicus","iNatAg/eriobotrya_japonica","iNatAg/eriochloa_punctata","iNatAg/eriogonum_deflexum","iNatAg/eriogonum_longifolium","iNatAg/eriosema_psoraleoides","iNatAg/eruca_sativa","iNatAg/eryngium_campestre","iNatAg/eryngium_yuccifolium","iNatAg/erysimum_cheiranthoides","iNatAg/erysimum_hieracifolium","iNatAg/erysimum_hieraciifolium","iNatAg/erysimum_repandum","iNatAg/erythrina_abyssinica","iNatAg/erythrina_caffra","iNatAg/erythrina_edulis","iNatAg/erythrina_fusca","iNatAg/erythrina_poeppigiana","iNatAg/erythrina_variegata","iNatAg/erythrina_vespertilio","iNatAg/erythrophleum_chlorostachys","iNatAg/erythroxylum_coca","iNatAg/eucalyptus_accedens","iNatAg/eucalyptus_agglomerata","iNatAg/eucalyptus_albens","iNatAg/eucalyptus_astringens","iNatAg/eucalyptus_bosistoana","iNatAg/eucalyptus_botryoides","iNatAg/eucalyptus_brockwayi","iNatAg/eucalyptus_calophylla","iNatAg/eucalyptus_camaldulensis","iNatAg/eucalyptus_cinerea","iNatAg/eucalyptus_citriodora","iNatAg/eucalyptus_cladocalyx","iNatAg/eucalyptus_cloeziana","iNatAg/eucalyptus_consideniana","iNatAg/eucalyptus_cornuta","iNatAg/eucalyptus_crebra","iNatAg/eucalyptus_cypellocarpa","iNatAg/eucalyptus_dalrympleana","iNatAg/eucalyptus_deglupta","iNatAg/eucalyptus_delegatensis","iNatAg/eucalyptus_diversicolor","iNatAg/eucalyptus_dumosa","iNatAg/eucalyptus_elata","iNatAg/eucalyptus_eremophila","iNatAg/eucalyptus_eugenioides","iNatAg/eucalyptus_exserta","iNatAg/eucalyptus_fastigata","iNatAg/eucalyptus_fraxinoides","iNatAg/eucalyptus_globoidea","iNatAg/eucalyptus_globulus","iNatAg/eucalyptus_gomphocephala","iNatAg/eucalyptus_gongylocarpa","iNatAg/eucalyptus_grandis","iNatAg/eucalyptus_guilfoylei","iNatAg/eucalyptus_gummifera","iNatAg/eucalyptus_intertexta","iNatAg/eucalyptus_jacksonii","iNatAg/eucalyptus_johnstonii","iNatAg/eucalyptus_kessellii","iNatAg/eucalyptus_laophila","iNatAg/eucalyptus_largiflorens","iNatAg/eucalyptus_leucoxylon","iNatAg/eucalyptus_longifolia","iNatAg/eucalyptus_loxophleba","iNatAg/eucalyptus_maculata","iNatAg/eucalyptus_marginata","iNatAg/eucalyptus_melliodora","iNatAg/eucalyptus_microcarpa","iNatAg/eucalyptus_microcorys","iNatAg/eucalyptus_microtheca","iNatAg/eucalyptus_mitchelliana","iNatAg/eucalyptus_moluccana","iNatAg/eucalyptus_muelleriana","iNatAg/eucalyptus_nigrifunda","iNatAg/eucalyptus_niphophila","iNatAg/eucalyptus_nitens","iNatAg/eucalyptus_obliqua","iNatAg/eucalyptus_occidentalis","iNatAg/eucalyptus_ochrophloia","iNatAg/eucalyptus_oreades","iNatAg/eucalyptus_paniculata","iNatAg/eucalyptus_papuana","iNatAg/eucalyptus_patens","iNatAg/eucalyptus_pauciflora","iNatAg/eucalyptus_pellita","iNatAg/eucalyptus_phoenicea","iNatAg/eucalyptus_pilularis","iNatAg/eucalyptus_piperita","iNatAg/eucalyptus_planchoniana","iNatAg/eucalyptus_pleurocarpa","iNatAg/eucalyptus_polyanthemos","iNatAg/eucalyptus_populnea","iNatAg/eucalyptus_propinqua","iNatAg/eucalyptus_pulchella","iNatAg/eucalyptus_punctata","iNatAg/eucalyptus_pyrocarpa","iNatAg/eucalyptus_quadrangulata","iNatAg/eucalyptus_regnans","iNatAg/eucalyptus_resinifera","iNatAg/eucalyptus_robusta","iNatAg/eucalyptus_rubida","iNatAg/eucalyptus_rudis","iNatAg/eucalyptus_saligna","iNatAg/eucalyptus_salmonophloia","iNatAg/eucalyptus_salubris","iNatAg/eucalyptus_sargentii","iNatAg/eucalyptus_scias","iNatAg/eucalyptus_sideroxylon","iNatAg/eucalyptus_sieberi","iNatAg/eucalyptus_socialis","iNatAg/eucalyptus_subcrenulata","iNatAg/eucalyptus_tereticornis","iNatAg/eucalyptus_thozetiana","iNatAg/eucalyptus_transcontinentalis","iNatAg/eucalyptus_trivalva","iNatAg/eucalyptus_urnigera","iNatAg/eucalyptus_urophylla","iNatAg/eucalyptus_utilis","iNatAg/eucalyptus_viminalis","iNatAg/eucalyptus_wandoo","iNatAg/eucalyptus_woollsiana","iNatAg/eucryphia_lucida","iNatAg/eugenia_aromatica","iNatAg/eugenia_stipitata","iNatAg/eugenia_uniflora","iNatAg/euonymus_atropurpureus","iNatAg/euonymus_europaeus","iNatAg/euonymus_japonicus","iNatAg/eupatorium_album","iNatAg/eupatorium_altissimum","iNatAg/eupatorium_cannabinum","iNatAg/eupatorium_compositifolium","iNatAg/eupatorium_hyssopifolium","iNatAg/eupatorium_maculatum","iNatAg/eupatorium_perfoliatum","iNatAg/eupatorium_purpureum","iNatAg/eupatorium_serotinum","iNatAg/euphorbia_cyathophora","iNatAg/euphorbia_cyparissias","iNatAg/euphorbia_dendroides","iNatAg/euphorbia_epicyparissias","iNatAg/euphorbia_esula","iNatAg/euphorbia_helioscopia","iNatAg/euphorbia_heterophylla","iNatAg/euphorbia_hirsuta","iNatAg/euphorbia_hirta","iNatAg/euphorbia_hyssopifolia","iNatAg/euphorbia_lathyris","iNatAg/euphorbia_lathyrus","iNatAg/euphorbia_maculata","iNatAg/euphorbia_marginata","iNatAg/euphorbia_nutans","iNatAg/euphorbia_peplis","iNatAg/euphorbia_peplus","iNatAg/euphorbia_platyphyllos","iNatAg/euphorbia_prostata","iNatAg/euphorbia_prostrata","iNatAg/euphorbia_serphyllifolia","iNatAg/euphorbia_serpyllifolia","iNatAg/euphorbia_serrata","iNatAg/euphorbia_serrulata","iNatAg/euphorbia_spathulata","iNatAg/euphorbia_terracina","iNatAg/euphorbia_tirucalli","iNatAg/euphorbia_vermiculata","iNatAg/eurycoma_longifolia","iNatAg/eusideroxylon_zwageri","iNatAg/eustachys_paspaloides","iNatAg/euterpe_edulis","iNatAg/euterpe_oleracea","iNatAg/euthamia_occidentalis","iNatAg/evax_multicaulis","iNatAg/evonymus_europaeus","iNatAg/excoecaria_agallocha","iNatAg/fagopyrum_esculentum","iNatAg/fagopyrum_tataricum","iNatAg/fagraea_fragrans","iNatAg/fagus_grandifolia","iNatAg/fagus_sylvatica","iNatAg/faidherbia_albida","iNatAg/faurea_saligna","iNatAg/feijoa_sellowiana","iNatAg/festuca_arundinacea","iNatAg/festuca_gigantea","iNatAg/festuca_idahoensis","iNatAg/festuca_microstachys","iNatAg/festuca_myuros","iNatAg/festuca_ovina","iNatAg/festuca_pratensis","iNatAg/festuca_rubra","iNatAg/festuca_scabra","iNatAg/fibraurea_tinctoria","iNatAg/ficus_abutilifolia","iNatAg/ficus_auriculata","iNatAg/ficus_benghalensis","iNatAg/ficus_carica","iNatAg/ficus_elastica","iNatAg/ficus_glumosa","iNatAg/ficus_macrophylla","iNatAg/ficus_sycomorus","iNatAg/ficus_thonningii","iNatAg/filago_gallica","iNatAg/filipendula_vulgaris","iNatAg/flacourtia_indica","iNatAg/flemingia_macrophylla","iNatAg/flindersia_bourjotiana","iNatAg/flindersia_brayleyana","iNatAg/flindersia_pimenteliana","iNatAg/foeniculum_vulgare","iNatAg/fortunella_hindsii","iNatAg/fortunella_japonica","iNatAg/fortunella_margarita","iNatAg/fragaria_ananassa","iNatAg/fragaria_chiloensis","iNatAg/fragaria_vesca","iNatAg/fragaria_virginiana","iNatAg/frangula_alnus","iNatAg/fraxinus_americana","iNatAg/fraxinus_excelsior","iNatAg/frithia_humilis","iNatAg/fuirena_simplex","iNatAg/fumaria_capreolata","iNatAg/fumaria_officinalis","iNatAg/fumaria_parviflora","iNatAg/gaillardia_pulchella","iNatAg/galactia_marginalis","iNatAg/galactia_striata","iNatAg/galega_officinalis","iNatAg/galega_orientalis","iNatAg/galeopsis_ladanum","iNatAg/galeopsis_tetrahit","iNatAg/galinsoga_quadriradiata","iNatAg/galium_aparine","iNatAg/galium_mollugo","iNatAg/galium_paniculatum","iNatAg/galium_parisiense","iNatAg/galium_saxatile","iNatAg/galium_spurium","iNatAg/galium_tricornutum","iNatAg/galium_verum","iNatAg/garcinia_dulcis","iNatAg/garcinia_mangostana","iNatAg/garcinia_multiflora","iNatAg/garcinia_xanthochymus","iNatAg/garuga_pinnata","iNatAg/gaultheria_procumbens","iNatAg/gaura_biennis","iNatAg/geissois_benthamii","iNatAg/genipa_americana","iNatAg/genista_canariensis","iNatAg/genista_tinctoria","iNatAg/gentiana_acaulis","iNatAg/gentiana_lutea","iNatAg/geranium_carolinianum","iNatAg/geranium_dissectum","iNatAg/geranium_molle","iNatAg/geranium_pratense","iNatAg/geranium_pusillum","iNatAg/geranium_robertianum","iNatAg/girardinia_diversifolia","iNatAg/glechoma_hederacea","iNatAg/glecoma_hederacea","iNatAg/gleditsia_triacanthos","iNatAg/gliricidia_sepium","iNatAg/globularia_vulgaris","iNatAg/glyceria_fluitans","iNatAg/glyceria_septentrionalis","iNatAg/glycine_max","iNatAg/glycyrrhiza_glabra","iNatAg/glycyrrhiza_lepidota","iNatAg/gmelina_arborea","iNatAg/gmelina_leichhardtii","iNatAg/gnaphalium_calviceps","iNatAg/gnaphalium_luteo-album","iNatAg/gnaphalium_luteoalbum","iNatAg/gnaphalium_palustre","iNatAg/gnaphalium_pensylvanicum","iNatAg/gnaphalium_purpureum","iNatAg/gnaphalium_uliginosum","iNatAg/gossypium_barbadense","iNatAg/gossypium_herbaceum","iNatAg/gossypium_hirsutum","iNatAg/grevillea_parallela","iNatAg/grevillea_robusta","iNatAg/grewia_asiatica","iNatAg/grewia_bicolor","iNatAg/grewia_tiliifolia","iNatAg/guaiacum_officinale","iNatAg/guaiacum_sanctum","iNatAg/guazuma_ulmifolia","iNatAg/guizotia_abyssinica","iNatAg/gunnera_tinctoria","iNatAg/gypsophila_paniculata","iNatAg/hagenia_abyssinica","iNatAg/hamamelis_virginiana","iNatAg/hardwickia_binata","iNatAg/harpagophytum_procumbens","iNatAg/harpochloa_falx","iNatAg/harungana_madagascariensis","iNatAg/hedera_helix","iNatAg/hedysarum_coronarium","iNatAg/hedysarum_pallidum","iNatAg/hedysarum_spinosissimum","iNatAg/helenium_autumnale","iNatAg/helenium_tenuifolium","iNatAg/helianthus_annus","iNatAg/helianthus_annuus","iNatAg/helianthus_ciliaris","iNatAg/helianthus_pauciflorus","iNatAg/helianthus_petiolaris","iNatAg/helianthus_tuberosus","iNatAg/helictotrichon_turgidulum","iNatAg/heliotropium_amplexicaule","iNatAg/heliotropium_curassavicum","iNatAg/heliotropium_europaeum","iNatAg/hemarthria_altissima","iNatAg/hemizonia_congesta","iNatAg/heracleum_sphondylium","iNatAg/heritiera_littoralis","iNatAg/heteropogon_contortus","iNatAg/heterotheca_grandiflora","iNatAg/heuchera_mexicana","iNatAg/hevea_brasiliensis","iNatAg/hibiscus_cannabinus","iNatAg/hibiscus_sabdariffa","iNatAg/hibiscus_syriacus","iNatAg/hibiscus_tiliaceus","iNatAg/hibiscus_tilliaceus","iNatAg/hieracium_aurantiacum","iNatAg/hieracium_gronovii","iNatAg/hieracium_lachenalii","iNatAg/hieracium_laevigatum","iNatAg/hieracium_murorum","iNatAg/hieracium_pilosella","iNatAg/hieracium_piloselloides","iNatAg/hieracium_umbellatum","iNatAg/hieracium_venosum","iNatAg/hieracium_vulgatum","iNatAg/hierochloe_odorata","iNatAg/hilaria_jamesii","iNatAg/hilaria_mutica","iNatAg/hippophae_rhamnoides","iNatAg/hippophae_salicifolia","iNatAg/hippuris_vulgaris","iNatAg/holcus_lanatus","iNatAg/holcus_mollis","iNatAg/hopea_odorata","iNatAg/hopea_parviflora","iNatAg/hopea_wightiana","iNatAg/hordeum_brachyantherum","iNatAg/hordeum_brevisubulatum","iNatAg/hordeum_bulbosum","iNatAg/hordeum_distichon","iNatAg/hordeum_geniculatum","iNatAg/hordeum_jubatum","iNatAg/hordeum_murinum","iNatAg/hordeum_vulgare","iNatAg/houstonia_caerulea","iNatAg/humulus_lupulus","iNatAg/hydnocarpus_alpina","iNatAg/hydrocotyle_americana","iNatAg/hydrocotyle_mexicana","iNatAg/hydrocotyle_ranunculoides","iNatAg/hydrocotyle_sibthorpioides","iNatAg/hydrocotyle_umbellata","iNatAg/hydrocotyle_verticillata","iNatAg/hydrolea_uniflora","iNatAg/hylocereus_undatus","iNatAg/hymenaea_courbaril","iNatAg/hymenopappus_scabiosaeus","iNatAg/hymenoxys_odorata","iNatAg/hyosciamus_niger","iNatAg/hyoscyamus_niger","iNatAg/hyparrhenia_dregeana","iNatAg/hyparrhenia_filipendula","iNatAg/hyparrhenia_hirta","iNatAg/hyparrhenia_rufa","iNatAg/hypericum_canadense","iNatAg/hypericum_canariense","iNatAg/hypericum_mutilum","iNatAg/hypericum_mutlium","iNatAg/hypericum_perforatum","iNatAg/hypericum_prolificum","iNatAg/hypericum_punctatum","iNatAg/hyperthelia_dissoluta","iNatAg/hyphaene_compressa","iNatAg/hyphaene_thebaica","iNatAg/hypochaeris_glabra","iNatAg/hypochaeris_radicata","iNatAg/hypoxis_hemerocallidea","iNatAg/hyssopus_officinalis","iNatAg/ilex_aquifolium","iNatAg/ilex_dipyrena","iNatAg/ilex_paraguariensis","iNatAg/impatiens_balsamina","iNatAg/impatiens_parviflora","iNatAg/imperata_brevifolia","iNatAg/imperata_cylindrica","iNatAg/indigofera_arrecta","iNatAg/indigofera_hirsuta","iNatAg/indigofera_oblongifolia","iNatAg/indigofera_schimperi","iNatAg/indigofera_spicata","iNatAg/indigofera_suffruticosa","iNatAg/indigofera_tinctoria","iNatAg/inga_edulis","iNatAg/inga_vera","iNatAg/intsia_bijuga","iNatAg/inula_britannica","iNatAg/inula_helenium","iNatAg/ipomoea_alba","iNatAg/ipomoea_aquatica","iNatAg/ipomoea_batatas","iNatAg/ipomoea_coccinea","iNatAg/ipomoea_hederifolia","iNatAg/ipomoea_lacunosa","iNatAg/ipomoea_quamoclit","iNatAg/ipomoea_tricolor","iNatAg/ipomoea_triloba","iNatAg/ipomoea_turbinata","iNatAg/iris_germanica","iNatAg/iris_missouriensis","iNatAg/iris_pseudacorus","iNatAg/iris_pseudoacorus","iNatAg/iris_virginica","iNatAg/isatis_tinctoria","iNatAg/ischaemum_ciliare","iNatAg/ischaemum_muticum","iNatAg/ischaemum_rugosum","iNatAg/iseilema_vaginiflorum","iNatAg/iva_angustifolia","iNatAg/iva_annua","iNatAg/jacaranda_copaia","iNatAg/jacaranda_mimosifolia","iNatAg/jatropha_curcas","iNatAg/jatropha_gossypifolia","iNatAg/jatropha_gossypiifolia","iNatAg/juglans_hindsii","iNatAg/juglans_nigra","iNatAg/juglans_regia","iNatAg/juncus_bufonius","iNatAg/juncus_effusus","iNatAg/juniperus_communis","iNatAg/juniperus_occidentalis","iNatAg/juniperus_pinchotii","iNatAg/juniperus_procera","iNatAg/juniperus_sabina","iNatAg/justicia_adhatoda","iNatAg/kalmia_angustifolia","iNatAg/khaya_anthotheca","iNatAg/khaya_senegalensis","iNatAg/kigelia_pinnata","iNatAg/kyllinga_gracillima","iNatAg/kyllinga_odorata","iNatAg/lablab_purpureus","iNatAg/lactuca_canadensis","iNatAg/lactuca_indica","iNatAg/lactuca_saligna","iNatAg/lactuca_serriola","iNatAg/lactuca_virosa","iNatAg/lagascea_mollis","iNatAg/lagenaria_siceraria","iNatAg/lagerstroemia_flos-reginae","iNatAg/lagerstroemia_lanceolata","iNatAg/lagerstroemia_parviflora","iNatAg/laguncularia_racemosa","iNatAg/lamium_album","iNatAg/lamium_amplexicaule","iNatAg/lamium_maculatum","iNatAg/lamium_purpureum","iNatAg/lannea_coromandelica","iNatAg/lannea_edulis","iNatAg/lansium_domesticum","iNatAg/lantana_camara","iNatAg/lapsana_communis","iNatAg/larix_decidua","iNatAg/larrea_divaricata","iNatAg/lathyrus_angulatus","iNatAg/lathyrus_cicera","iNatAg/lathyrus_hirsutus","iNatAg/lathyrus_latifolius","iNatAg/lathyrus_ochrus","iNatAg/lathyrus_odoratus","iNatAg/lathyrus_palustris","iNatAg/lathyrus_pratensis","iNatAg/lathyrus_pubescens","iNatAg/lathyrus_sativus","iNatAg/lathyrus_tingitanus","iNatAg/lathyrus_tuberosus","iNatAg/laurus_nobilis","iNatAg/lavandula_angustifolia","iNatAg/lavandula_dentata","iNatAg/lavandula_latifolia","iNatAg/lawsonia_inermis","iNatAg/ledum_groenlandicum","iNatAg/leersia_hexandra","iNatAg/leersia_lenticularis","iNatAg/lemna_aequinoctialis","iNatAg/lemna_gibba","iNatAg/lemna_minor","iNatAg/lemna_trisulca","iNatAg/lens_culinaris","iNatAg/leontodon_autumnale","iNatAg/leontodon_autumnalis","iNatAg/leontodon_hirtus","iNatAg/leontodon_saxatilis","iNatAg/leontopodium_alpinum","iNatAg/leonurus_cardiaca","iNatAg/leonurus_marrubiastrum","iNatAg/leonurus_sibericus","iNatAg/leonurus_sibiricus","iNatAg/lepidium_austrinum","iNatAg/lepidium_chalepense","iNatAg/lepidium_didymum","iNatAg/lepidium_draba","iNatAg/lepidium_lasiocarpum","iNatAg/lepidium_latifolium","iNatAg/lepidium_perfoliatum","iNatAg/lepidium_ruderale","iNatAg/lepidium_sativum","iNatAg/lepidium_virginicum","iNatAg/leptochloa_chinensis","iNatAg/leptochloa_fusca","iNatAg/leptochloa_nealleyi","iNatAg/lespedeza_cuneata","iNatAg/lespedeza_striata","iNatAg/lesquerella_fendleri","iNatAg/leucaena_diversifolia","iNatAg/leucaena_leucocephala","iNatAg/leucanthemum_vulgare","iNatAg/leucojum_aestivum","iNatAg/levisticum_officinale","iNatAg/liatris_mucronata","iNatAg/licuala_ramsayi","iNatAg/ligustrum_ovalifolium","iNatAg/ligustrum_vulgare","iNatAg/lilium_canadense","iNatAg/lilium_candidum","iNatAg/limnanthes_alba","iNatAg/limnophila_sessiliflora","iNatAg/linaria_vulgaris","iNatAg/lindernia_grandiflora","iNatAg/linum_usitatissimum","iNatAg/lippia_alba","iNatAg/liquidambar_styraciflua","iNatAg/liriodendron_tulipifera","iNatAg/litchi_chinensis","iNatAg/lithospermum_arvense","iNatAg/lithospermum_officinale","iNatAg/livistona_australis","iNatAg/lobelia_inflata","iNatAg/lobelia_siphilitica","iNatAg/lolium_multiflorum","iNatAg/lolium_perenne","iNatAg/lolium_rigidum","iNatAg/lolium_temulentum","iNatAg/lonchocarpus_laxiflorus","iNatAg/lonicera_caerulea","iNatAg/lonicera_caprifolium","iNatAg/lonicera_periclymenum","iNatAg/lonicera_sempervirens","iNatAg/lonicera_tartarica","iNatAg/lonicera_tatarica","iNatAg/lonicera_xylosteum","iNatAg/lophostemon_suaveolens","iNatAg/lotus_corniculatus","iNatAg/lotus_creticus","iNatAg/lotus_edulis","iNatAg/lotus_halophilus","iNatAg/lotus_parviflorus","iNatAg/lotus_tenuis","iNatAg/lotus_uliginosus","iNatAg/loudetia_simplex","iNatAg/ludwigia_adscendens","iNatAg/ludwigia_alternifolia","iNatAg/luffa_acutangula","iNatAg/luffa_cylindrica","iNatAg/lumnitzera_littorea","iNatAg/lumnitzera_racemosa","iNatAg/lunaria_annua","iNatAg/lupinus_albus","iNatAg/lupinus_angustifolius","iNatAg/lupinus_arboreus","iNatAg/lupinus_cosentinii","iNatAg/lupinus_luteus","iNatAg/lupinus_mutabilis","iNatAg/lupinus_pilosus","iNatAg/lychnis_chalcedonica","iNatAg/lychnis_flos-cuculi","iNatAg/lychnis_viscaria","iNatAg/lycium_barbarum","iNatAg/lycium_berlandieri","iNatAg/lycium_chinense","iNatAg/lycium_ferocissimum","iNatAg/lycium_halimifolium","iNatAg/lycopersicon_esculentum","iNatAg/lycopodium_clavatum","iNatAg/lycopus_europaeus","iNatAg/lysimachia_ciliata","iNatAg/lysimachia_nummularia","iNatAg/lysimachia_punctata","iNatAg/lysimachia_vulgaris","iNatAg/lythrum_hyssopifolia","iNatAg/lythrum_salicaria","iNatAg/lythrum_virgatum","iNatAg/macadamia_integrifolia","iNatAg/macadamia_tetraphylla","iNatAg/macaranga_tanarius","iNatAg/macroptilium_atropurpureum","iNatAg/macroptilium_erythroloma","iNatAg/macroptilium_gracile","iNatAg/macroptilium_lathyroides","iNatAg/macroptilium_longepedunculatum","iNatAg/macrotyloma_axillare","iNatAg/maesopsis_eminii","iNatAg/maianthemum_canadense","iNatAg/majorana_hortensis","iNatAg/malachra_alceifolia","iNatAg/mallotus_philippensis","iNatAg/malpighia_glabra","iNatAg/malus_domestica","iNatAg/malus_sylvestris","iNatAg/malva_alcea","iNatAg/malva_moschata","iNatAg/malva_nicaeensis","iNatAg/malva_parviflora","iNatAg/malva_pusilla","iNatAg/malva_rotundifolia","iNatAg/malva_silvestris","iNatAg/malva_sylvestris","iNatAg/mammea_americana","iNatAg/mangifera_indica","iNatAg/manihot_esculenta","iNatAg/manilkara_zapota","iNatAg/maranta_arundinacea","iNatAg/markhamia_lutea","iNatAg/marrubium_vulgare","iNatAg/marsilea_quadrifolia","iNatAg/matricaria_chamomila","iNatAg/matricaria_chamomilla","iNatAg/matricaria_discoidea","iNatAg/matricaria_perforata","iNatAg/matricaria_recutita","iNatAg/mauritia_flexuosa","iNatAg/mayaca_fluviatilis","iNatAg/medicago_arabica","iNatAg/medicago_falcata","iNatAg/medicago_intertexta","iNatAg/medicago_laciniata","iNatAg/medicago_littoralis","iNatAg/medicago_lupulina","iNatAg/medicago_marina","iNatAg/medicago_minima","iNatAg/medicago_orbicularis","iNatAg/medicago_polymorpha","iNatAg/medicago_rigidula","iNatAg/medicago_rugosa","iNatAg/medicago_sativa","iNatAg/medicago_scutellata","iNatAg/medicago_tornata","iNatAg/medicago_truncatula","iNatAg/medicago_turbinata","iNatAg/melaleuca_bracteata","iNatAg/melaleuca_cajuputi","iNatAg/melaleuca_dealbata","iNatAg/melaleuca_lanceolata","iNatAg/melaleuca_leucadendron","iNatAg/melaleuca_nervosa","iNatAg/melaleuca_quinquenervia","iNatAg/melaleuca_viridiflora","iNatAg/melampyrum_lineare","iNatAg/melastoma_malabathricum","iNatAg/melastoma_melabathricum","iNatAg/melia_azedarach","iNatAg/melica_decumbens","iNatAg/melicoccus_bijugatus","iNatAg/melilotus_albus","iNatAg/melilotus_indica","iNatAg/melilotus_officinalis","iNatAg/melilotus_suaveolens","iNatAg/melinis_minutiflora","iNatAg/melissa_officinalis","iNatAg/melochia_corchorifolia","iNatAg/melothria_pendula","iNatAg/mentha_arvensis","iNatAg/mentha_longifolia","iNatAg/mentha_piperita","iNatAg/mentha_pulegium","iNatAg/mentha_rotundifolia","iNatAg/mentha_spicata","iNatAg/menyanthes_trifoliata","iNatAg/mercurialis_annua","iNatAg/mesembryanthemum_cristallinum","iNatAg/mesembryanthemum_noctiflorum","iNatAg/mespilus_germanica","iNatAg/mesua_ferrea","iNatAg/metroxylon_sagu","iNatAg/michelia_champaca","iNatAg/microstegium_ciliatum","iNatAg/miliusa_velutina","iNatAg/mimosa_casta","iNatAg/mimosa_dutrae","iNatAg/mimosa_pigra","iNatAg/mimosa_pudica","iNatAg/mirabilis_jalapa","iNatAg/molinia_caerulea","iNatAg/mollugo_verticillata","iNatAg/momordica_charantia","iNatAg/momordica_cochinchinensis","iNatAg/monarda_fistulosa","iNatAg/monarda_punctata","iNatAg/monochoria_hastata","iNatAg/monochoria_vaginalis","iNatAg/monocymbium_ceresiiforme","iNatAg/monstera_deliciosa","iNatAg/montanoa_hibiscifolia","iNatAg/morinda_citrifolia","iNatAg/moringa_oleifera","iNatAg/morus_alba","iNatAg/morus_nigra","iNatAg/morus_rubra","iNatAg/mucuna_pruriens","iNatAg/muntingia_calabura","iNatAg/murraya_koenigii","iNatAg/musa_acuminata","iNatAg/musa_acuminata_×_balbisiana","iNatAg/musa_balbisiana","iNatAg/musa_sapientium","iNatAg/musanga_cecropioides","iNatAg/muscari_comosum","iNatAg/myosotis_alpestris","iNatAg/myosurus_minimus","iNatAg/myrica_cerifera","iNatAg/myriophyllum_heterophyllum","iNatAg/myriophyllum_implicatum","iNatAg/myriophyllum_sibiricum","iNatAg/myriophyllum_spicatum","iNatAg/myriophyllum_verticillatum","iNatAg/myristica_fragrans","iNatAg/myroxylon_balsamum","iNatAg/myrsine_africana","iNatAg/myrtus_communis","iNatAg/nardus_stricta","iNatAg/nasturtium_officinale","iNatAg/nauclea_orientalis","iNatAg/nelumbo_nucifera","iNatAg/neofabricia_myrtifolia","iNatAg/neoglaziovia_variegata","iNatAg/neonotonia_wightii","iNatAg/nepeta_cataria","iNatAg/nephelium_lappaceum","iNatAg/nephelium_mutabile","iNatAg/nerium_oleander","iNatAg/nicotiana_quadrivalvis","iNatAg/nicotiana_rustica","iNatAg/nicotiana_trigonophylla","iNatAg/nigella_sativa","iNatAg/nothofagus_cunninghamii","iNatAg/nothofagus_moorei","iNatAg/nothoscordum_borbonicum","iNatAg/nuphar_advena","iNatAg/nuphar_lutea","iNatAg/nymphaea_alba","iNatAg/nypa_fruticans","iNatAg/ochroma_pyramidale","iNatAg/ocimum_americanum","iNatAg/ocimum_basilicum","iNatAg/ocimum_tenuiflorum","iNatAg/octomeles_sumatrana","iNatAg/oenanthe_javanica","iNatAg/oenothera_albicaulis","iNatAg/oenothera_biennis","iNatAg/oenothera_parviflora","iNatAg/oenothera_perennis","iNatAg/oldenlandia_corymbosa","iNatAg/olea_africana","iNatAg/olea_capensis","iNatAg/olea_europaea","iNatAg/olea_europea","iNatAg/oncosperma_tigillarium","iNatAg/onobrychis_viciifolia","iNatAg/ononis_alopecuroides","iNatAg/ononis_spinosa","iNatAg/onopordum_acanthium","iNatAg/onopordum_illyricum","iNatAg/onosmodium_discolor","iNatAg/opuntia_ficus-indica","iNatAg/opuntia_leptocaulis","iNatAg/opuntia_polyacantha","iNatAg/opuntia_polycantha","iNatAg/origanum_majorana","iNatAg/origanum_onites","iNatAg/origanum_vulgare","iNatAg/ornithogalum_nutans","iNatAg/ornithogalum_umbellatum","iNatAg/ornithopus_compressus","iNatAg/ornithopus_sativus","iNatAg/orobanche_flava","iNatAg/orobanche_ludoviciana","iNatAg/orobanche_minor","iNatAg/orobanche_ramosa","iNatAg/orontium_aquaticum","iNatAg/orthosiphon_aristatus","iNatAg/oryza_sativa","iNatAg/oryzopsis_holciformis","iNatAg/oryzopsis_miliacea","iNatAg/osmorhiza_berteroi","iNatAg/osmunda_regalis","iNatAg/ottochloa_nodosa","iNatAg/oxalis_acetosella","iNatAg/oxalis_corniculata","iNatAg/oxalis_pes-caprae","iNatAg/oxalis_pescaprae","iNatAg/oxalis_stricta","iNatAg/oxalis_tuberosa","iNatAg/oxytropis_lambertii","iNatAg/pachyrhizus_erosus","iNatAg/paederia_cruddasiana","iNatAg/paederia_foetida","iNatAg/paeonia_officinalis","iNatAg/panax_ginseng","iNatAg/panax_quinquefolius","iNatAg/pangium_edule","iNatAg/panicum_antidotale","iNatAg/panicum_capillare","iNatAg/panicum_coloratum","iNatAg/panicum_ecklonii","iNatAg/panicum_gattingeri","iNatAg/panicum_maximum","iNatAg/panicum_miliaceum","iNatAg/panicum_natalense","iNatAg/panicum_obtusum","iNatAg/panicum_pilosum","iNatAg/panicum_racemosum","iNatAg/panicum_repens","iNatAg/panicum_sphaerocarpon","iNatAg/panicum_trichocladum","iNatAg/panicum_turgidum","iNatAg/panicum_virgatum","iNatAg/papaver_argemone","iNatAg/papaver_bracteatum","iNatAg/papaver_dubium","iNatAg/papaver_rhoeas","iNatAg/papaver_somniferum","iNatAg/parietaria_floridana","iNatAg/parietaria_officinalis","iNatAg/parinari_curatellifolia","iNatAg/parkia_biglobosa","iNatAg/parkia_speciosa","iNatAg/parkinsonia_aculeata","iNatAg/parnassia_palustris","iNatAg/parsonsia_latifolia","iNatAg/parthenium_argentatum","iNatAg/parthenium_hysterophorus","iNatAg/paspalum_conjugatum","iNatAg/paspalum_dilatatum","iNatAg/paspalum_distichum","iNatAg/paspalum_nicorae","iNatAg/paspalum_notatum","iNatAg/paspalum_plicatulum","iNatAg/paspalum_scrobiculatum","iNatAg/paspalum_separatum","iNatAg/paspalum_urvillei","iNatAg/paspalum_vaginatum","iNatAg/passiflora_bicornis","iNatAg/passiflora_edulis","iNatAg/passiflora_foetida","iNatAg/passiflora_incarnata","iNatAg/passiflora_laurifolia","iNatAg/passiflora_ligularis","iNatAg/passiflora_lutea","iNatAg/passiflora_mollissima","iNatAg/passiflora_quadrangularis","iNatAg/passiflora_suberosa","iNatAg/pastinaca_sativa","iNatAg/paullinia_cupana","iNatAg/paulownia_tomentosa","iNatAg/peganum_harmala","iNatAg/pelargonium_graveolens","iNatAg/peltandra_sagittifolia","iNatAg/peltandra_virginica","iNatAg/peltophorum_africanum","iNatAg/peltophorum_pterocarpum","iNatAg/pennisetum_clandestinum","iNatAg/pennisetum_glaucum","iNatAg/pennisetum_macrourum","iNatAg/pennisetum_pedicellatum","iNatAg/pennisetum_polystachyon","iNatAg/pennisetum_purpureum","iNatAg/pennisetum_setaceum","iNatAg/pennisetum_villosum","iNatAg/perilla_frutescens","iNatAg/persea_americana","iNatAg/persicaria_maculosa","iNatAg/persoonia_falcata","iNatAg/petalostigma_pubescens","iNatAg/petasites_albus","iNatAg/petasites_hybridus","iNatAg/petroselinum_crispum","iNatAg/petunia_parviflora","iNatAg/peucedanum_ostruthium","iNatAg/phalaris_aquatica","iNatAg/phalaris_arundinacea","iNatAg/phalaris_arundinaceae","iNatAg/phalaris_brachystachys","iNatAg/phalaris_canariensis","iNatAg/phalaris_caroliniana","iNatAg/phalaris_coerulescens","iNatAg/phalaris_paradoxa","iNatAg/phaseolus_acutifolius","iNatAg/phaseolus_coccineus","iNatAg/phaseolus_lunatus","iNatAg/phaseolus_vulgaris","iNatAg/phleum_alpinum","iNatAg/phleum_pratense","iNatAg/phoenix_dactylifera","iNatAg/phoenix_reclinata","iNatAg/phoenix_sylvestris","iNatAg/phormium_tenax","iNatAg/phragmites_australis","iNatAg/phragmites_communis","iNatAg/phragmites_karka","iNatAg/phyllanthus_niruri","iNatAg/phyllanthus_tenellus","iNatAg/phyllanthus_urinaria","iNatAg/phyllocladus_aspleniifolius","iNatAg/physalis_alkekengi","iNatAg/physalis_angulata","iNatAg/physalis_heterophylla","iNatAg/physalis_lancifolia","iNatAg/physalis_peruviana","iNatAg/physalis_philadelphica","iNatAg/physalis_pubescens","iNatAg/physalis_virginiana","iNatAg/physalis_viscosa","iNatAg/phytolacca_acinosa","iNatAg/phytolacca_americana","iNatAg/phytolacca_dioica","iNatAg/picea_abies","iNatAg/picea_omorica","iNatAg/picea_omorika","iNatAg/picris_echioides","iNatAg/picris_hieracioides","iNatAg/piliostigma_reticulatum","iNatAg/piliostigma_thonningii","iNatAg/pimenta_dioica","iNatAg/pimenta_racemosa","iNatAg/pimpinella_anisum","iNatAg/pimpinella_saxifraga","iNatAg/pinguicula_vulgaris","iNatAg/pinus_ayacahuite","iNatAg/pinus_brutia","iNatAg/pinus_canariensis","iNatAg/pinus_caribaea","iNatAg/pinus_chiapensis","iNatAg/pinus_douglasiana","iNatAg/pinus_durangensis","iNatAg/pinus_greggii","iNatAg/pinus_halepensis","iNatAg/pinus_hartwegii","iNatAg/pinus_kesiya","iNatAg/pinus_merkusii","iNatAg/pinus_montezumae","iNatAg/pinus_mugo","iNatAg/pinus_occidentalis","iNatAg/pinus_oocarpa","iNatAg/pinus_palustris","iNatAg/pinus_patula","iNatAg/pinus_pinaster","iNatAg/pinus_pinea","iNatAg/pinus_ponderosa","iNatAg/pinus_pseudostrobus","iNatAg/pinus_radiata","iNatAg/pinus_roxburghii","iNatAg/pinus_sylvestris","iNatAg/pinus_tabuliformis","iNatAg/pinus_taeda","iNatAg/pinus_teocote","iNatAg/piper_aduncum","iNatAg/piper_betle","iNatAg/piper_longum","iNatAg/piper_methysticum","iNatAg/piper_nigrum","iNatAg/pistacia_atlantica","iNatAg/pistacia_lentiscus","iNatAg/pistacia_vera","iNatAg/pistia_stratiotes","iNatAg/pisum_sativum","iNatAg/pithecellobium_dulce","iNatAg/pittosporum_resiniferum","iNatAg/pittosporum_undulatum","iNatAg/plagiobothrys_canescens","iNatAg/plantago_coronopus","iNatAg/plantago_heterophylla","iNatAg/plantago_indica","iNatAg/plantago_lanceolata","iNatAg/plantago_major","iNatAg/plantago_media","iNatAg/plantago_ovata","iNatAg/plantago_psyllium","iNatAg/plantago_virginica","iNatAg/platanus_orientalis","iNatAg/poa_alpina","iNatAg/poa_annua","iNatAg/poa_bulbosa","iNatAg/poa_compressa","iNatAg/poa_cuspidata","iNatAg/poa_fendleriana","iNatAg/poa_nemoralis","iNatAg/poa_pratensis","iNatAg/poa_trivialis","iNatAg/podocarpus_elatus","iNatAg/podocarpus_falcatus","iNatAg/poeciloneuron_indicum","iNatAg/pogostemon_cablin","iNatAg/polemonium_caeruleum","iNatAg/polemonium_micranthum","iNatAg/polyalthia_fragrans","iNatAg/polycarpon_tetraphyllum","iNatAg/polygonatum_orientale","iNatAg/polygonum_achoreum","iNatAg/polygonum_arenastrum","iNatAg/polygonum_aviculare","iNatAg/polygonum_bistorta","iNatAg/polygonum_convolvulus","iNatAg/polygonum_equisetiforme","iNatAg/polygonum_erectum","iNatAg/polygonum_hydropiper","iNatAg/polygonum_hydropiperoides","iNatAg/polygonum_lapathifolium","iNatAg/polygonum_orientale","iNatAg/polygonum_pensylvanicum","iNatAg/polygonum_perfoliatum","iNatAg/polygonum_persicaria","iNatAg/polygonum_punctatum","iNatAg/polygonum_ramosissimum","iNatAg/polygonum_scandens","iNatAg/polymnia_sonchifolia","iNatAg/polypodium_vulgare","iNatAg/polypogon_interruptus","iNatAg/polypremum_procumbens","iNatAg/polyscias_fulva","iNatAg/polytrichum_commune","iNatAg/pongamia_pinnata","iNatAg/pontederia_cordata","iNatAg/pontederia_rotundifolia","iNatAg/populus_balsamifera","iNatAg/populus_ciliata","iNatAg/populus_deltoides","iNatAg/populus_euphratica","iNatAg/populus_simonii","iNatAg/portulaca_oleracea","iNatAg/portulaca_pilosa","iNatAg/portulaca_pilosa_pilosa","iNatAg/portulaca_quadrifida","iNatAg/potamogeton_diversifolius","iNatAg/potamogeton_epihydrus","iNatAg/potamogeton_filiformis","iNatAg/potamogeton_foliosus","iNatAg/potamogeton_friesii","iNatAg/potamogeton_gramineus","iNatAg/potamogeton_illinoensis","iNatAg/potamogeton_natans","iNatAg/potamogeton_nodosus","iNatAg/potamogeton_pectinatus","iNatAg/potamogeton_praelongus","iNatAg/potamogeton_pusillus","iNatAg/potamogeton_zosteriformis","iNatAg/potentilla_anserina","iNatAg/potentilla_argentea","iNatAg/potentilla_erecta","iNatAg/potentilla_fruticosa","iNatAg/potentilla_intermedia","iNatAg/potentilla_norvegica","iNatAg/potentilla_norvegicae","iNatAg/potentilla_recta","iNatAg/potentilla_reptans","iNatAg/potentilla_tridentata","iNatAg/poterium_sanguisorba","iNatAg/pouteria_campechiana","iNatAg/pouteria_lucuma","iNatAg/pouteria_sapota","iNatAg/prasophyllum_elatum","iNatAg/primula_veris","iNatAg/proserpinaca_palustris","iNatAg/proserpinaca_pectinata","iNatAg/prosopis_affinis","iNatAg/prosopis_africana","iNatAg/prosopis_alba","iNatAg/prosopis_chilensis","iNatAg/prosopis_cineraria","iNatAg/prosopis_glandulosa","iNatAg/prosopis_juliflora","iNatAg/prosopis_nigra","iNatAg/prosopis_pallida","iNatAg/prosopis_tamarugo","iNatAg/prosopis_velutina","iNatAg/prunella_vulgaris","iNatAg/prunus_africana","iNatAg/prunus_amygdalus","iNatAg/prunus_armeniaca","iNatAg/prunus_avium","iNatAg/prunus_capuli","iNatAg/prunus_cerasus","iNatAg/prunus_domestica","iNatAg/prunus_laurocerasus","iNatAg/prunus_mahaleb","iNatAg/prunus_mume","iNatAg/prunus_padus","iNatAg/prunus_pensylvanica","iNatAg/prunus_persica","iNatAg/prunus_salicina","iNatAg/prunus_spinosa","iNatAg/prunus_virginiana","iNatAg/psathyrostachys_juncea","iNatAg/psidium_cattleianum","iNatAg/psidium_friedrichsthalianum","iNatAg/psidium_guajava","iNatAg/psophocarpus_tetragonolobus","iNatAg/psoralea_repens","iNatAg/ptelea_trifoliata","iNatAg/pterocarpus_angolensis","iNatAg/pterocarpus_dalbergioides","iNatAg/pterocarpus_erinaceus","iNatAg/pterocarpus_indicus","iNatAg/pterocarpus_lucens","iNatAg/pterocarpus_macrocarpus","iNatAg/pterocarpus_marsupium","iNatAg/pterocarpus_santalinoides","iNatAg/pterocarpus_santalinus","iNatAg/pueraria_lobata","iNatAg/pueraria_phaseoloides","iNatAg/pulmonaria_officinalis","iNatAg/punica_granatum","iNatAg/pycnanthus_angolensis","iNatAg/pyrola_rotundifolia","iNatAg/pyrus_communis","iNatAg/pyrus_pyrifolia","iNatAg/quercus_agrifolia","iNatAg/quercus_alba","iNatAg/quercus_bicolor","iNatAg/quercus_chrysolepis","iNatAg/quercus_dumosa","iNatAg/quercus_fusiformis","iNatAg/quercus_ilex","iNatAg/quercus_incana","iNatAg/quercus_lanata","iNatAg/quercus_nigra","iNatAg/quercus_phellos","iNatAg/quercus_robur","iNatAg/quercus_semecarpifolia","iNatAg/quercus_suber","iNatAg/quercus_virginiana","iNatAg/quisqualis_indica","iNatAg/ranunculus_abortivus","iNatAg/ranunculus_acris","iNatAg/ranunculus_arbortivus","iNatAg/ranunculus_arvensis","iNatAg/ranunculus_bulbosus","iNatAg/ranunculus_californicus","iNatAg/ranunculus_cymbalaria","iNatAg/ranunculus_ficaria","iNatAg/ranunculus_flabellaris","iNatAg/ranunculus_muricatulus","iNatAg/ranunculus_muricatus","iNatAg/ranunculus_occidentalis","iNatAg/ranunculus_orthorhynchus","iNatAg/ranunculus_parviflorus","iNatAg/ranunculus_sceleratus","iNatAg/ranunculus_testiculatus","iNatAg/ranunculus_trichophyllus","iNatAg/raphanus_raphanistrum","iNatAg/raphanus_sativus","iNatAg/rauvolfia_caffra","iNatAg/rauvolfia_serpentina","iNatAg/reseda_alba","iNatAg/reseda_lutea","iNatAg/retama_monosperma","iNatAg/rhamnus_cathartica","iNatAg/rhamnus_prinoides","iNatAg/rheum_palmatum","iNatAg/rheum_rhaponticum","iNatAg/rhigozum_trichotomum","iNatAg/rhinanthus_crista-galli","iNatAg/rhinanthus_minor","iNatAg/rhizophora_mangle","iNatAg/rhizophora_mucronata","iNatAg/rhizophora_stylosa","iNatAg/rhodiola_rosea","iNatAg/rhododendron_ferrugineum","iNatAg/rhus_copallinum","iNatAg/rhus_glabra","iNatAg/rhus_typhina","iNatAg/rhynchosia_minima","iNatAg/rhynchosia_senna","iNatAg/rhynchosia_sublobata","iNatAg/ribes_hirtellum","iNatAg/ribes_nigrum","iNatAg/ribes_rubrum","iNatAg/ribes_uva-crispa","iNatAg/ribes_viscosissimum","iNatAg/richardia_brasiliensis","iNatAg/richardia_scabra","iNatAg/ricinus_communis","iNatAg/ricinus_comunis","iNatAg/rivina_humilis","iNatAg/robinia_pseudoacacia","iNatAg/roemeria_refracta","iNatAg/rosa_canina","iNatAg/rosa_cinnamomea","iNatAg/rosa_eglanteria","iNatAg/rosa_pendulina","iNatAg/rosa_pimpinellifolia","iNatAg/rosa_rubiginosa","iNatAg/rosa_spinosissima","iNatAg/roseodendron_donnell-smithii","iNatAg/rosmarinus_officinalis","iNatAg/rubia_tinctorum","iNatAg/rubus_ellipticus","iNatAg/rubus_fructicosus","iNatAg/rubus_fruticosus","iNatAg/rubus_hispidus","iNatAg/rubus_idaeus","iNatAg/rubus_moluccanus","iNatAg/rubus_occidentalis","iNatAg/rubus_pensilvanicus","iNatAg/rudbeckia_amplexicaulis","iNatAg/rudbeckia_hirta","iNatAg/rudbeckia_laciniata","iNatAg/rudbeckia_triloba","iNatAg/rumex_acetosa","iNatAg/rumex_acetosella","iNatAg/rumex_aquaticus","iNatAg/rumex_crispus","iNatAg/rumex_dentatus","iNatAg/rumex_hymenosepalus","iNatAg/rumex_longifolius","iNatAg/rumex_maritimus","iNatAg/rumex_obtusifolius","iNatAg/rumex_patienta","iNatAg/rumex_patientia","iNatAg/rumex_pseudonatronatus","iNatAg/rumex_pulcher","iNatAg/rumex_verticillatus","iNatAg/ruppia_maritima","iNatAg/ruscus_aculeatus","iNatAg/ruta_graveolens","iNatAg/saccharum_officinarum","iNatAg/saccharum_sinense","iNatAg/saccharum_spontaneum","iNatAg/sacorstemma_cynanchoides","iNatAg/sagina_procumbens","iNatAg/sagittaria_kurziana","iNatAg/sagittaria_lancifolia","iNatAg/sagittaria_latifolia","iNatAg/sagittaria_sagittifolia","iNatAg/salacca_wallichiana","iNatAg/salacca_zalacca","iNatAg/salicornia_bigelovii","iNatAg/salix_alba","iNatAg/salix_caprea","iNatAg/salix_laevigata","iNatAg/salix_pentandra","iNatAg/salix_viminalis","iNatAg/salsola_kali","iNatAg/salsola_tragus","iNatAg/salsola_vermiculata","iNatAg/salvadora_persica","iNatAg/salvia_lyrata","iNatAg/salvia_officinalis","iNatAg/salvia_sclarea","iNatAg/salvia_verticillata","iNatAg/salvinia_auriculata","iNatAg/samanea_saman","iNatAg/sambucus_canadensis","iNatAg/sambucus_canadiensis","iNatAg/sambucus_cerulea","iNatAg/sambucus_ebulus","iNatAg/sambucus_nigra","iNatAg/sambucus_racemosa","iNatAg/samolus_parviflorus","iNatAg/samolus_valerandi","iNatAg/sanguisorba_minor","iNatAg/sanguisorba_officinalis","iNatAg/sanicula_europaea","iNatAg/santalum_acuminatum","iNatAg/santalum_album","iNatAg/santolina_chamaecyparissus","iNatAg/sapindus_emarginatus","iNatAg/sapindus_saponaria","iNatAg/sapium_sebiferum","iNatAg/saponaria_officinalis","iNatAg/sarcostemma_cynanchoides","iNatAg/satureja_hortensis","iNatAg/satureja_montana","iNatAg/sauropus_androgynus","iNatAg/saururus_cernuus","iNatAg/scandix_pecten-veneris","iNatAg/schima_wallichii","iNatAg/schinus_molle","iNatAg/schinus_terebinthifolia","iNatAg/schinus_terebinthifolius","iNatAg/schismus_arabicus","iNatAg/schizolobium_parahyba","iNatAg/schizomeria_ovata","iNatAg/schleichera_oleosa","iNatAg/scirpus_lacustris","iNatAg/scleranthus_annuus","iNatAg/sclerocarya_caffra","iNatAg/scoparia_dulcis","iNatAg/scorzonera_laciniata","iNatAg/scrophularia_lanceolata","iNatAg/searsia_angustifolia","iNatAg/secale_cereale","iNatAg/secale_montanum","iNatAg/sechium_edule","iNatAg/securidaca_longepedunculata","iNatAg/securidaca_longipedunculata","iNatAg/sedum_acre","iNatAg/sedum_telephium","iNatAg/sehima_nervosum","iNatAg/sempervivum_arachnoideum","iNatAg/sempervivum_tectorum","iNatAg/senecio_elegans","iNatAg/senecio_jacobaea","iNatAg/senecio_madagascariensis","iNatAg/senecio_plattensis","iNatAg/senecio_squalidus","iNatAg/senecio_sylvaticus","iNatAg/senecio_viscosus","iNatAg/senecio_vulgaris","iNatAg/senna_spectabilis","iNatAg/serenoa_repens","iNatAg/sesamum_indicum","iNatAg/sesbania_bispinosa","iNatAg/sesbania_cannabina","iNatAg/sesbania_exaltata","iNatAg/sesbania_formosa","iNatAg/sesbania_grandiflora","iNatAg/sesbania_pachycarpa","iNatAg/sesbania_sesban","iNatAg/setaria_incrassata","iNatAg/setaria_italica","iNatAg/setaria_lindenbergiana","iNatAg/setaria_pumila","iNatAg/seymeria_pectinata","iNatAg/shorea_robusta","iNatAg/shorea_talura","iNatAg/sicyos_angulatus","iNatAg/sida_angustifolia","iNatAg/sida_cordifolia","iNatAg/sida_spinosa","iNatAg/silene_antirrhina","iNatAg/silene_armeria","iNatAg/silene_conica","iNatAg/silene_conoidea","iNatAg/silene_gallica","iNatAg/silene_noctiflora","iNatAg/silene_pendula","iNatAg/silphium_asperrimum","iNatAg/silphium_integrifolium","iNatAg/silphium_laciniatum","iNatAg/silybum_marianum","iNatAg/simarouba_glauca","iNatAg/simmondsia_chinensis","iNatAg/simsia_auriculata","iNatAg/sinapis_alba","iNatAg/sinapis_arvensis","iNatAg/sinapis_incana","iNatAg/siphonochilus_aethiopicus","iNatAg/sisymbrium_altissimum","iNatAg/sisymbrium_erysimoides","iNatAg/sisymbrium_irio","iNatAg/sisymbrium_officinale","iNatAg/sisymbrium_orientale","iNatAg/sisymbrium_sophia","iNatAg/sisyrinchium_montanum","iNatAg/sloanea_woollsii","iNatAg/smilax_aspera","iNatAg/smilax_bona-nox","iNatAg/smilax_laurifolia","iNatAg/smilax_rotundifolia","iNatAg/solanum_aethiopicum","iNatAg/solanum_americanum","iNatAg/solanum_capsicoides","iNatAg/solanum_carolinense","iNatAg/solanum_coriaceum","iNatAg/solanum_dimidiatum","iNatAg/solanum_diphyllum","iNatAg/solanum_dulcamara","iNatAg/solanum_elaeagnifolium","iNatAg/solanum_eleagnifolium","iNatAg/solanum_ellipticum","iNatAg/solanum_ferox","iNatAg/solanum_heterodoxum","iNatAg/solanum_incanum","iNatAg/solanum_jamaicense","iNatAg/solanum_lanceolatum","iNatAg/solanum_macrocarpon","iNatAg/solanum_mammosum","iNatAg/solanum_marginatum","iNatAg/solanum_mauritianum","iNatAg/solanum_melongena","iNatAg/solanum_muricatum","iNatAg/solanum_nigrum","iNatAg/solanum_physalifolium","iNatAg/solanum_pseudo-capsicum","iNatAg/solanum_pseudocapsicum","iNatAg/solanum_quitoense","iNatAg/solanum_sisymbrifolium","iNatAg/solanum_sisymbriifolium","iNatAg/solanum_tampicense","iNatAg/solanum_torvum","iNatAg/solanum_tuberosum","iNatAg/solanum_violaceum","iNatAg/soldanella_alpina","iNatAg/solidago_californica","iNatAg/solidago_canadensis","iNatAg/solidago_fistulosa","iNatAg/solidago_missouriensis","iNatAg/solidago_nemoralis","iNatAg/solidago_rigida","iNatAg/solidago_sempervirens","iNatAg/solidago_virgaurea","iNatAg/sonchus_arvensis","iNatAg/sonchus_oleraceus","iNatAg/sonchus_palustris","iNatAg/sonneratia_apetala","iNatAg/sonneratia_caseolaris","iNatAg/sorbus_aucuparia","iNatAg/sorbus_domestica","iNatAg/sorghum_bicolor","iNatAg/sorghum_drummondii","iNatAg/sorghum_halepense","iNatAg/soymida_febrifuga","iNatAg/sparganium_americanum","iNatAg/sparganium_erectum","iNatAg/spartina_pectinata","iNatAg/spartium_junceum","iNatAg/spathodea_campanulata","iNatAg/spergula_arvensis","iNatAg/spermacoce_verticillata","iNatAg/spinacia_oleracea","iNatAg/spinifex_hirsutus","iNatAg/spirea_tomentosa","iNatAg/spodiopogon_sibiricus","iNatAg/spondias_cythera","iNatAg/spondias_mombin","iNatAg/spondias_purpurea","iNatAg/sporobolus_airoides","iNatAg/sporobolus_fimbriatus","iNatAg/sporobolus_maritimus","iNatAg/sporobolus_neglectus","iNatAg/sporobolus_spicatus","iNatAg/sporobolus_virginicus","iNatAg/stachys_affinis","iNatAg/stachys_palustris","iNatAg/stachytarpheta_incana","iNatAg/stachytarpheta_indica","iNatAg/stellaria_graminea","iNatAg/stellaria_holostea","iNatAg/stellaria_media","iNatAg/stenotaphrum_secundatum","iNatAg/sterculia_foetida","iNatAg/sterculia_urens","iNatAg/sterculia_villosa","iNatAg/stereospermum_kunthianum","iNatAg/stevia_rebaudiana","iNatAg/stipa_baicalensis","iNatAg/stipa_brachychaeta","iNatAg/stipa_capillata","iNatAg/stipa_glareosa","iNatAg/stipa_grandis","iNatAg/stipa_krylovii","iNatAg/stipa_lagascae","iNatAg/stipa_occidentalis","iNatAg/stipa_parviflora","iNatAg/stipa_tenacissima","iNatAg/stipa_trichotoma","iNatAg/stipagrostis_amabilis","iNatAg/stipagrostis_zeyheri","iNatAg/stratiotes_aloides","iNatAg/strychnos_cocculoides","iNatAg/strychnos_innocua","iNatAg/strychnos_spinosa","iNatAg/stylidium_desertorum","iNatAg/stylosanthes_capitata","iNatAg/stylosanthes_fruticosa","iNatAg/stylosanthes_hamata","iNatAg/stylosanthes_humilis","iNatAg/stylosanthes_scabra","iNatAg/stylosanthes_viscosa","iNatAg/succisa_pratensis","iNatAg/swertia_baicalensis","iNatAg/swietenia_macrophylla","iNatAg/swietenia_mahogani","iNatAg/symphoricarpos_mollis","iNatAg/symphoricarpos_occidentalis","iNatAg/symphoricarpos_orbiculatus","iNatAg/symphoricarpos_rotundifolius","iNatAg/symphytum_officinale","iNatAg/syncarpia_glomulifera","iNatAg/syncarpia_hillii","iNatAg/syzygium_cordatum","iNatAg/syzygium_cumini","iNatAg/syzygium_guineense","iNatAg/syzygium_malaccense","iNatAg/syzygium_taiwanicum","iNatAg/tabebuia_rosea","iNatAg/tabebuia_serratifolia","iNatAg/tagetes_minuta","iNatAg/talinum_triangulare","iNatAg/tamarindus_indica","iNatAg/tamarix_aphylla","iNatAg/tamarix_chinensis","iNatAg/tamarix_gallica","iNatAg/tamarix_parviflora","iNatAg/tanacetum_balsamita","iNatAg/tanacetum_vulgare","iNatAg/taraxacum_officinale","iNatAg/taraxia_breviflora","iNatAg/tarchonanthus_camphoratus","iNatAg/taxodium_distichum","iNatAg/taxus_baccata","iNatAg/tecoma_stans","iNatAg/tectona_grandis","iNatAg/tephrosia_candida","iNatAg/tephrosia_lupinifolia","iNatAg/tephrosia_obovata","iNatAg/tephrosia_purpurea","iNatAg/tephrosia_vogelii","iNatAg/teramnus_labialis","iNatAg/terminalia_arjuna","iNatAg/terminalia_bellirica","iNatAg/terminalia_brownii","iNatAg/terminalia_calamansanai","iNatAg/terminalia_catappa","iNatAg/terminalia_chebula","iNatAg/terminalia_ivorensis","iNatAg/terminalia_mantaly","iNatAg/terminalia_myriocarpa","iNatAg/terminalia_paniculata","iNatAg/terminalia_prunioides","iNatAg/terminalia_sericocarpa","iNatAg/terminalia_tomentosa","iNatAg/tetradymia_canescens","iNatAg/tetragonia_tetragonioides","iNatAg/teucrium_botrys","iNatAg/teucrium_canadense","iNatAg/teucrium_chamaedrys","iNatAg/teucrium_polium","iNatAg/thalia_geniculata","iNatAg/thalictrum_pubescens","iNatAg/thaumatococcus_daniellii","iNatAg/themeda_australis","iNatAg/themeda_quadrivalvis","iNatAg/themeda_triandra","iNatAg/theobroma_bicolor","iNatAg/theobroma_cacao","iNatAg/theobroma_grandiflorum","iNatAg/thermopsis_montana","iNatAg/thermopsis_rhombifolia","iNatAg/thespesia_populnea","iNatAg/thlaspi_arvense","iNatAg/thlaspi_perfoliatum","iNatAg/thuja_occidentalis","iNatAg/thymus_serphyllum","iNatAg/thymus_serpyllum","iNatAg/thymus_vulgaris","iNatAg/thyrsostachys_siamensis","iNatAg/thysanolaena_latifolia","iNatAg/tilia_cordata","iNatAg/tilia_platyphyllos","iNatAg/tipuana_tipu","iNatAg/tithonia_diversifolia","iNatAg/toona_ciliata","iNatAg/torenia_glabra","iNatAg/toxicodendron_pubescens","iNatAg/trachypogon_spicatus","iNatAg/tradescantia_bracteata","iNatAg/tradescantia_fluminensis","iNatAg/tradescantia_ohiensis","iNatAg/tradescantia_virginiana","iNatAg/tragia_betonicifolia","iNatAg/tragopogon_lamottei","iNatAg/tragopogon_porrifolius","iNatAg/tragopogon_pratensis","iNatAg/tragus_koelerioides","iNatAg/trapa_natans","iNatAg/trema_orientale","iNatAg/trianthema_portulacastrum","iNatAg/tribulus_cistoides","iNatAg/tribulus_terrestris","iNatAg/trichanthera_gigantea","iNatAg/trichoneura_grandiglumis","iNatAg/trichosanthes_cucumerina","iNatAg/trichostema_lanceolatum","iNatAg/tridax_procumbens","iNatAg/trifolium_africanum","iNatAg/trifolium_alexandrinum","iNatAg/trifolium_ambiguum","iNatAg/trifolium_angustifolium","iNatAg/trifolium_arvense","iNatAg/trifolium_burchellianum","iNatAg/trifolium_campestre","iNatAg/trifolium_carolinianum","iNatAg/trifolium_cherleri","iNatAg/trifolium_dubium","iNatAg/trifolium_fragiferum","iNatAg/trifolium_glanduliferum","iNatAg/trifolium_glomeratum","iNatAg/trifolium_hirtum","iNatAg/trifolium_hybridum","iNatAg/trifolium_incarnatum","iNatAg/trifolium_medium","iNatAg/trifolium_michelianum","iNatAg/trifolium_nigrescens","iNatAg/trifolium_patens","iNatAg/trifolium_pilulare","iNatAg/trifolium_polymorphum","iNatAg/trifolium_pratense","iNatAg/trifolium_reflexum","iNatAg/trifolium_repens","iNatAg/trifolium_resupinatum","iNatAg/trifolium_subterraneum","iNatAg/trifolium_tomentosum","iNatAg/trifolium_variegatum","iNatAg/trifolium_vesiculosum","iNatAg/trifolium_wormskioldii","iNatAg/triglochin_maritima","iNatAg/triglochin_maritimum","iNatAg/triglochin_palustre","iNatAg/trigonella_foenum-graecum","iNatAg/tripsacum_dactyloides","iNatAg/trisetum_flavescens","iNatAg/tristachya_leucothrix","iNatAg/triticum_aestivum","iNatAg/triticum_dicoccoides","iNatAg/triticum_durum","iNatAg/triticum_spelta","iNatAg/triumfetta_rhomboidea","iNatAg/triumfetta_semitriloba","iNatAg/trollius_europaeus","iNatAg/tropaeolum_majus","iNatAg/tropaeolum_tuberosum","iNatAg/tropidocarpum_gracile","iNatAg/turritis_glabra","iNatAg/tussilago_farfara","iNatAg/tylosema_esculentum","iNatAg/typha_angustifolia","iNatAg/typha_domingensis","iNatAg/typha_latifolia","iNatAg/uapaca_kirkiana","iNatAg/ulex_europaeus","iNatAg/ullucus_tuberosus","iNatAg/ulmus_procera","iNatAg/umbilicus_rupestris","iNatAg/uncaria_gambir","iNatAg/urelytrum_agropyroides","iNatAg/urena_lobata","iNatAg/urochloa_mosambicensis","iNatAg/urochloa_panicoides","iNatAg/urtica_chamaedryoides","iNatAg/urtica_dioica","iNatAg/urtica_urens","iNatAg/utricularia_floridana","iNatAg/utricularia_foliosa","iNatAg/utricularia_gibba","iNatAg/utricularia_purpurea","iNatAg/utricularia_radiata","iNatAg/utricularia_vulgaris","iNatAg/uvaria_littoralis","iNatAg/uvularia_sessilifolia","iNatAg/vaccinium_angustifolium","iNatAg/vaccinium_corymbosum","iNatAg/vaccinium_macrocarpon","iNatAg/vaccinium_myrtillus","iNatAg/vaccinium_uliginosum","iNatAg/vaccinium_vitis-idaea","iNatAg/valeriana_officinalis","iNatAg/valerianella_eriocarpa","iNatAg/vallisneria_americana","iNatAg/vangueria_infausta","iNatAg/vangueria_madagascariensis","iNatAg/vanilla_planifolia","iNatAg/vateria_indica","iNatAg/ventilago_viminalis","iNatAg/veratrum_album","iNatAg/veratrum_californicum","iNatAg/verbascum_blattaria","iNatAg/verbascum_lychnitis","iNatAg/verbascum_phlomoides","iNatAg/verbascum_thapsus","iNatAg/verbascum_thaspus","iNatAg/verbena_bonariensis","iNatAg/verbena_brasiliensis","iNatAg/verbena_hastata","iNatAg/verbena_officinalis","iNatAg/verbena_urticifolia","iNatAg/vernonia_altissima","iNatAg/vernonia_amygdalina","iNatAg/vernonia_baldwinii","iNatAg/vernonia_chamaedrys","iNatAg/vernonia_fasciculata","iNatAg/veronica_agrestis","iNatAg/veronica_anagallis-aquatica","iNatAg/veronica_arvensis","iNatAg/veronica_biloba","iNatAg/veronica_chamaedrys","iNatAg/veronica_filiformis","iNatAg/veronica_hederaefolia","iNatAg/veronica_hederifolia","iNatAg/veronica_longifolia","iNatAg/veronica_officinalis","iNatAg/veronica_peregrina","iNatAg/veronica_polita","iNatAg/veronica_serpyllifolia","iNatAg/vetiveria_zizanioides","iNatAg/viburnum_cassinoides","iNatAg/viburnum_lentago","iNatAg/viburnum_prunifolium","iNatAg/viccia_cracca","iNatAg/vicia_augustifolia","iNatAg/vicia_benghalensis","iNatAg/vicia_cracca","iNatAg/vicia_ervilia","iNatAg/vicia_faba","iNatAg/vicia_monantha","iNatAg/vicia_narbonensis","iNatAg/vicia_pannonica","iNatAg/vicia_sativa","iNatAg/vicia_sepium","iNatAg/vigna_adenantha","iNatAg/vigna_angularis","iNatAg/vigna_hosei","iNatAg/vigna_lanceolata","iNatAg/vigna_longifolia","iNatAg/vigna_luteola","iNatAg/vigna_parkeri","iNatAg/vigna_radiata","iNatAg/vigna_trilobata","iNatAg/vigna_umbellata","iNatAg/vigna_unguiculata","iNatAg/vigna_vexillata","iNatAg/vinca_major","iNatAg/vinca_minor","iNatAg/viola_lanceolata","iNatAg/viola_odorata","iNatAg/viola_tricolor","iNatAg/viscum_album","iNatAg/vitellaria_paradoxa","iNatAg/vitex_agnus-castus","iNatAg/vitex_doniana","iNatAg/vitex_negundo","iNatAg/vitis_labrusca","iNatAg/vitis_rotundifolia","iNatAg/vitis_vinifera","iNatAg/vitis_vulpina","iNatAg/waltheria_indica","iNatAg/warburgia_salutaris","iNatAg/warburgia_ugandensis","iNatAg/withania_somnifera","iNatAg/wrightia_tomentosa","iNatAg/xanthium_spinosum","iNatAg/xanthium_strumarium","iNatAg/xanthosoma_sagittifolium","iNatAg/ximenia_americana","iNatAg/xylia_xylocarpa","iNatAg/xylocarpus_granatum","iNatAg/xylocarpus_mekongensis","iNatAg/xylocarpus_moluccensis","iNatAg/xylorhiza_glabriuscula","iNatAg/yucca_elephantipes","iNatAg/zannichellia_palustris","iNatAg/zanthoxylum_americanum","iNatAg/zea_mays","iNatAg/zingiber_officinale","iNatAg/zizania_aquatica","iNatAg/zizania_latifolia","iNatAg/ziziphus_abyssinica","iNatAg/ziziphus_mauritiana","iNatAg/ziziphus_mucronata","iNatAg/zornia_diphylla","iNatAg/zornia_glochidiata","iNatAg/zornia_latifolia","iNatAg/zostera_marina","iNatAg/zoysia_matrella","iNatAg/zygophyllum_fabago","java_plum_leaf_disease_classification","jujube_bruise_classification","jute_disease_classification","leaf_counting_denmark","lemon_leaf_disease_classification","lemongrass_disease_classification","lentil_disease_classification","LSID_bean_segmentation","maize_disease_classification","maize_tomato_weed_classification","maize_weed_detection","malabar_spinach_disease_classification","mandarin_leaf_variety_classification","mangifera2012_variety_classification","mango_detection_australia","mango_growth_detection","mango_leaf_disease_classification","MangoClassify-12_variety_classification","MangoImageBD_classification","MangoLeafBD_disease_classification","Medjool_date_ripeness_detection","MedLeafX_disease_classification","merlot_mildew_segmentation","MH_SoyaHealthVision_disease_classification_leaf","MH_SoyaHealthVision_disease_classification_uav","MH_Weed16_weed_detection","MH_Weed16_weed_variety_classification","mint_leaf_classification","money_plant_disease_classification","MoringaLeafNet_disease_classification","mulberry_leaf_variety_classification","oil_palm_fruit_ripeness_classification","okra_maturity_classification","okra_thermal_maturity_classification","OkraDiseaseNet_disease_classification","olive_tree_crown_detection","onionfoliageset_detection","orange_leaf_disease_classification","oyster_mushroom_maturity_detection","paddy_disease_classification","PaddyVarietyBD_variety_classification","papaya_leaf_disease_classification","papaya_leaf_disease_classification_bangladesh","papaya_leaf_disease_detection","peachpear_flower_segmentation","PFSD_Musa_banana_disease_classification","PFSD_Musa_banana_variety_classification","plant_doc_classification","plant_doc_detection","plant_leaf_disease_classification","plant_seedlings_aarhus","plant_village_classification","plum_leaf_fruit_disease_classification","pomegranate_disease_classification","pomegranate_disease_classification_india","pomegranate_growth_detection","pomegranate_quality_classification","pomegranate_thermal_defect_classification","potato_leaf_blight_classification","potato_leaf_disease_classification","PriBel_betel_leaf_disease_classification","QuinceSet_detection","radish_leaf_disease_classification","rangeland_weeds_australia","red_grapes_and_leaves_segmentation","REMP_plant_classification","rice_disease_classification_bangladesh","rice_field_weed_classification","rice_grain_variety_classification","rice_leaf_disease_classification","rice_leaf_disease_classification_india","rice_panicle_detection","rice_seedling_classification","rice_seedling_segmentation","rice_variety_classification_bangladesh","riseholme_strawberry_classification_2021","RoCoLe_disease_detection","RoseLeafInsight_disease_classification","RoseNet_leaf_disease_classification","SapBark_64_variety_classification","sapota_fruit_size_classification","seasveg_classification_bd","SIMPDV1_plant_classification","sorghum_weed_classification","sorghum_weed_segmentation","soybean_damage_classification","soybean_harvest_damage_segmentation","soybean_insect_classification","soybean_leaf_disease_classification","soybean_leaf_disease_classification_brazil","soybean_variety_classification","soybean_weed_uav_brazil","SoyNet_leaf_health_classification","strawberry_detection_2022","strawberry_detection_2023","strawberry_growth_detection","Strawberry-DS_strawberry_detection","sugarbeet_weed_segmentation","sugarcane_damage_usa","sugarcane_leaf_disease_classification","sunflower_detection","sunflower_disease_classification","susnato_plant_disease_detection_processed","synthetic_cowpea_flower_detection","synthetic_cowpea_pod_detection","taro_blight_stage_classification","tea_leaf_disease_classification","tea_leaf_disease_classification_bangladesh","TealeafAgeQuality_detection","teaLeafBD_disease_classification_classification","three_plant_leaf_disease_classification","three_season_weed_detection","TOM2024_disease_classification","tomato_factory_detection","tomato_leaf_disease","tomato_maturity_classification","tomato_quality_classification","tomato_ripeness_detection","tropical_flower_variety_classification","turmeric_disease_classification","turmeric_leaf_disease_classification","vegann_multicrop_presence_segmentation","vegetable_classification_bangladesh_classification","vegetable_crop_early_detection","VegNet_cauliflower_disease_classification","VegNet_quality_classification","vine_virus_photo_dataset","vineyard_grape_segmentation","vineyard_pruning_segmentation","WaterHyacinth_variety_classification","watermelon_disease_classification","weed_crop_detection","wGrapeUNIPD-DL_white_grape_bunch_detection","wheat_head_counting","white_grapes_and_leaves_segmentation","WisWheat"]} \ No newline at end of file diff --git a/static/data/embeddings/vectors.bin b/static/data/embeddings/vectors.bin index 9e41634..0d3cfe9 100644 Binary files a/static/data/embeddings/vectors.bin and b/static/data/embeddings/vectors.bin differ diff --git a/static/data/hf_datasets.json b/static/data/hf_datasets.json index ad78d00..e816b9e 100644 --- a/static/data/hf_datasets.json +++ b/static/data/hf_datasets.json @@ -11129,5 +11129,436 @@ "source": "huggingface", "hf_link": "https://huggingface.co/datasets/Project-AgML/three_season_weed_detection", "examples_image_url": "/img/agml/sample_images/three_season_weed_detection_sample.webp" + }, + { + "name": "AgroMind", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "judgement", + "counting", + "multiple_choice_text", + "multiple_choice_image", + "open_ended" + ], + "agricultural_task": null, + "task_dimensions": [ + "Spatial Perception", + "Object Understanding", + "Scene Understanding", + "Scene Reasoning" + ], + "num_task_types": 13, + "location": "multinational", + "environment": "mixed", + "crop_types": [ + "maize", + "oil palm", + "apple", + "almond", + "mango", + "rice", + "citrus", + "+multiple other crops" + ], + "sensor_modality": [ + "rgb", + "nir multispectral" + ], + "real_or_synthetic": "real", + "platform": [ + "uav", + "satellite", + "ground camera" + ], + "input_data_format": "", + "annotation_format": null, + "conversation_format": "single_turn_reasoning", + "num_images": 19615, + "augmented_num_images": null, + "num_rows": 27247, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2505.12207", + "examples_image_url": null, + "license": "cc-by-nc-4.0", + "citation": "Li, Qingmei; Zhang, Yang; Mai, Zurong; Chen, Yuhang; Lou, Shuohong; Huang, Henglian; Zhang, Jiarui; Zhang, Zhiwei; Wen, Yibin; Li, Weijia; Fu, Haohuan; Huang, Jianxi; Zheng, Juepeng (2025), \"Can Large Multimodal Models Understand Agricultural Scenes? Benchmarking with AgroMind\", arXiv, arXiv:2505.12207", + "parent_dataset": "AgroMind/AgroMind", + "zip_size_bytes": 8220000000, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/AgroMind", + "composition": { + "is_compiled": true, + "num_source_datasets": 9, + "source_datasets_named": true, + "source_datasets": [ + "ACFR Orchard Fruit Dataset", + "2018 AI Challenge Dataset", + "IP102 Dataset", + "Agriculture Vision Challenge", + "OilPalmUAV Dataset", + "PhenoBench Dataset", + "OAM-TCD Dataset", + "Maize Tassel Identification", + "7-Provinces Ground Dataset" + ] + } + }, + { + "name": "AgroBench", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "multiple_choice_text" + ], + "agricultural_task": null, + "task_dimensions": [ + "Disease Identification", + "Disease Management", + "Pest Identification", + "Weed Identification", + "Crop Management", + "Machine Usage QA", + "Traditional Management" + ], + "num_task_types": 7, + "location": "multinational", + "environment": "mixed", + "crop_types": [ + "tomato", + "apple", + "maize", + "potato", + "rice", + "banana", + "grape", + "pepper", + "onion", + "wheat", + "+193 more" + ], + "sensor_modality": [ + "rgb" + ], + "real_or_synthetic": "real", + "platform": [ + "ground" + ], + "input_data_format": "", + "annotation_format": null, + "conversation_format": "single_turn_reasoning", + "num_images": 3745, + "augmented_num_images": null, + "num_rows": 4342, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2507.20519", + "examples_image_url": null, + "license": "cc-by-nc-4.0", + "citation": "Shinoda, Risa; Inoue, Nakamasa; Kataoka, Hirokatsu; Onishi, Masaki; Ushiku, Yoshitaka (2025), \"AgroBench: Vision-Language Model Benchmark in Agriculture\", arXiv, arXiv:2507.20519", + "parent_dataset": "risashinoda/AgroBench", + "zip_size_bytes": 2118998617, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/AgroBench", + "composition": { + "is_compiled": true, + "num_source_datasets": 4, + "source_datasets_named": true, + "source_datasets": [ + "Perennial Plants Detection", + "CottonWeedDet3", + "Open Plant Phenotype Database of Common Weeds in Denmark", + "CropAndWeed Dataset" + ] + } + }, + { + "name": "AgroCoT", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "judgement", + "counting", + "multiple_choice_text", + "multiple_choice_image", + "open_ended", + "long_form_QA" + ], + "agricultural_task": null, + "task_dimensions": [ + "Object Detection", + "Quantitative Analysis", + "Disease Monitoring", + "Spatial Understanding", + "Environmental Management" + ], + "num_task_types": 15, + "location": "multinational", + "environment": "mixed", + "crop_types": [ + "mixed_multiple_sources" + ], + "sensor_modality": [ + "rgb", + "multispectral" + ], + "real_or_synthetic": "real", + "platform": [ + "uav", + "satellite", + "ground" + ], + "input_data_format": "", + "annotation_format": null, + "conversation_format": "single_turn_reasoning", + "num_images": 4628, + "augmented_num_images": null, + "num_rows": 4759, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2511.23253", + "examples_image_url": null, + "license": "cc-by-nc-4.0", + "citation": "Wen, Yibin; Li, Qingmei; Ye, Zi; Zhang, Jiarui; Fan, Xiaoya; Mai, Zurong; Wu, Jing; Lou, Shuohong; Chen, Yuhang; Huang, Henglian; Zhang, Yang; Gu, Defeng; Zhao, Lingyuan; Lu, Yutong; Fu, Haohuan; Huang, Jianxi; Zheng, Juepeng (2025), \"AgroCoT: A Chain-of-Thought Benchmark for Evaluating Reasoning in Vision-Language Models for Agriculture\", arXiv, arXiv:2511.23253", + "parent_dataset": "AgroCoT/AgroCoT", + "zip_size_bytes": 5420000000, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/AgroCoT", + "composition": { + "is_compiled": true, + "num_source_datasets": 9, + "source_datasets_named": true, + "source_datasets": [ + "OilPalmUAV", + "PhenoBench", + "Agriculture-Vision Challenge (AVC)", + "IP102", + "CropHarvest", + "CDDM", + "AGMMU", + "AgroBench", + "Proprietary VQA dataset" + ] + } + }, + { + "name": "WisWheat", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "multiple_choice_text", + "counting", + "open_ended" + ], + "agricultural_task": null, + "task_dimensions": [ + "Weed Detection", + "Yellow Rust", + "Stem Rust", + "Leaf Rust", + "Mildew", + "Septoria", + "Srought Abiotic Stress", + "Healthy Wheat", + "Growth Stage Diagnosis", + "Growth Stage Classification VQA", + "Organ Percentage Estimation", + "Rust Percentage Estimation", + "Spike Counting" + ], + "num_task_types": 13, + "location": "Australia", + "environment": "field", + "crop_types": [ + "wheat" + ], + "sensor_modality": [ + "rgb" + ], + "real_or_synthetic": "real", + "platform": [ + "ground" + ], + "input_data_format": "", + "annotation_format": null, + "conversation_format": "single_turn_reasoning", + "num_images": null, + "augmented_num_images": null, + "num_rows": 11265, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2506.06084", + "examples_image_url": null, + "license": "cc-by-nc-4.0", + "citation": "Yuan, Bowen; Song, Selena; Fernandez, Javier; Luo, Yadan; Baktashmotlagh, Mahsa; Wang, Zijian (2025), \"WisWheat: A Three-Tiered Vision-Language Dataset for Wheat Management\", arXiv, arXiv:2506.06084", + "parent_dataset": null, + "zip_size_bytes": 13300000000, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/WisWheat", + "composition": { + "is_compiled": true, + "num_source_datasets": 7, + "source_datasets_named": true, + "source_datasets": [ + "WFD", + "Minimal Dataset [Drought]", + "GWHD 2021", + "GWFSS", + "Radish Weed Dataset", + "Cobbity Wheat", + "Rust Segmentation Dataset" + ] + } + }, + { + "name": "Agri-LLaVA", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "open_ended" + ], + "agricultural_task": null, + "task_dimensions": [ + "Feature Description", + "Category Identification", + "Symptom Identification" + ], + "num_task_types": 2, + "location": "multinational", + "environment": "mixed", + "crop_types": [ + "tomato", + "orange", + "grape", + "apple", + "corn", + "vitis", + "rice", + "soybean", + "pepper", + "mango", + "+24 more" + ], + "sensor_modality": [ + "rgb" + ], + "real_or_synthetic": "real", + "platform": [ + "ground" + ], + "annotation_format": null, + "conversation_format": "mixed", + "num_images": 391785, + "augmented_num_images": null, + "num_rows": 391785, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2412.02158", + "examples_image_url": null, + "license": "other", + "citation": "Wang, Liqiong; Jin, Teng; Yang, Jinyu; Leonardis, Ales; Wang, Fangyi; Zheng, Feng (2024), \"Agri-LLaVA: Knowledge-Infused Large Multimodal Assistant on Agricultural Pests and Diseases\", arXiv, arXiv:2412.02158", + "parent_dataset": "Agri-LLaVA-Anonymous/Agricultural_pests_and_diseases_feature_alignment_data", + "zip_size_bytes": 66500000000, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/Agri-LLaVA_Agricultural_Pests_And_Diseases_Feature_Alignment_Dataset", + "composition": { + "is_compiled": true, + "num_source_datasets": 16, + "source_datasets_named": true, + "source_datasets": [ + "AppleLeaf9", + "LWDCD", + "PlantVillage-Dataset-master", + "Rice Leaf Disease Image samples", + "Chinese Academy of Sciences Disease Sample Data", + "IP102", + "Images of Apple Diseases and Pests", + "Crop Pest and Disease Detection", + "IDADP-grape Disease Identification", + "OLID I", + "Plant Disease Expert", + "RiceLeafs", + "Cabbage", + "Pepper Pests and Diseases", + "Wheat Disease Classification", + "Wheat Leaf Dataset" + ] + } + }, + { + "name": "CDDM", + "machine_learning_task": "image-text-to-text", + "qa_type": [ + "open_ended" + ], + "agricultural_task": null, + "task_dimensions": [ + "Disease Diagnosis", + "Disease Knowledge QA" + ], + "num_task_types": 2, + "location": "unspecified", + "environment": "mixed", + "crop_types": [ + "tomato", + "grape", + "potato", + "apple", + "wheat", + "bell pepper", + "rice", + "corn", + "soybean", + "orange", + "cherry", + "blueberry", + "strawberry", + "pumpkin", + "peach" + ], + "sensor_modality": [ + "rgb" + ], + "real_or_synthetic": "real", + "platform": [ + "ground" + ], + "annotation_format": null, + "conversation_format": "mixed", + "num_images": null, + "augmented_num_images": null, + "num_rows": 145261, + "classes": [], + "language": [ + "en" + ], + "documentation": "https://arxiv.org/abs/2503.06973", + "examples_image_url": null, + "license": "cc-by-nc-4.0", + "citation": "Liu, Xiang; Liu, Zhaoxiang; Hu, Huan; Chen, Zezhou; Wang, Kohou; Wang, Kai; Lian, Shiguo (2025), \"A Multimodal Benchmark Dataset and Model for Crop Disease Diagnosis\", arXiv, arXiv:2503.06973", + "parent_dataset": "https://github.com/UnicomAI/UnicomBenchmark/tree/main/CDDMBench", + "zip_size_bytes": 3070000000, + "augmented_zip_size_bytes": null, + "source": "huggingface", + "hf_link": "https://huggingface.co/datasets/Project-AgML/CDDM", + "composition": { + "is_compiled": true, + "num_source_datasets": 2, + "source_datasets_named": true, + "source_datasets": [ + "Web Data (Kaggle + web-crawled)", + "Private Data (field surveys)" + ] + } } -] +] \ No newline at end of file diff --git a/tests/semantic-search-index.test.ts b/tests/semantic-search-index.test.ts index 5f215b8..bbd7c8b 100644 --- a/tests/semantic-search-index.test.ts +++ b/tests/semantic-search-index.test.ts @@ -30,7 +30,7 @@ describe('buildIndexRow', () => { crop_types: ['corn', 'soybean'], sensor_modality: 'rgb', real_or_synthetic: 'real', - platform: 'drone', + platform: ['drone'], input_data_format: null, annotation_format: null, num_images: 100, @@ -43,6 +43,13 @@ describe('buildIndexRow', () => { examples_image_url: null, license: null, citation: null, + dataset_type: 'vision', + qa_type: null, + task_dimensions: null, + num_task_types: null, + conversation_format: null, + num_rows: null, + source_datasets: null, }; test('keeps `name` exact but humanizes `nameText` for BM25 recall', () => {