code: def test_tdrp005_filtered_and_sorted_row_select(test):
      test.start_server(get_app())
  
      target = test.table("table")
  
      target.row(0).select()
      target.row(1).select()
      target.row(2).select()
  
      assert test.find_element("#active_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#start_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#end_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_cells").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_rows").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3)))
      assert test.find_element("#selected_row_ids").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3000, 3003)))
  
      assert test.find_element(
          "#derived_viewport_selected_rows"
      ).get_attribute("innerHTML") == json.dumps(list(range(3)))
      assert test.find_element(
          "#derived_viewport_selected_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3003))
      )
      assert test.find_element(
          "#derived_viewport_indices"
      ).get_attribute("innerHTML") == json.dumps(list(range(10)))
      assert test.find_element(
          "#derived_viewport_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3010))
      )
  
      assert test.find_element(
          "#derived_virtual_selected_rows"
      ).get_attribute("innerHTML") == json.dumps(list(range(3)))
      assert test.find_element(
          "#derived_virtual_selected_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3003))
      )
      assert test.find_element(
          "#derived_virtual_indices"
      ).get_attribute("innerHTML") == json.dumps(list(range(100)))
      assert test.find_element(
          "#derived_virtual_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3100))
      )
  
      target.column(0).filter_value("is even")
  
      assert test.find_element("#active_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#start_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#end_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_cells").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_rows").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3)))
      assert test.find_element("#selected_row_ids").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3000, 3003)))
  
      assert test.find_element(
          "#derived_viewport_selected_rows"
      ).get_attribute("innerHTML") == json.dumps(list(range(0, 2)))
      assert test.find_element(
          "#derived_viewport_selected_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3003, 2))
      )
      assert test.find_element(
          "#derived_viewport_indices"
      ).get_attribute("innerHTML") == json.dumps(list(range(0, 20, 2)))
      assert test.find_element(
          "#derived_viewport_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3020, 2))
      )
  
      assert test.find_element(
          "#derived_virtual_selected_rows"
      ).get_attribute("innerHTML") == json.dumps(list(range(0, 2)))
      assert test.find_element(
          "#derived_virtual_selected_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3003, 2))
      )
      assert test.find_element(
          "#derived_virtual_indices"
      ).get_attribute("innerHTML") == json.dumps(list(range(0, 100, 2)))
      assert test.find_element(
          "#derived_virtual_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3100, 2))
      )
  
      target.column(rawDf.columns[0]).sort()  # None -> ASC
      target.column(rawDf.columns[0]).sort()  # ASC -> DESC
  
      assert test.find_element("#active_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#start_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#end_cell").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_cells").get_attribute(
          "innerHTML"
      ) in [
          "None",
          json.dumps([]),
      ]
      assert test.find_element("#selected_rows").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3)))
      assert test.find_element("#selected_row_ids").get_attribute(
          "innerHTML"
      ) == json.dumps(list(range(3000, 3003)))
  
      assert test.find_element(
          "#derived_viewport_selected_rows"
      ).get_attribute("innerHTML") in ["None", json.dumps([])]
      assert test.find_element(
          "#derived_viewport_selected_row_ids"
      ).get_attribute("innerHTML") in ["None", json.dumps([])]
      assert test.find_element(
          "#derived_viewport_indices"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(80, 100, 2))[::-1]
      )
      assert test.find_element(
          "#derived_viewport_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3080, 3100, 2))[::-1]
      )
  
      assert test.find_element(
          "#derived_virtual_selected_rows"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(48, 50))[::-1]
      )
      assert test.find_element(
          "#derived_virtual_selected_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3003, 2))
      )
      assert test.find_element(
          "#derived_virtual_indices"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(0, 100, 2))[::-1]
      )
      assert test.find_element(
          "#derived_virtual_row_ids"
      ).get_attribute("innerHTML") == json.dumps(
          list(range(3000, 3100, 2))[::-1]
      )
      assert test.get_log_errors() == []
  
file_path: dash/components/dash-table/tests/selenium/test_derived_props.py
imports: import dash
  from dash.dependencies import Input, Output
  from dash import html
  from dash.dash_table import DataTable
  from selenium.webdriver.common.keys import Keys
  import json
  import time
  import pandas
label_desc: Use image node_id 6 for calling a global function with example usage: test_tdrp005_filtered_and_sorted_row_select(test) without return types