Update docs on iree-opt to use a file and options that still exist.

Open to suggestions for a simpler file / set of passes that we expect to be more stable.

+1 to -iree-transformation-pipeline & co - anything more fine-grained is (effectively) an implementation detail for compiler hackers of specific backends that is better documented there. Other ones that may be useful would be the one level down from iree-transformation-pipeline:
https://github.com/google/iree/blob/0ea7b14cd3c44b41a30b5f764c7c572043991607/iree/compiler/Translation/IREEVM.cpp#L68-L71
(-iree-flow-transformation-pipeline, hal, vm, etc)

+1 to -iree-transformation-pipeline & co - anything more fine-grained is (effectively) an implementation detail for compiler hackers of specific backends that is better documented there. Other ones that may be useful would be the one level down from iree-transformation-pipeline:
https://github.com/google/iree/blob/0ea7b14cd3c44b41a30b5f764c7c572043991607/iree/compiler/Translation/IREEVM.cpp#L68-L71
(-iree-flow-transformation-pipeline, hal, vm, etc)

I had been thinking with these docs that iree-translate would be more user-oriented and iree-opt would be more developer / compiler-hacker oriented. I wanted the iree-opt example to be focused on a single (tiny) pass where you could easily see the diff between the input and output and associate that with the name of the pass ("perform inlining", "fuse these two functions", "add attributes", those types of passes).
The larger pass pipelines also work in docs, but they show something different. There's more going on, and they could be useful to people plugging systems together, but they don't teach the system fundamentals as directly.

I had been thinking with these docs that iree-translate would be more user-oriented and iree-opt would be more developer / compiler-hacker oriented. I wanted the iree-opt example to be focused on a single (tiny) pass where you could easily see the diff between the input and output and associate that with the name of the pass ("perform inlining", "fuse these two functions", "add attributes", those types of passes).
The larger pass pipelines also work in docs, but they show something different. There's more going on, and they could be useful to people plugging systems together, but they don't teach the system fundamentals as directly.

I agree this should be the common case for opt and would be more useful to document. My vote would be to pick an existing test case for a relatively stable transform and then IfChange/ThenChange to note that it's referenced in the documentation and the documentation should be updated if it is.

I had been thinking with these docs that iree-translate would be more user-oriented and iree-opt would be more developer / compiler-hacker oriented. I wanted the iree-opt example to be focused on a single (tiny) pass where you could easily see the diff between the input and output and associate that with the name of the pass ("perform inlining", "fuse these two functions", "add attributes", those types of passes).
The larger pass pipelines also work in docs, but they show something different. There's more going on, and they could be useful to people plugging systems together, but they don't teach the system fundamentals as directly.

I agree this should be the common case for opt and would be more useful to document. My vote would be to pick an existing test case for a relatively stable transform and then IfChange/ThenChange to note that it's referenced in the documentation and the documentation should be updated if it is.

How about -iree-vm-mark-public-symbols-exported on https://github.com/google/iree/blob/master/iree/compiler/Dialect/VM/Transforms/test/mark_public_symbols_exported.mlir? That's one of the smallest / simplest that I could find. We could even document both the small passes like that and the larger collections of passes like iree-transformation-pipeline.
λ .\iree\tools\iree-opt -iree-vm-mark-public-symbols-exported %CD%/../iree/iree/compiler/Dialect/VM/Transforms/test/mark_public_symbols_exported.mlir -print-ir-before-all
// *** IR Dump Before mlir::iree_compiler::IREE::VM::MarkPublicSymbolsExportedPass ***

module {
  func @private_symbol() attributes {sym_visibility = "private"}
  func @public_symbol()
}

module {
  func @private_symbol() attributes {sym_visibility = "private"}
  func @public_symbol() attributes {iree.module.export}
}

Made another attempt, incorporating some ideas from the discussion here. PTAL

I think iree.module.export is something slated for deletion since MLIR has real symbol visibility now, so probably not the best example :-D
What about drop compiler hints? Simple pass that just deletes a few ops. No current plans to change it. I'm not caught up enough on the other compiler projects to know what else is stable except that I would avoid anything with dynamic shapes, stream formation, or dispatchability :-D


fix: Support multi-line formulas in generated model classes

Description
This PR closes #38 by wrapping formula definitions in triple quotes ('''). It also adds an extra new line before the class declaration.
Checklist:

[x] Submitting to dev branch
[x] pytest tests passing
[x] Includes tests to cover the changes
[x] flake8 passing
[x] Relevant documentation added

@tkutcher this should be ready for your review. Two notes:

I checked the Relevant documentation added because there was no relevant documentation to add (as an aside, are there any instructions for generating docs? are they hosted somewhere?)
The files that are generated do not pass this repo's own flake8 rules, but neither does the current release so I figured this is a problem for another day

Thanks for this too!
Ah - just realized. I will put something in the contributing for how to build the docs locally to check them out.
And yea over time will generate prettier/smarter files but for now not gonna get too concerned with that (since presumably other projects that enforce style would have their own rules anyways that may differ).


[Other issue]: Unable to compute a StartSet for robot [ros2_tb3_0] using level_name [L1] and location [-1.894945, -0.420001, 0.000001] specified in its RobotState message. This can happen if the level_name in the RobotState message does not match any of the map names in the navigation graph supplied or if the location reported in the RobotState message is far way from the navigation graph.

Before proceeding, is there an existing issue or discussion for this?

[X] I have done a search for similar issues and discussions.

Description
Hi I am trying the free_fleet simulation for ros2 galactic and continuing the rmf on turtlebot3..
command 1: ros2 launch  ff_examples_ros2 turtlebot3_world_ff.launch.xml
command 2: ros2 launch ff_examples_ros2 turtlebot3_world_ff_server.launch.xml
output: [INFO] [1729077279.129561946] [turtlebot3_fleet_server_node]: registered a new robot: [ros2_tb3_0]
Command 3: ros2 launch  barista_rmf_gazebo start_rmf_turtlebotworld.launch.xml
my rmf_gazebo start_rmf_turtlebotworld.launch.xml
<?xml version='1.0' ?>
<launch>
  <arg name="failover_mode" default="false"/>
  <arg name="use_sim_time" default="true"/>
  <!-- Common launch -->
  <include file="$(find-pkg-share barista_rmf_gazebo)/launch/rmf_t3_world.launch.xml">
    <arg name="use_sim_time" value="$(var use_sim_time)"/>
    <arg name="failover_mode" value="$(var failover_mode)"/>
    <arg name="map_name" value="ff" />
  </include>
</launch>

my rmf_t3_world.launch.xml
<?xml version='1.0' ?>

<launch>
  <arg name="use_sim_time" default="false"/>
  <arg name="failover_mode" default="false"/>
  <arg name="map_name" description="Name of the rmf_demos map to simulate" />

  <!-- Common launch -->
  <include file="$(find-pkg-share rmf_demos)/common.launch.xml">
    <arg name="use_sim_time" value="$(var use_sim_time)"/>
    <arg name="viz_config_file" value ="$(find-pkg-share barista_rmf_gazebo)/rviz_config/$(var map_name).rviz"/>
    <arg name="config_file" value="$(find-pkg-share barista_rmf_gazebo)/rmf_config/$(var map_name).building.yaml"/>
    <arg name="dashboard_config_file" value="$(find-pkg-share barista_rmf_gazebo)/dashboard_config/$(var map_name)/dashboard_config.json"/>
  </include>

  <!-- Barista fleet adapter, and robot state aggregator. These should comunicate with the barista fleet server of FF -->
  <group>
    <let name="fleet_name" value="turtlebot3"/>
    <include file="$(find-pkg-share barista_rmf_gazebo)/adapter_config/turtlebot3_adapter.launch.xml">
      <arg name="fleet_name" value="$(var fleet_name)"/>
      <arg name="use_sim_time" value="$(var use_sim_time)"/>
      <arg name="nav_graph_file" value="$(find-pkg-share barista_rmf_gazebo)/maps/$(var map_name)/nav_graphs/0.yaml" />

    </include>
    <include file="$(find-pkg-share rmf_fleet_adapter)/robot_state_aggregator.launch.xml">
      <arg name="robot_prefix" value="$(var fleet_name)"/>
      <arg name="fleet_name" value="$(var fleet_name)"/>
      <arg name="use_sim_time" value="$(var use_sim_time)"/>
      <arg name="failover_mode" value="$(var failover_mode)"/>
    </include>
  </group>

</launch>

my  turtlebot3_adapter.launch.xml
<?xml version='1.0' ?>

<launch>

  <arg name="fleet_name" default="turtlebot3" description="Name of this fleet of barista robots"/>
  <arg name="use_sim_time" default="false" description="Use the /clock topic for time to sync with simulation"/>
  <arg name="nav_graph_file" description="Nav graph required by fleet adapter"/>
  <arg name="finishing_request" default="nothing"
       description="What the robot should do once it finishes its tasks: [charge, park, nothing]"/>
  <group>
    <include file="$(find-pkg-share rmf_fleet_adapter)/fleet_adapter.launch.xml">
      <!-- The name and control type of the fleet -->
      <arg name="fleet_name" value="$(var fleet_name)"/>
      <arg name="control_type" value="full_control"/>
      <!-- The graph that this fleet should use for navigation -->
      <arg name="nav_graph_file" value="$(var nav_graph_file)" />
      <!-- The nominal linear and angular velocity of this fleet's vehicles -->
      <arg name="linear_velocity" value="0.2"/>
      <arg name="angular_velocity" value="0.3"/>
      <!-- The nominal linear and angular acceleration of this fleet's vehicles -->
      <arg name="linear_acceleration" value="0.35"/>
      <arg name="angular_acceleration" value="0.5"/>
      <!-- The radius of the circular footprint of this fleet's vehicles -->
      <arg name="footprint_radius" value="0.2"/>
      <!-- Other robots are not allowed within this radius -->
      <arg name="vicinity_radius" value="0.22"/>
      <!-- Whether to use sim time -->
      <arg name="use_sim_time" value="$(var use_sim_time)"/>
      <!-- How long it can be delayed before we give up and start over -->
      <arg name="delay_threshold" value="15.0"/>
      <!-- Don't make the barista wait long to retry -->
      <arg name="retry_wait" value="10.0"/>
      <!-- Give everything time to discover -->
      <arg name="discovery_timeout" value="60.0"/>
      <!-- Can the robot drive backwards -->
      <arg name="reversible" value="false"/>
      <!-- Whether it can perform deliveries -->
      <arg name="perform_deliveries" value="true"/>
      <!-- Whether it can perform loop -->
      <arg name="perform_loop" value="true"/>
      <!-- Whether it can perform cleaning -->
      <arg name="perform_cleaning" value="false"/>
      <!-- What the robot should do once it finishes its tasks -->
      <arg name="finishing_request" value="$(var finishing_request)"/>
      <!-- TODO Update these values with actual specs -->
      <!-- Battery parameters -->
      <arg name="battery_voltage" value="12.0"/>
      <arg name="battery_capacity" value="24.0"/>
      <arg name="battery_charging_current" value="5.0"/>
      <!-- Physical parameters -->
      <arg name="mass" value="20.0"/>
      <arg name="inertia" value="10.0"/>
      <arg name="friction_coefficient" value="0.22"/>
      <!-- Power systems -->
      <arg name="ambient_power_drain" value="20.0"/>
      <arg name="tool_power_drain" value="0.0"/>
      <!-- Whether to consider battery drain for task planning -->
      <arg name="drain_battery" value="true"/>
      <!-- Battery level at which the robot ceases to operate -->
      <arg name="recharge_threshold" value="0.3"/>
      <!-- Battery level at which we consider the robot battery fully charged -->
      <arg name="recharge_soc" value="1.0"/
    </include>
  </group>
</launch>

my ff.building.yaml
crowd_sim:
  agent_groups:
    - {agents_name: [], agents_number: 0, group_id: 0, profile_selector: external_agent, state_selector: external_static, x: 0, y: 0}
  agent_profiles:
    - {ORCA_tau: 1, ORCA_tauObst: 0.4, class: 1, max_accel: 0, max_angle_vel: 0, max_neighbors: 10, max_speed: 0, name: external_agent, neighbor_dist: 5, obstacle_set: 1, pref_speed: 0, r: 0.25}
  enable: 0
  goal_sets: []
  model_types: []
  obstacle_set: {class: 1, file_name: L1_navmesh.nav, type: nav_mesh}
  states:
    - {final: 1, goal_set: -1, name: external_static, navmesh_file_name: ""}
  transitions: []
  update_time_step: 0.1
graphs:
  {}
levels:
  L1:
    drawing:
      filename: turtle3_map.png
    elevation: 0
    flattened_x_offset: 0
    flattened_y_offset: 0
    lanes:
      - [16, 17, {bidirectional: [4, false], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""]}]
      - [17, 18, {bidirectional: [4, false], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""]}]
    layers:
      {}
    measurements:
      - [0, 8, {distance: [3, 5.4]}]
    vertices:
      - [141.728, 183.682, 0, ""]
      - [163.605, 144.534, 0, ""]
      - [172.816, 143.383, 0, ""]
      - [178.573, 134.556, 0, ""]
      - [223.094, 133.404, 0, ""]
      - [227.7, 144.534, 0, ""]
      - [237.679, 144.918, 0, ""]
      - [253.415, 173.32, 0, ""]
      - [248.042, 184.834, 0, ""]
      - [253.031, 194.813, 0, ""]
      - [236.528, 223.214, 0, ""]
      - [228.468, 224.366, 0, ""]
      - [222.327, 233.961, 0, ""]
      - [178.957, 235.88, 0, ""]
      - [172.432, 223.982, 0, ""]
      - [163.221, 223.214, 0, ""]
      - [165.524, 182.531, 0, turtlebot3, {spawn_robot_name: [1, "ros2_tb3_0"], spawn_robot_type: [1, turtlebot3_burger]}]
      - [165.908, 212.084, 0, ""]
      - [231.538, 213.619, 0, ""]
    walls:
      - [0, 1, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [1, 2, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [2, 3, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [3, 4, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [4, 5, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [5, 6, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [6, 7, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [7, 8, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [8, 9, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [9, 10, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [10, 11, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [11, 12, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [12, 13, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [13, 14, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [14, 15, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
      - [15, 0, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}]
lifts: {}
name: ff

my 0.yaml
building_name: ff
levels:
  L1:
    lanes:
    - - 0
      - 1
      - {is_bidirectional: false}
    - - 1
      - 2
      - {is_bidirectional: false}
    vertices:
    - - 8.406956092930983
      - -9.270740814617731
      - {name: turtlebot3, spawn_robot_name: ros2_tb3_0, spawn_robot_type: turtlebot3_burger}
    - - 8.426459434680128
      - -10.77173628001483
      - {name: ''}
    - - 11.759804015399906
      - -10.84969885705894
      - {name: ''}

I was visualizing the robot in some where else not in the map...
qdn@AVDHESH:~/rmf$ ros2 launch  barista_rmf_gazebo start_rmf_turtlebotworld.launch.xml
[INFO] [launch]: All log files can be found below /home/qdn/.ros/log/2024-10-16-16-44-43-689497-AVDHESH-74556
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [rmf_traffic_schedule-1]: process started with pid [74559]
[INFO] [rmf_traffic_schedule_monitor-2]: process started with pid [74561]
[INFO] [rmf_traffic_blockade-3]: process started with pid [74563]
[INFO] [building_map_server-4]: process started with pid [74565]
[INFO] [schedule_visualizer-5]: process started with pid [74568]
[INFO] [rmf_visualization_fleet_states-6]: process started with pid [74570]
[INFO] [rmf_visualization_building_systems-7]: process started with pid [74572]
[INFO] [rviz2-8]: process started with pid [74574]
[INFO] [door_supervisor-9]: process started with pid [74576]
[INFO] [lift_supervisor-10]: process started with pid [74578]
[INFO] [rmf_task_dispatcher-11]: process started with pid [74594]
[INFO] [simple_api_server-12]: process started with pid [74629]
[INFO] [full_control-13]: process started with pid [74646]
[INFO] [robot_state_aggregator-14]: process started with pid [74649]
[rmf_task_dispatcher-11] ~Initializing Dispatcher Node~
[rmf_traffic_schedule-1] [INFO] [1729077284.241190628] [rmf_traffic_schedule_primary]: Successfully loaded logfile .rmf_schedule_node.yaml
[rmf_traffic_schedule-1] [INFO] [1729077284.242380137] [rmf_traffic_schedule_primary]: Set up heartbeat on /rmf_traffic/heartbeat with liveliness lease duration of 1000 ms and deadline of 1000 ms
[rmf_traffic_schedule-1] [INFO] [1729077284.243419238] [rmf_traffic_schedule_primary]: Beginning traffic schedule node
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.248394552] [rmf_traffic_schedule_backup]: Set up heartbeat listener on /rmf_traffic/heartbeat with liveliness lease duration of 1000 ms
[rmf_traffic_blockade-3] [INFO] [1729077284.262811915] [rmf_traffic_blockade_node]: Beginning traffic blockade node
[rmf_task_dispatcher-11] [INFO] [1729077284.272178636] [rmf_dispatcher_node]:  Declared Time Window Param as: 2.000000 secs
[rmf_task_dispatcher-11] [INFO] [1729077284.272249019] [rmf_dispatcher_node]:  Declared Terminated Tasks Max Size Param as: 100
[rmf_task_dispatcher-11] [INFO] [1729077284.272261491] [rmf_dispatcher_node]:  Declared publish_active_tasks_period as: 0.000000 secs
[rmf_task_dispatcher-11] [INFO] [1729077284.273650003] [rmf_dispatcher_node]: Starting task dispatcher node
[rmf_traffic_schedule-1] [INFO] [1729077284.344358211] [rmf_traffic_schedule_primary]: Registered new query [1]
[full_control-13] [INFO] [1729077284.392654671] [turtlebot3_fleet_adapter]: Parameter [discovery_timeout] set to: 60.000000
[schedule_visualizer-5] [INFO] [1729077284.395718955] [rmf_visualization_schedule_data_node]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [0]
[rmf_traffic_schedule-1] [INFO] [1729077284.399829162] [rmf_traffic_schedule_primary]: A new mirror is tracking query ID [1]
[schedule_visualizer-5] [INFO] [1729077284.408929504] [rmf_visualization_schedule_data_node]: rmf_visualization_schedule_data_node started...
[schedule_visualizer-5] [INFO] [1729077284.409348477] [rmf_visualization_schedule_data_node]: Websocket server started on port: 8006
[full_control-13] [INFO] [1729077284.434553151] [turtlebot3_fleet_adapter]: Parameter [linear_velocity] set to: 0.200000
[full_control-13] [INFO] [1729077284.434644708] [turtlebot3_fleet_adapter]: Parameter [angular_velocity] set to: 0.300000
[full_control-13] [INFO] [1729077284.434711234] [turtlebot3_fleet_adapter]: Parameter [linear_acceleration] set to: 0.350000
[full_control-13] [INFO] [1729077284.434760165] [turtlebot3_fleet_adapter]: Parameter [angular_acceleration] set to: 0.500000
[full_control-13] [INFO] [1729077284.434800700] [turtlebot3_fleet_adapter]: Parameter [footprint_radius] set to: 0.200000
[full_control-13] [INFO] [1729077284.434879883] [turtlebot3_fleet_adapter]: Parameter [vicinity_radius] set to: 0.220000
[full_control-13] [INFO] [1729077284.434954421] [turtlebot3_fleet_adapter]: Parameter [reversible] set to: 0
[full_control-13]  ===== We have an irreversible robot
[full_control-13] The fleet [turtlebot3] has the following named waypoints:
[full_control-13]  -- turtlebot3
[full_control-13] [INFO] [1729077284.443823341] [turtlebot3_fleet_adapter]: Parameter [battery_voltage] set to: 12.000000
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.444348125] [rmf_traffic_schedule_backup]: Liveliness changed event:
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.444386634] [rmf_traffic_schedule_backup]:   alive_count: 1
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.444398621] [rmf_traffic_schedule_backup]:   not_alive_count: 0
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.444409053] [rmf_traffic_schedule_backup]:   alive_count_change: 1
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.444417798] [rmf_traffic_schedule_backup]:   not_alive_count_change: 0
[full_control-13] [INFO] [1729077284.444790800] [turtlebot3_fleet_adapter]: Parameter [battery_capacity] set to: 24.000000
[full_control-13] [INFO] [1729077284.444936633] [turtlebot3_fleet_adapter]: Parameter [battery_charging_current] set to: 5.000000
[full_control-13] [INFO] [1729077284.445063452] [turtlebot3_fleet_adapter]: Parameter [mass] set to: 20.000000
[full_control-13] [INFO] [1729077284.445450947] [turtlebot3_fleet_adapter]: Parameter [inertia] set to: 10.000000
[full_control-13] [INFO] [1729077284.446066597] [turtlebot3_fleet_adapter]: Parameter [friction_coefficient] set to: 0.220000
[full_control-13] [INFO] [1729077284.446234636] [turtlebot3_fleet_adapter]: Parameter [ambient_power_drain] set to: 20.000000
[full_control-13] [INFO] [1729077284.446357234] [turtlebot3_fleet_adapter]: Parameter [tool_power_drain] set to: 0.000000
[full_control-13] [INFO] [1729077284.446487312] [turtlebot3_fleet_adapter]: Parameter [drain_battery] set to: 1
[full_control-13] [INFO] [1729077284.446647621] [turtlebot3_fleet_adapter]: Parameter [recharge_threshold] set to: 0.300000
[full_control-13] [INFO] [1729077284.446779962] [turtlebot3_fleet_adapter]: Parameter [recharge_soc] set to: 1.000000
[full_control-13] [INFO] [1729077284.446927580] [turtlebot3_fleet_adapter]: Fleet is not configured to perform any finishing request
[full_control-13] [INFO] [1729077284.447549213] [turtlebot3_fleet_adapter]: Parameter [delay_threshold] set to: 15.000000
[schedule_visualizer-5] [INFO] [1729077284.449817219] [rmf_visualization_schedule_data_node]: Mirror handling new sync of 1 queries from schedule node version [0]
[rmf_traffic_schedule-1] [INFO] [1729077284.452691540] [rmf_traffic_schedule_primary]: A new mirror is tracking query ID [1]
[full_control-13] [INFO] [1729077284.453997171] [turtlebot3_fleet_adapter]: Starting Fleet Adapter
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.454123818] [rmf_traffic_schedule_backup]: Handling new sync of 1 queries from primary node
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.454334739] [rmf_traffic_schedule_backup]: Got mirror for monitor node
[schedule_visualizer-5] [INFO] [1729077284.454248025] [rmf_visualization_schedule_data_node]: Mirror handling new sync of 1 queries from schedule node version [0]
[full_control-13] [INFO] [1729077284.457672034] [turtlebot3_fleet_adapter]: Mirror handling new sync of 1 queries from schedule node version [0]
[full_control-13] [INFO] [1729077284.461294365] [turtlebot3_fleet_adapter]: Mirror handling new sync of 1 queries from schedule node version [0]
[full_control-13] [ERROR] [1729077284.529170205] [turtlebot3_fleet_adapter]: Unable to compute a StartSet for robot [ros2_tb3_0] using level_name [L1] and location [-1.894945, -0.420001, 0.000001] specified in its RobotState message. This can happen if the level_name in the RobotState message does not match any of the map names in the navigation graph supplied or if the location reported in the RobotState message is far way from the navigation graph. This robot will not be added to the fleet [turtlebot3]. The following hint may help with debugging: The closest waypoint on the navigation graph [turtlebot3] is a distance of [13.581781m] from the robot.
[rmf_traffic_schedule_monitor-2] [INFO] [1729077284.569121304] [rmf_traffic_schedule_backup]: Mirror handling new sync of 1 queries from schedule node version [0]
[rmf_visualization_fleet_states-6] [INFO] [1729077284.712065548] [fleet_state_visualizer]: hello i am fleet state visualizer
[rviz2-8] [INFO] [1729077284.739578345] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-8] [INFO] [1729077284.739697874] [rviz2]: OpenGl version: 3.1 (GLSL 1.4)
[rmf_visualization_building_systems-7] [INFO] [1729077284.766325346] [building_systems_visualizer]: Building systems visualizer started...
[rviz2-8] [INFO] [1729077284.806173382] [rviz2]: Stereo is NOT SUPPORTED
[simple_api_server-12] Set Server IP to: <IP_ADDRESS>
[simple_api_server-12] Set Server port to: <IP_ADDRESS>:8083
[simple_api_server-12] Starting RMF_Demos API Server: <IP_ADDRESS>:8083
[simple_api_server-12]  * Serving Flask app 'rmf_demos_panel.simple_api_server'
[simple_api_server-12]  * Debug mode: off
[schedule_visualizer-5] [INFO] [1729077284.959240992] [rmf_visualization_schedule_marker_publisher]: Rviz parameters updated
[building_map_server-4] [INFO] [1729077285.019655295] [building_map_server]: loading map path: /home/qdn/rmf/install/barista_rmf_gazebo/share/barista_rmf_gazebo/rmf_config/ff.building.yaml
[building_map_server-4] [INFO] [1729077285.037594495] [building_map_server]: opening: /home/qdn/rmf/install/barista_rmf_gazebo/share/barista_rmf_gazebo/rmf_config/turtle3_map.png
[building_map_server-4] [INFO] [1729077285.038752985] [building_map_server]: read 1640 byte image
[building_map_server-4] [INFO] [1729077285.042839806] [building_map_server]: publishing map...
[building_map_server-4] [INFO] [1729077285.044248775] [building_map_server]: ready to serve map: "ff"  Ctrl+C to exit...
[schedule_visualizer-5] [INFO] [1729077285.271946394] [rmf_visualization_schedule_marker_publisher]: Received map "ff" containing 1 level(s)
[schedule_visualizer-5] [INFO] [1729077285.272062111] [rmf_visualization_schedule_marker_publisher]: Level cache updated
[schedule_visualizer-5] [INFO] [1729077285.272191201] [rmf_visualization_schedule_marker_publisher]: Loading floorplan Image: turtle3_map png
[rviz2-8] [INFO] [1729077285.325450998] [rviz2]: Trying to create a map of size 384 x 384 using 1 swatches
[rviz2-8] [ERROR] [1729077285.332152829] [rviz2]: Vertex Program:rviz/glsl120/indexed_8bit_image.vert Fragment Program:rviz/glsl120/indexed_8bit_image.frag GLSL link result :
[rviz2-8] active samplers with a different type refer to the same texture image unit
[full_control-13] [INFO] [1729077289.419466605] [turtlebot3_fleet_adapter]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [0]
[full_control-13] [INFO] [1729077294.427398959] [turtlebot3_fleet_adapter]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
[schedule_visualizer-5] [INFO] [1729077294.427709155] [rmf_visualization_schedule_data_node]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
[rmf_traffic_schedule_monitor-2] [INFO] [1729077294.427955717] [rmf_traffic_schedule_backup]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
[full_control-13] [INFO] [1729077299.425719421] [turtlebot3_fleet_adapter]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
[schedule_visualizer-5] [INFO] [1729077299.425732790] [rmf_visualization_schedule_data_node]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
[rmf_traffic_schedule_monitor-2] [INFO] [1729077299.426820401] [rmf_traffic_schedule_backup]: [rmf_traffic_ros2::MirrorManager::request_update] Requesting changes for query ID [1] since version [5]
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[rviz2-8] [INFO] [1729077300.944124936] [rclcpp]: signal_handler(signal_value=2)
[full_control-13] [INFO] [1729077300.944130978] [rclcpp]: signal_handler(signal_value=2)
[rmf_task_dispatcher-11] [INFO] [1729077300.944140951] [rclcpp]: signal_handler(signal_value=2)
[robot_state_aggregator-14] [INFO] [1729077300.944110078] [rclcpp]: signal_handler(signal_value=2)
[door_supervisor-9] [INFO] [1729077300.944150124] [rclcpp]: signal_handler(signal_value=2)
[lift_supervisor-10] [INFO] [1729077300.944193789] [rclcpp]: signal_handler(signal_value=2)
[rmf_traffic_schedule-1] [INFO] [1729077300.944288668] [rclcpp]: signal_handler(signal_value=2)
[rmf_visualization_fleet_states-6] /opt/ros/galactic/lib/python3.8/site-packages/rclpy/node.py:440: UserWarning: when declaring parmater named 'display_names', declaring a parameter only providing its name is deprecated. You have to either:
[rmf_visualization_fleet_states-6] 	- Pass a name and a default value different to "PARAMETER NOT SET" (and optionally a descriptor).
[rmf_visualization_fleet_states-6] 	- Pass a name and a parameter type.
[rmf_visualization_fleet_states-6] 	- Pass a name and a descriptor with `dynamic_typing=True
[rmf_visualization_fleet_states-6]   warnings.warn(
[building_map_server-4] /opt/ros/galactic/lib/python3.8/site-packages/rclpy/qos.py:307: UserWarning: HistoryPolicy.RMW_QOS_POLICY_HISTORY_KEEP_LAST is deprecated. Use HistoryPolicy.KEEP_LAST instead.
[building_map_server-4]   warnings.warn(
[building_map_server-4] /opt/ros/galactic/lib/python3.8/site-packages/rclpy/qos.py:307: UserWarning: ReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_RELIABLE is deprecated. Use ReliabilityPolicy.RELIABLE instead.
Please anyone please help me how to solve this error .

galactic is now EOL, can you try using jazzy?


App doesnt launch on linux

Bug description
(this template is intended for bug reports, erase it when requesting features/enhancements)
Steps to reproduce the bug

Open terminal
run piskel by running the following command "./piskel"
Encountering with this error:- "error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory"

Environment details

operating system: Pop!_OS
browser (or offline application version):current version(offline)

Try building using #1049


Bump to 2.0.1

PTAL @lilin90

Rest LGTM

You must separately send a changelog PR, not combine all here.

/run-all-tests

Fix the bug that raftstore is accidentally blocked when generating the snapshot

@overvenus seem we miss this commit.

It's included in d5d56d38fcfd688e276d0d7cf1e8a4c766d0b5ee .

/run-unit-test

CI failed

/run-unit-test

/run-unit-test


TypeError: broadcast() takes 1 positional argument but 2 were given

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow):no
OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
TensorFlow installed from (source or binary):source
TensorFlow version (use command below): b'v1.3.0-rc1-6044-g0b80606' 1.4.0    (2 days ago)
Python version: 3.6
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version:
GPU model and memory:
Exact command to reproduce:

Source code / logs
I ran tensorflow/benchmarks, and got the following error.
Traceback (most recent call last):
  File "tf_cnn_benchmarks.py", line 47, in <module>
    tf.app.run()
  File "/MYHOME/.local/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 124, in run
    _sys.exit(main(argv))
  File "tf_cnn_benchmarks.py", line 43, in main
    bench.run()
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/benchmark_cnn.py", line 956, in run
    return self._benchmark_cnn()
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/benchmark_cnn.py", line 1046, in _benchmark_cnn
    self._build_model_single_session())
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/benchmark_cnn.py", line 1563, in _build_model_single_session                                                                      all_top_5_ops, phase_train)
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/benchmark_cnn.py", line 1370, in _build_fetches
    self.variable_mgr.preprocess_device_grads(device_grads))
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/variable_mgr.py", line 386, in preprocess_device_grads
    agg_small_grads_max_group=self._agg_small_grads_max_group)
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/allreduce.py", line 332, in sum_gradients_all_reduce
    if is_hierarchical else aux_device_groups[group_index], num_shards))
  File "/MYHOME/tf-benchmarks/scripts/tf_cnn_benchmarks/allreduce.py", line 236, in sum_grad_and_var_all_reduce
    tf.add)
  File "/MYHOME/.local/lib/python3.6/site-packages/tensorflow/contrib/all_reduce/python/all_reduce.py", line 780, in build_nccl_then_ring
    return _build_nccl_hybrid(input_tensors, red_op, upper_level_f)
  File "/MYHOME/.local/lib/python3.6/site-packages/tensorflow/contrib/all_reduce/python/all_reduce.py", line 748, in _build_nccl_hybrid
    send_op, dst_tensors = nccl.broadcast(level_2_output[w], dst_devices)
TypeError: broadcast() takes 1 positional argument but 2 were given

The reason is that the invocation of nccl.broadcast is different from its signature:
https://github.com/tensorflow/tensorflow/blob/17e725c0558581cba19bd6c409698b2c3f88efe5/tensorflow/contrib/all_reduce/python/all_reduce.py#L748
https://github.com/tensorflow/tensorflow/blob/17e725c0558581cba19bd6c409698b2c3f88efe5/tensorflow/contrib/nccl/python/ops/nccl_ops.py#L173-L182
Problems still exists in current HEAD.

@chsigg contrib/all_reduce needs to be updated due to the contrib/nccl API change made in https://github.com/tensorflow/tensorflow/commit/ca8af1d0dbb605087a4f8ae076188f2b9a26b1ba which broke some benchmarks. cc: @poxvoculi

#15642 same problem

@benbarsdell Great!
i add the same issue in tensorflow/benchmarks repo, but @reedwm closed it and ask me to  run with tf1.5.
Hope anyone can help!

Nagging Assignee: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

Nagging Assignees @chsigg, @poxvoculi: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

Nagging Assignees @chsigg, @poxvoculi: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

Reassigning to @zheng-xq

Seems to be fixed already.

@ppwwyyxx  which version do you use?  Have you tested it ok?

There might be other issues, but at least my original one seems fixed. As I can run tensorflow/benchmarks with TF1.6.


Support Criteria with SqlIdentifier (supporting "quoted" column names)

Hi,
Currently, Criteria only supports "unquoted" SqlIdentifiers - this occurs because the API only accepts a String and then passes it on to SqlIdentifier.unquoted().
I have a use-case where I would like to reuse the Criteria API but need to construct SqlIdentifier (I need support for quoted and composite).  This would enable to better compose a custom add-on on top of the R2DBC repositories as I would be able to reuse the same Criteria class for filtering (rather than having to "invent my own").

This is a neat enhancement. Moving this ticket into Spring Data JDBC as the Criteria API is provided by Spring Data Relational.
In general, the criteria API is based on property names so referring to a property name will translate the referenced property into a proper SqlIdentifier.

In general, the criteria API is based on property names so referring to a property name will translate the referenced property into a proper SqlIdentifier.

"property" as in a "Java field"?
If so, I find it difficult to see how Criteria can be generalized to work in a context where a JOIN is involved if we assume the SqlIdentifier should expand to a java field. I know R2DBC does not support this currently JOINs (and I am not trying to solve the 1-N JOINs)

Property as in domain model property. Properties can be backed either by fields or by using property accessors (getter/setter).

It pretty much depends on who creates the SQL statement. In the case of Spring Data JDBC, it's our components that are aware of properties and property paths (order.location.id). From that perspective, Criteria isn't required to be aware of an SQL identifier as the query mapper resolves properties/property paths to a SqlIdentifier.

It pretty much depends on who creates the SQL statement. In the case of Spring Data JDBC, it's our components that are aware of properties and property paths (order.location.id). From that perspective, Criteria isn't required to be aware of an SQL identifier as the query mapper resolves properties/property paths to a SqlIdentifier.

Thinking more about this, I think my source of confusion is in fact that Criteria has SqlIdentifiers but they are not used as SqlIdentificers  (don't know if it is specific to R2DBC - it is my only point of reference).
The documentation for SqlIdentificer says Represents a named object that exists in the database like a table name or a column name.  That phrase makes me feel that it is a disconnect logically for Criteria to "reuse" SqlIdentificer as a "Property path" - the first seems to work on SQL level and the other on the JVM level.
At the implementation level of R2DBC, I can see that the important aspect is whether there is a RelationalPersistentEntity associated with the SqlIdentificer - if there is one, then the SqlIdentificer is interpreted as a "Property path" and otherwise it is interpreted as a "classic" SQL identificer (AFAIUI).
Having dug through the Spring code code, I think I will also hit a road block with Sort.Order (from spring-data-commons) that uses simple String property names rather than SqlIdentificer.  So my approach would either need a different representation for sorting and manual mapping of those or a change to Sort.Order and related R2DBC statement mappers.


include default plugins

From https://github.com/sheetify/sheetify/issues/32#issuecomment-170731218

an open question is whether we specify any default plugins, such as what css-modulesify does. specifically i'm thinking of postcss-import, perhaps also a way to pass values around (like this but in our own way).

I reckon including postcss-import is a good call; if any other plugins should be included too this would be the right place to discuss.

Hmm, css-variables could perhaps be a solution to this?

Perhaps if a stylesheet is imported / declared, but not defined to a variable (e.g. prefix) it is treated as global - intentionally, because no prefix is being used. Do you reckon that's sane behavior?

Alright so postcss-import is not going to fly - even though it's a sync operation, it presumes it's async and starts doing hairy .then() stuff.
Given that we already have syntax for to solve this e.g.
sheetify('module-from-npm')

I don't think there's a need to include this plugin specifically.
I'm going to close this issue for now, as it's holding up a v4 release - going to add tests for module imports tho, as they're not currently being tested I believe.
If any other plugins should perhaps be included, I reckon we should open separate issues for that. Thanks!

Reviving this, as it can be useful for more complex css libs to split up their deps into multiple files (see css-wipe).
This does require that index.js performs actions in an async fashion, as PostCSS decided to support async calls for their api - https://github.com/postcss/postcss-import/issues/41 - big fat refactor is needed for this to work.

I would personally prefer if sheetify didn't come with a lot of plugins.  It would be better if you could add them in as you need them with sheetify-postcss.

@bcomnes yup on board with you here


sudden issues with WSL2 and git

Does this issue occur when all extensions are disabled?: Yes/No

VS Code Version: 1.58.0 (user setup)
OS Version: Windows 10.0.19043 Build 19043
WSL Version: 2
Linux version: Ubuntu 18.04.5 LTS

Issues summary

VS Code git reporting files as changed while they're not
git hooks stopped working
rubocop stopped working

Issues details

Yesterday VS Code started reporting changes in Source Control tab that are not really changes.
I'm working on WSL2 and the project is located in \\wsl$\Ubuntu-18.04\home\sharq\projects.
From the WSL2 terminal git status reports nothing, yet WSL shows a whole bunch of changes (see screenshot below).

When I show the changes there are no differences:

I tried converting these files using dos2unix (and unix2dos) but they are still being reported.

Another thing is that git hooks stopped working - some of my hooks use ruby and trying to do some actions through the source control tab brings up error with /usr/bin/env: ‘ruby’: No such file or directory

At the same time the rubocop stopped working properly. I think it got uninstalled from VS code; when I installed it again it does not pick up the right config file, even if I point to it in the config.

Until yesterday everything was working well.
Today I tried few things to fix it, including updating Windows (applied the 21H1 update), but it didn't help.

I stumbled upon this which actually helped with the first issue (git reporting weird differences)
# Ignore permissions
git config --global core.filemode false

The one below I already had but might be useful to somebody reading this.
# Only use CRLF line endings
# git config --global core.autocrlf true

However problems 2. and 3. still persist.


Polish transalations

Description
I really enjoy the project and i wanted to contribute a bit from my side by adding fully translated files for Polish language.
Affirmation

[x] I've tried my best up to my best knowledge of my native language
[x] My code follows the CONTRIBUTING.md guidelines

Oh, niiiice! Thank you! 🇵🇱👍


Unable to connect between peers

NETBIRD_DASHBOARD_TAG="v1.17.13"
NETBIRD_SIGNAL_TAG="0.25.2"
NETBIRD_MANAGEMENT_TAG="0.25.2"
COTURN_TAG="latest"
Unable to connect between peers
[root@iZbp1imzcyvws0523mzrg4Z ~]# ping <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

acl is default !!
network routes is effic  !!

root@iZbp11fpsa4uaxkx6jwliuZ:~# docker logs -f 666e48d2aa05
0: (1): INFO: System cpu num is 2
0: (1): INFO: log file opened: /var/tmp/turn_1_2023-12-27.log
0: (1): INFO: System enable num is 1
0: (1): INFO: Coturn Version Coturn-4.6.2 'Gorst'
0: (1): INFO: Coturn Version Coturn-4.6.2 'Gorst'
0: (1): INFO: Max number of open files/sockets allowed for this process: 1048576
0: (1): INFO: Due to the open files/sockets limitation, max supported number of TURN Sessions possible is: 524000 (approximately)
0: (1): INFO:

==== Show him the instruments, Practical Frost: ====

0: (1): INFO: OpenSSL compile-time version: OpenSSL 3.0.11 19 Sep 2023 (0x300000b0)
0: (1): INFO: TLS 1.3 supported
0: (1): INFO: DTLS 1.2 supported
0: (1): INFO: TURN/STUN ALPN supported
0: (1): INFO: Third-party authorization (oAuth) supported
0: (1): INFO: GCM (AEAD) supported
0: (1): INFO: SQLite supported, default database location is /var/lib/coturn/turndb
0: (1): INFO: Redis supported
0: (1): INFO: PostgreSQL supported
0: (1): INFO: MySQL supported
0: (1): INFO: MongoDB supported
0: (1): INFO: Default Net Engine version: 3 (UDP thread per CPU core)
0: (1): INFO: Domain name: netbird.xxxxx.cn
0: (1): INFO: Default realm: wiretrustee.com
0: (1): WARNING: cannot find certificate file: /etc/coturn/certs/cert.pem (1)
0: (1): WARNING: cannot start TLS and DTLS listeners because certificate file is not set properly
0: (1): WARNING: cannot find private key file: /etc/coturn/private/privkey.pem (1)
0: (1): WARNING: cannot start TLS and DTLS listeners because private key file is not set properly
0: (1): INFO: Certificate file found: /etc/coturn/certs/cert.pem
0: (1): INFO: Private key file found: /etc/coturn/private/privkey.pem
0: (1): WARNING: NO EXPLICIT LISTENER ADDRESS(ES) ARE CONFIGURED
0: (1): INFO: ===========Discovering listener addresses: =========
0: (1): INFO: Listener address to use: <IP_ADDRESS>
0: (1): INFO: Listener address to use: <IP_ADDRESS>
0: (1): INFO: Listener address to use: <IP_ADDRESS>
0: (1): INFO: Listener address to use: <IP_ADDRESS>
0: (1): INFO: Listener address to use: ::1
0: (1): INFO: =====================================================
0: (1): INFO: Total: 3 'real' addresses discovered
0: (1): INFO: =====================================================
0: (1): WARNING: NO EXPLICIT RELAY ADDRESS(ES) ARE CONFIGURED
0: (1): INFO: ===========Discovering relay addresses: =============
0: (1): INFO: Relay address to use: <IP_ADDRESS>
0: (1): INFO: Relay address to use: <IP_ADDRESS>
0: (1): INFO: Relay address to use: <IP_ADDRESS>
0: (1): INFO: Relay address to use: ::1
0: (1): INFO: =====================================================
0: (1): INFO: Total: 4 relay addresses discovered
0: (1): INFO: =====================================================
0: (1): INFO: pid file created: /var/tmp/turnserver.pid
0: (1): INFO: IO method: epoll (with changelist)
0: (1): INFO: Wait for relay ports initialization...
0: (1): INFO:   relay <IP_ADDRESS> initialization...
0: (1): INFO:   relay <IP_ADDRESS> initialization done
0: (1): INFO:   relay <IP_ADDRESS> initialization...
0: (1): INFO:   relay <IP_ADDRESS> initialization done
0: (1): INFO:   relay <IP_ADDRESS> initialization...
0: (1): INFO:   relay <IP_ADDRESS> initialization done
0: (1): INFO:   relay ::1 initialization...
0: (1): INFO:   relay ::1 initialization done
0: (1): INFO: Relay ports initialization done
0: (1): INFO: Total General servers: 2
9: (9): DEBUG: turn server id=1 created
9: (8): DEBUG: turn server id=0 created
9: (1): INFO: Total auth threads: 3
9: (1): INFO: prometheus collector disabled, not started
9: (8): ERROR: check_stun_auth: user self credentials are incorrect
9: (9): ERROR: check_stun_auth: user self credentials are incorrect
34: (9): ERROR: check_stun_auth: user self credentials are incorrect
35: (8): ERROR: check_stun_auth: user self credentials are incorrect
51: (9): ERROR: check_stun_auth: user self credentials are incorrect
52: (9): ERROR: check_stun_auth: user self credentials are incorrect
52: (9): ERROR: check_stun_auth: user self credentials are incorrect
52: (8): ERROR: check_stun_auth: user self credentials are incorrect
52: (9): ERROR: check_stun_auth: user self credentials are incorrect
53: (9): ERROR: check_stun_auth: user self credentials are incorrect
53: (9): ERROR: check_stun_auth: user self credentials are incorrect
53: (8): ERROR: check_stun_auth: user self credentials are incorrect
53: (9): ERROR: check_stun_auth: user self credentials are incorrect
57: (8): ERROR: check_stun_auth: user self credentials are incorrect
62: (8): ERROR: check_stun_auth: user self credentials are incorrect
63: (8): ERROR: check_stun_auth: user self credentials are incorrect
65: (8): ERROR: check_stun_auth: user self credentials are incorrect
65: (8): ERROR: check_stun_auth: user self credentials are incorrect
79: (9): ERROR: check_stun_auth: user self credentials are incorrect
79: (8): ERROR: check_stun_auth: user self credentials are incorrect
79: (9): ERROR: check_stun_auth: user self credentials are incorrect
80: (8): ERROR: check_stun_auth: user self credentials are incorrect
80: (8): ERROR: check_stun_auth: user self credentials are incorrect
80: (8): ERROR: check_stun_auth: user self credentials are incorrect
80: (9): ERROR: check_stun_auth: user self credentials are incorrect
80: (9): ERROR: check_stun_auth: user self credentials are incorrect
80: (8): ERROR: check_stun_auth: user self credentials are incorrect

[root@iZbp1imzcyvws0523mzrg4Z ~]# netbird status
Daemon version: 0.24.4
CLI version: 0.24.4
Management: Connected
Signal: Connected
FQDN: ss-pre1.netbird.selfhosted
NetBird IP: <IP_ADDRESS>/22
Interface type: Userspace
Peers count: 10/22 Connected

C:\Users\vvv>netbird status
Daemon version: 0.25.2
CLI version: 0.25.2
Management: Connected
Signal: Connected
FQDN: qh.netbird.selfhosted
NetBird IP: <IP_ADDRESS>/22
Interface type: Userspace
Peers count: 10/22 Connected

Hello @Horus-K,  Thank you for reporting the issue. To assist us in diagnosing and resolving the problem, could you please share the following information:
The detailed Netbird status from both nodes using the command: netbird status --detail
Additionally, provide the firewall rules from the node where the attempted ping occurred.

Nobody else will benefit from slack advice, google does not index it and slack free account does not show anything older than 3months

I have the exact same Problem: Mobile Devices can not connect to devices which are not directly accessable over the internet e.g. behind a firewall. The TURN server seems not to step in and it might be because of this error:
ERROR: check_stun_auth: user self credentials are incorrect

The username and password in management.json and turnserver.conf are the same. I checked them also within the containers. If there have been a solution for this problem here it might help me also.

I troubleshooted the problem and found out, that my problem was the coturn server which is also placed behind a NAT gateway with dynamic ip addresses. Therefor the external_ipparameter in /etc/turnserver.conf can not be filled but should be. I wrote a little script which updates the external_ip statement whenever the public address changed:
#!/bin/bash

# path to turnserver.conf
TURN_CONF="/etc/turnserver.conf"

# get external ip address
EXTERNAL_IP=$(curl -s ifconfig.me)

# read current ip address from turnserver.conf
CURRENT_IP=$(grep "^external-ip" "$TURN_CONF" | awk -F"=" '{print $2}')

# check if public and current ip address differ
if [ "$EXTERNAL_IP" != "$CURRENT_IP" ]; then
    # set new public ip address
    sed -i "s/^external-ip .*/external-ip = $EXTERNAL_IP/" "$TURN_CONF"

    # restart coturn
    systemctl restart coturn
    echo "Coturn was restarted with a new external ip address: ($EXTERNAL_IP)"
else
    echo "The external ip address has not changed."
fi

Whomever this may help.


[Wave 8- Card Settings] CLEAN UP - Filter out personal cards, fix route to card page, fix card icons

Details

Filters out any cards not associated with a domain (for now, we will later add those in)
Adds Card Versions for All Bank Icons

Fixed Issues

$ https://github.com/Expensify/App/issues/27417
$ https://github.com/Expensify/Expensify/issues/326981
$ https://github.com/Expensify/App/issues/29586
$ https://github.com/Expensify/App/issues/29275
Tests

[ ] Verify that no errors appear in the JS console
[ ] Open Settings/Wallet Page
[ ] Merge the following Data via console:

Onyx.merge('cardList',
{
  2: {
    "availableSpend": 10000000,
    "bank": "Expensify Card",
    "cardID": 2,
    "cardName": "485932XXXXXX0255",
    "domainName": "expensify.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "0255",
    "state": 3
  },
  3: {
    "availableSpend": 0,
    "bank": "chase",
    "cardID": 3,
    "cardName": "CREDIT CARD - 4093",
    "domainName": "yourmom.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  4: {
    "availableSpend": 0,
    "bank": "discover",
    "cardID": 4,
    "cardName": "CREDIT CARD - 0672",
    "domainName": "godzilla.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  5: {
    "availableSpend": 0,
    "bank": "bank of america",
    "cardID": 5,
    "cardName": "CREDIT CARD - 5365",
    "cardholderFirstName": "Puneet",
    "cardholderLastName": "Lath",
    "domainName": "beets.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  6: {
    "availableSpend": 10000000,
    "bank": "Expensify Card",
    "cardID": 6,
    "cardName": "v10:85A5DB35CBD7B35470838535C9E4A7CA",
    "domainName": "expensify.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "0811",
    "state": 3
  },
}
);

[ ] Verify these cards show:

[ ] Merge the following Data via console:

Onyx.merge('cardList',
{
  2: {
    "availableSpend": 10000000,
    "bank": "Expensify Card",
    "cardID": 2,
    "cardName": "485932XXXXXX0255",
    "domainName": "expensify.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "0255",
    "state": 3
  },
  3: {
    "availableSpend": 0,
    "bank": "chase",
    "cardID": 3,
    "cardName": "CREDIT CARD - 4093",
    "domainName": "",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  4: {
    "availableSpend": 0,
    "bank": "discover",
    "cardID": 4,
    "cardName": "CREDIT CARD - 0672",
    "domainName": "",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  5: {
    "availableSpend": 0,
    "bank": "bank of america",
    "cardID": 5,
    "cardName": "CREDIT CARD - 5365",
    "domainName": "",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "",
    "state": 3
  },
  6: {
    "availableSpend": 10000000,
    "bank": "Expensify Card",
    "cardID": 6,
    "cardName": "v10:85A5DB35CBD7B35470838535C9E4A7CA",
    "domainName": "expensify.com",
    "fraud": "none",
    "isVirtual": false,
    "lastFourPAN": "0811",
    "state": 3
  },
}
);

[ ] Verify only Expensify Cards show

Testing every icon:

let banks = [
    'generic', 'americanexpress', 'bank of america', 'bbt', 'capital one',
    'chase', 'charlesschwab', 'citibank', 'citizens bank', 'discover',
    'fidelity', 'huntington bank', 'navy federal credit union', 'pnc',
    'regionsbank', 'suntrust', 'tdbank', 'usbank', 'usaa'
];

let key = 1;

banks.forEach((bankName) => {
    let bankData = {
        [key]:  {
    "title": `${bankName} Checking`,
    "description": "Account ending in 5087",
    "methodID": key,
    "key": `bankAccount-${key}`,
    "accountType": "bankAccount",
    "accountData": {
        "accountNumber": "XXXXX5087",
        "additionalData": {
            "bankName": `${bankName}`,
        },
        "state": "OPEN",
        "type": "BUSINESS"
    },
    "isDefault": false
}
    };

    Onyx.merge("bankAccountList", bankData);

    key += 1;
});

banks.unshift('Expensify Card');

banks.forEach((bankName) => {
    let cardData = {
        [key]:  {
            "availableSpend": 0,
            "bank": `${bankName}`,
            "cardID": key,
            "cardName": `${bankName} Card - 1234`,
            "domainName": "beets.com",
            "fraud": "none",
            "isVirtual": false,
            "lastFourPAN": "",
            "state": 3,
        }
    };

    Onyx.merge("cardList", cardData);

    key += 1;
});

Offline tests

QA Steps

[ ] Verify that no errors appear in the JS console

PR Author Checklist

[X] I linked the correct issue in the ### Fixed Issues section above
[X] I wrote clear testing steps that cover the changes made in this PR

[X] I added steps for local testing in the Tests section
[X] I added steps for the expected offline behavior in the Offline steps section
[X] I added steps for Staging and/or Production testing in the QA steps section
[X] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[X] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[X] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[X] I included screenshots or videos for tests on all platforms
[X] I ran the tests on all platforms & verified they passed on:

[X] Android: Native
[X] Android: mWeb Chrome
[X] iOS: Native
[X] iOS: mWeb Safari
[X] MacOS: Chrome / Safari
[X] MacOS: Desktop

[X] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[X] I followed proper code patterns (see Reviewing the code)

[X] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[X] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[X] I verified that comments were added to code that is not self explanatory
[X] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[X] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[X] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[X] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[X] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[X] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[X] I verified the JSDocs style guidelines (in STYLE.md) were followed

[X] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[X] I followed the guidelines as stated in the Review Guidelines
[X] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[X] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[X] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[X] I verified that if a function's arguments changed that all usages have also been updated correctly
[X] If a new component is created I verified that:

[X] A similar component doesn't exist in the codebase
[X] All props are defined accurately and each prop has a /** comment above it */
[X] The file is named correctly
[X] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[X] The only data being stored in the state is data necessary for rendering and nothing else
[X] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[X] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[X] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[X] All JSX used for rendering exists in the render method
[X] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[X] If any new file was added I verified that:

[X] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[X] If a new CSS style is added I verified that:

[X] A similar style doesn't already exist
[X] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[X] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[X] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[X] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[X] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[X] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[X] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[X] I have checked off every checkbox in the PR author checklist, incluuding those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

https://github.com/Expensify/App/assets/38015950/e268c13c-f12e-4349-b050-29f83d007b43

iOS: mWeb Safari

https://github.com/Expensify/App/assets/38015950/f9d030b6-90f5-4d25-85b3-a3bd59a0d213

MacOS: Chrome / Safari

MacOS: Desktop

Lotta assets, but ready to go!

@grgia lint is failing

fixed lint

Reviewer Checklist

[X] I have verified the author checklist is complete (all boxes are checked off).
[X] I verified the correct issue is linked in the ### Fixed Issues section above
[X] I verified testing steps are clear and they cover the changes made in this PR

[X] I verified the steps for local testing are in the Tests section
[X] I verified the steps for Staging and/or Production testing are in the QA steps section
[X] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[X] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[X] I checked that screenshots or videos are included for tests on all platforms
[X] I included screenshots or videos for tests on all platforms
[X] I verified tests pass on all platforms & I tested again on:

[X] Android: Native
[X] Android: mWeb Chrome
[X] iOS: Native
[X] iOS: mWeb Safari
[X] MacOS: Chrome / Safari
[X] MacOS: Desktop

[X] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[X] I verified proper code patterns were followed (see Reviewing the code)

[X] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[X] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[X] I verified that comments were added to code that is not self explanatory
[X] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[X] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[X] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[X] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[X] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[X] I verified the JSDocs style guidelines (in STYLE.md) were followed

[X] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[X] I verified that this PR follows the guidelines as stated in the Review Guidelines
[X] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[X] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[X] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[X] If a new component is created I verified that:

[X] A similar component doesn't exist in the codebase
[X] All props are defined accurately and each prop has a /** comment above it */
[X] The file is named correctly
[X] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[X] The only data being stored in the state is data necessary for rendering and nothing else
[X] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[X] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[X] All JSX used for rendering exists in the render method
[X] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[X] If any new file was added I verified that:

[X] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[X] If a new CSS style is added I verified that:

[X] A similar style doesn't already exist
[X] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[X] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[X] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[X] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[X] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[X] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[X] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[X] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/luacmartins in version: 1.3.88-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/chiragsalian in version: 1.3.88-11 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅


Improve design of data section

[x] Login: Place FAQ in Card
[x] Overview: Structure page better
[x] My comments: Add text for empty comments
[x] My apps: Show apps with icons, button to remove.
[x] My apps: Use search to add apps

deployed


[BUG] - Issues running Signalling Server Behind NGINX TLS Reverse Proxy

**UE Version: **
UE 5.1.1
**Frontend Version: **
0.3.0
Problem component
Signalling Server
Description
When running a signaling server behind a reverse proxy (nginx+tls) I experience disconnects - stream suddenly disconnects on a random point of time.
Signalling Server throws error 1001 in log
Apr 05 12:28:17 ip-172-31-27-78 bash[2191]: 12:28:17.408 <- Streamer: {"type":"pong","time":1680697697}
Apr 05 12:28:38 ip-172-31-27-78 bash[2191]: 12:28:38.820 player 142 connection closed: 1001 -
Apr 05 12:28:38 ip-172-31-27-78 bash[2191]: 12:28:38.820 <- Streamer: {"type":"playerDisconnected","playerId":"142"}
Apr 05 12:29:23 ip-172-31-27-78 bash[2191]: 12:29:23.503 -> Streamer: {"type":"ping","time":1680697763}

Nginx access log shows last HTTP response of 101 and following with 404 code in access.log
x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Info.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Maximize.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:36 +0000] "GET /player.css HTTP/2.0" 304 0 "https://example.com/images/Settings.svg" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:38 +0000] "GET /images/Play.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:11:39 +0000] "GET /images/favicon-96x96.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:16:38 +0000] "GET / HTTP/1.1" 101 6370 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:22:16 +0000] "GET /ecp/Current/exporttool/microsoft.exchange.ediscovery.exporttool.application HTTP/1.1" 404 187 "-" "Mozilla/5.0 zgrab/0.x" -*
x.x.x.x - - [05/Apr/2023:12:26:13 +0000] "GET /images/Play.png HTTP/2.0" 304 0 "https://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:28:38 +0000] "GET / HTTP/1.1" 101 6366 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x.x.x.x Safari/537.36" -*
x.x.x.x - - [05/Apr/2023:12:39:29 +0000] "GET / HTTP/1.1" 404 197 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/x.x.x.x" -*

I've managed to do some packet capture on machine running SignallingServer. this is what I get in packet with 101 response:
GET / HTTP/1.1
Upgrade: websocket
Connection: upgrade
Host: example.com
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: e3qkaYZW2rBFr24k1gHiyQ==
Sec-WebSocket-Version: 13
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36
Origin: https://example.com
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,be;q=0.6,lt;q=0.5,pl;q=0.4
Cookie: AWSALBTG=nv8d6aTRJevVGR+q+1HwA8CKzshoQA6yeZumjaLoaXOxFmERg0kRDjFQsRNhOTy7qGpNRaKrEvMHmywnDeP34ojyKDzZYWz/rR5Bx8T6J+z3cmO+WIbV6kj+gxV3dLn1ke/t/QxNY3dVZDs/T6InL5kARtDdPAjeGm9MwYgEPHzHBOkbK/o=; AWSALBTGCORS=nv8d6aTRJevVGR+q+1HwA8CKzshoQA6yeZumjaLoaXOxFmERg0kRDjFQsRNhOTy7qGpNRaKrEvMHmywnDeP34ojyKDzZYWz/rR5Bx8T6J+z3cmO+WIbV6kj+gxV3dLn1ke/t/QxNY3dVZDs/T6InL5kARtDdPAjeGm9MwYgEPHzHBOkbK/o=

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ytWyo6hXjYCAaPKgmQ+Ah006Rn8=

nginx site conf looks like that
server {
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;  # Replace 3000 with your signaling server port
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
        proxy_read_timeout 300;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        #proxy_set_header Connection $connection_upgrade;
        proxy_set_header Sec-WebSocket-Accept $http_sec_websocket_accept;
        proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
        proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
        proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
        proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
    }

    listen 443 ssl;
    ssl_certificate /etc/cert/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/cert/live/example.com/privkey.pem;
    include /etc/cert/options-ssl-nginx.conf;
    ssl_dhparam /etc/cert/ssl-dhparams.pem;

}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }

    listen 80;
    server_name example.com;
    return 404;

}

As you I've added the utmost amount of possible headers required for WS protocol to work properly but still have no luck getting signalling server working properly behind a reverse proxy
Steps to Reproduce:
Run SignallingServer behind Nginx reverse proxy with tt TLS termination and pixel streaming plugin application on a backend
Expected behavior
Stream never breaks unrepentingly
Screenshots
If applicable, add screenshots to help explain your problem.
Platform (please complete the following information):

OS: Mac OS 12.5.4
Chrome 111.0.5563.146
Version 0.0.1

Additional context
Add any other context about the problem here.

Increasing the timeout value for WebSocket connections in the nginx configuration file to ensure that the WebSocket connection is maintained for a longer period may help to fix this issue.


figure out why "use a single tokio runtime" PR had problems under prod-like cloudbench

https://github.com/neondatabase/neon/issues/6628#issuecomment-2025015263
### Tasks
- [ ] https://github.com/neondatabase/neon/pull/7331

Had an extensive session with @Bodobolero today, going over the results.
Update in this analysis dashboard panel
Summary:

Decision: we're going to try to do runs with lower number of projects involved
until we find a point where pageserver isn't overloaded.
"Is not overloaded" is defined as

the compaction iterations do not stall, i.e., they are steady
latencies look more like in prod (<1ms), not like the 130ms we get right now

Implemented an env-var configurable variant of the single tokio runtime patch for easier experimentaiton: https://github.com/neondatabase/neon/pull/7331

Note: Peter's benchmark overloaded compaction even without single runtime change.  Christian working with Peter to right-size the benchmark to reflect realistic load & will create new ticket for that.

For the record, that issue is https://github.com/neondatabase/cloud/issues/12335

Next actions when we pick this up:

Try using single runtime on the nightly cloudbench
Analyze pageserver internal metrics, e.g. compaction backlogs.
Then probably add better backpressure mechanisms on compaction, ingest, so that using a single runtime works robustly.


Formatter: Labels with code don't format the ":" correctly

the code
unlockvWatchHandle: close #vw_ideHost
becomes
unlockvWatchHandle : close #vw_ideHost

I'm going to close this and not make any changes.  If it comes back will re-evaluate


Score-based density estimators for SBI

What does this implement/fix? Explain your changes
This PR implements score-based methods for SBI (and related methods like flow matching). The first goal is to have a running version for score-based NPE. Later-on NLE, sequential methods and methods that can deal with multiple observations can be tackled.
This includes new base-classes for the required vectorfield-estimators  and posteriors.
Does this close any currently open issues?
Fixes #962
Checklist
Put an x in the boxes that apply. You can also fill these out after creating
the PR. If you're unsure about any of them, don't hesitate to ask. We're here to
help! This is simply a reminder of what we are going to look for before merging
your code.

[ ] I have read and understood the contribution
guidelines
[ ] I agree with re-licensing my contribution from AGPLv3 to Apache-2.0.
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have reported how long the new tests run and potentially marked them
with pytest.mark.slow.
[ ] New and existing unit tests pass locally with my changes
[ ] I performed linting and formatting as described in the contribution
guidelines
[ ] I rebased on main (or there are no conflicts with main)

Related to #963 and #966 .

Yes, I agree that my contributions are re-licensed under Apache 2.0 in the future.

Alright, I integrated everything with the current main and fixed some problematic side effects/bugs we introduced. The following stuff still has to be implemented/improved:

NSPE interface (MINOR)

[ ] Check docstrings (as this is user-exposed, might be some copy pasta)
[ ] build_posterior we do have two possibilities i.e. sample_with=”sde” will return a ScorePosterior and sample_with=”ode” will return a DirectPosterior (not implemented, may be very similar to flow matching implementation #1049 , but in the end should really just build a ZUKO CNFs). Some stuff has been commented out and needs to be checked.

ScorePosterior (MEDIATE)

[ ] sample should interface the score-based-samplers (dependent on 3)). But we need to properly shape conditions … . Not sure if need to use “accept_reject” for prior bounds, this anyway should in the future be done within the diffusion process.
[ ] log_prob Not sure if needed, if one wants an log_prob one should build a direct posterior. But maybe still good for map.
[ ] map Should use the score_net directly as gradient (no backprop on potentials) i.e. sample a few candidates, run gradient accent where the gradients is just the output of the score_net at t=T_min (Optional, create an issue to do this in the future).

score_based_potential (MINOR)

[ ] This is more conceptually/abstraction. It just is not a potential but the gradient of a potential and behaves differently than the other potentials (might need another class?). Although this should, as the other potentials, mediate IID stuff. (These will also change in @gmoss13  #1176. Any suggestions @janfb ?

Score based sampler (MAJOR)

[ ] This needs to be rewritten to be a general sampling interface (we only need to implement one for now, but it must be extendable)

Should have a “predict/step” which steps backward in time (with euler/DDIM/…)
Should have an optional “correct” which stays at the same time (Langevin/Gibbs …)

[ ] Needs to be vectorized i.e. must support batched x at best (but this also loosely depends on #1176)

Score nets/estimator It looks quite good; I might make a few minor changes to improve the architecture. (MEDIATE)

[ ] input z_score should be time-dependent (as we add noise to it so, std/mean will change)
[ ] output_scores should be preconditioned by analytic approximation.
[ ] Times should be preconditioned by how fast mean/std changes (if they do not change a lot, the score should also not change much).
[ ] Add option to add covariate to loss to reduce variance.

Tests: We need to extend and check tests. We currently have:

linearGaussian_nspe_test.py Currently only tests sample
score_estimator_tests.py Tests shaping conventions.
score_tests.py: Does not yet do something but implements some analytic scores. We need to test the samplers which we can also do with the analytic scores!

If you have time/want to do one of the points @rdgao @jsvetter, let me know. We can also chat about what should be done in more detail.

I just removed the DDIM predictor, all correctors, and all kernels. None of this was tests. See here for the backup.

Thanks, I will address your feedback first thing tomorrow.


An iterator over picked files

Hello, thank you for the great library. It's working really well but I'm kind of having a problem. I have this case where it would be much more efficient for me if rfd provided me with an iterator over the picked files rather than immediately allocating Vec for me (which is what rfd::FileDialog::pick_files does). For example in the Linux GTK3 backend I can see that there is actually this internal iterator which seems to be just what I need. It is then abstracted away with this collect:
https://github.com/PolyMeilex/rfd/blob/master/src/backend/gtk3/file_dialog/dialog_ffi.rs#L136
I can imagine there is many cases where you simply want to iterate over the results of pick_files once, so you don't really need to have it in a Vec.
Personally I'd change pick_files to return an Iterator instead because it really encourages efficiency: if you just want to iterate over it, you can do that but if you really want it to be in a Vec, you need to call collect yourself. I.e. more control. But I suppose it would be too much of a breaking change so maybe that should be pick_files_iter?
I wish I could implement this but I can only test the Linux implementation. I've done some initial work here:
https://github.com/r00ster91/rfd/commit/903679877e1c8660fdcda7901e33336e890f62e0
The Windows and macOS backends were pure guesswork and most likely don't work. How do you test them?
Additionally, adding the top-level pick_files_iter might also involve some challenges. I've come across some the size for values of type X cannot be known at compilation time errors trying to do that.
I would like your input on this. If you don't approve this, feel free to close it.

Hi! Thank you for interest.
Files were intentionally returned in a vec, to expose as little unsafe code to a user as possible, this way we don't have to worry about safety that much, as we control every part of the process. But exposing an iterator should be fine, not sure if it is safe to mark it send/sync yet, but I will investigate it further when I have more time.
pick_files_iter I don't like that name, but I don't think we have any better choices available, so let's stick with that.
As far as testing goes, I have Linux as my daily driver, for windows I use wine and dual booted windows, and for macOS I use an VM, so I can test all of those.
I will test/review your changes shortly.

I did some initial changes to make it build on Windows and macOS: PolyMeilex/commits/pick_files_iter
But I'm starting to wonder, do we really gain anything by adding this?
Memory footprint of a few file paths stored in a vec is miniscule, and the time it takes to alloc this vec is also really short in comparison to all the allocations that gtk/cocoa (not sure what about windows apis) does.
Could you share a use case that would benefit from this?

I think this bit of performance is worth it. From my view, I don't see any of the allocations GTK does so from my range I can only do so much and know that a Vec is being allocated for me so if it were an iterator it would give me a cleaner feeling. I'm trying to do the best I can basically. Additionally the API is nicer with an iterator as well. Also, while I was thinking how my code would look like with an iterator, I came across a bug that would not have happened if I had been given an iterator from the start. Ultimately you are free to decide whether this makes sense for you or not.


Irritations in new LTS table

Problem
zend-stratigility 3.0.0 was released on 15 Mar 2018 and the previous minor release (2.2) enters its security support phase, but this does not mean that the entire package receives only security support.
The table says something else:

Package
Status
Supported Version(s)
Support Ends

zendframework/zend-di
SECURITY
3.0, 2.6
2018-11-30

zendframework/zend-permissions-rbac
SECURITY
3.0, 2.6
2019-03-22

zendframework/zend-stratigility
SECURITY
3.0, 2.2
2019-03-15

The security status and the support end is correct for the lower versions of these packages, but not for version 3.0.
Suggestion
Extend the table like:

Package
Status
Supported Version(s)
Support Ends

zendframework/zend-di
ACTIVE, SECURITY
3.0, 2.6
N/A, 2018-11-30

zendframework/zend-permissions-rbac
ACTIVE, SECURITY
3.0, 2.6
N/A, 2019-03-22

zendframework/zend-stratigility
ACTIVE, SECURITY
3.0, 2.2
N/A, 2019-03-15

or rearrange the table:

Package
Status
Supported Version(s)
Support Ends

zendframework/zend-di
ACTIVE
3.0
N/A

SECURITY
2.6
2018-11-30

zendframework/zend-permissions-rbac
ACTIVE
3.0
N/A

SECURITY
2.6
2019-03-22

zendframework/zend-stratigility
ACTIVE
3.0
N/A

SECURITY
2.2
2019-03-15

@weierophinney
The newsletter is out, but the problem still exists.

Yes, totally aware, and know what changes I need to make; I hope to have them up and tested no later than Monday.

So, #104 MOSTLY fixed things, but I had some production issues (in particular, skeletons related to an LTS were not displaying; also there was a bug in the code that did the actual fetch from GitHub). Additionally, I noted that packages were not sorted, which made finding relevant information for a component really, really difficult.
I've fixed all of these issues as of today, however, and the table now accurately reflects reality!


Tracking with Detection

Is it possible to integrate detection algorithm with siammask tracking?

I think it's not a good idea because it slows up things because the first detection takes time and then tracking also takes time in this scenario.


Resubbing from chatterino PogChamp

Resubbing would be a cool thing to do from chatterino since I think I'm not the only one remembering when I can resub to what channel and never have the twitchchat itself open. Thanks FeelsGoodMan

I don't think I can even do that


Documenting new endpoints in the README

We have to document how capsule-proxy behaves with listing the new resources:

Node
StorageClass
IngressClass

I'm working on the IngressClass feature, StorageClass is going to be merged in a glimpse.
@bsctl may I ask you for some help?

@prometherion should we add additional webhooks for capsule, which will automatically assign name label on all of these resources? (on create\update cases, so this label cannot be deleted\modified by a user?)

Gosh @MaxFedotov, I totally forgot this mention, replying lately!

should we add additional webhooks for capsule, which will automatically assign name label on storage\ingress classes?

Honestly, I'm not a big fan of magic stuff runny under the hoods: I create a resource and a new label is popping up and I cannot understand why this is happening can be raised by cluster administrators, as well generating continuous reconciliation in GitOps environments since the label would be applied by the GitOps engine since a label diff between current and desired resource would occur.
The name label is a limitation for Ingress and Storage class but for capsule-proxy 0.2.0 I would like to overcome it working on #57.
We have definitely to document these mandatory steps, otherwise listing and related actions wouldn't work as expected.

@bsctl I just finished my assigned tasks for 0.1.0, I guess we're ready to draft the new documentation and, as well, the changelog!


Unable to successfully run nixos-install with xbootldrMountPoint option

Describe the bug
nixos-install fails when using the boot.loader.systemd-boot.xbootldrMountPoint parameter.
Steps To Reproduce
Steps to reproduce the behaviour:

Create a custom ISO with nixpkgs-unstable
Partition disk to use
a. a 512GB 8300 partition ext4 formatted mounted at /
b. a 4GB EF02 partition fat32 formatted mounted at /boot
c. a 512MB EF00 partition fat32 formatted mounted at /boot/efi
Modify configuration.nix to add the boot.loader.efi.efiSysMountPoint = "/boot/efi"; and boot.loader.systemd-boot.xbootldrMountPoint = "/boot"; lines
Use nixos-install

Expected behaviour
2 things here.

I expected the nixos installer to raise an error and quit after the bootctl install command failed. It raised an error and still continued with the installation. But that is not the reason I'm here.
I'm unable to understand this Partition has wrong PART_ENTRY_TYPE=c12a7328-f81f-11d2-ba4b-00a0c93ec93b for XBOOTLDR partition error. Also c12a7328-f81f-11d2-ba4b-00a0c93ec93b does not match the UUID of any of my partitions.

Screenshots
[nixos@nixos:/mnt]$ sudo nix-install
installing the boot loader...
setting up /etc...
Initializing machine ID from random generator.
/dev/nvme0n1p2: Partition has wrong PART_ENTRY_TYPE=c12a7328-f81f-11d2-ba4b-00a0c93ec93b for XBOOTLDR partition.
Traceback (most recent call last):
  File "/nix/store/712p6sw61vw33f5dcqrf7ryv9gmg5lkg-systemd-boot/bin/systemd-boot-builder", line 394, in <module>
    main()
  File "/nix/store/712p6sw61vw33f5dcqrf7ryv9gmg5lkg-systemd-boot/bin/systemd-boot-builder", line 377, in main
    install_bootloader(args)
  File "/nix/store/712p6sw61vw33f5dcqrf7ryv9gmg5lkg-systemd-boot/bin/systemd-boot-builder", line 292, in install_bootloader
    subprocess.check_call([f"{SYSTEMD}/bin/bootctl", f"--esp-path={EFI_SYS_MOUNT_POINT}"] + bootctl_flags + ["install"])
  File "/nix/store/3v2ch16fkl50i85n05h5ckss8pxx6836-python3-3.11.8/lib/python3.11/subprocess.py", line 413, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/nix/store/klc3y2c97sc22wsv1cjwf4dfwcws095l-systemd-255.2/bin/bootctl', '--esp-path=/boot/efi', '--boot-path=/boot', 'install']' returned non-zero exit status 1.
setting up /etc...
setting up /etc...
setting root password...
New password:
Retype new password:
passwd: password updated successfully
installation finished!

Additional context
Referencing this PR https://github.com/NixOS/nixpkgs/pull/285401, since that is the feature I'm trying to use.
I would've preferred to use ext4 for the /boot partition, and I did, but that too had failed, only to later realize systemd-boot in and of itself still doesn't have an ext4/btrfs/non-fat driver. (Ref)
I'm unsure if my partitioning scheme is incorrect, or if I need to add any additional configuration. Please do ask for any other information to help debug the issue.
Also, just a sidenote, I'm not using ext4 for /. I'm using BTRFS on LUKS. I mentioned ext4 for simplicity. But I don't think it should be relevant in this case. Please do ask for more information if needed.
Notify maintainers
@sdht0

Metadata
Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.
[nixos@nixos:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 6.6.21, NixOS, 24.05 (Uakari), 24.05.20240312.0ad13a6`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.18.1`
 - channels(root): `"nixos-24.05.20240312.0ad13a6"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs`

Add a :+1: reaction to issues you find important.

The /boot partition should be ea00 instead.

Facing a new error
installing the boot loader...
setting up /etc...
File system "/dev/nvme0n1p2" has wrong type for an EFI System Partition (ESP).
Traceback (most recent call last):
  File "/nix/store/f9pwpw6nl9gi1rqzf6lalkn855slgs10-systemd-boot/bin/systemd-boot-builder", line 394, in <module>
    main()
  File "/nix/store/f9pwpw6nl9gi1rqzf6lalkn855slgs10-systemd-boot/bin/systemd-boot-builder", line 377, in main
    install_bootloader(args)
  File "/nix/store/f9pwpw6nl9gi1rqzf6lalkn855slgs10-systemd-boot/bin/systemd-boot-builder", line 292, in install_bootloader
    subprocess.check_call([f"{SYSTEMD}/bin/bootctl", f"--esp-path={EFI_SYS_MOUNT_POINT}"] + bootctl_flags + ["install"])
  File "/nix/store/3v2ch16fkl50i85n05h5ckss8pxx6836-python3-3.11.8/lib/python3.11/subprocess.py", line 413, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/nix/store/klc3y2c97sc22wsv1cjwf4dfwcws095l-systemd-255.2/bin/bootctl', '--esp-path=/boot', '--boot-path=/boot/efi', 'install']' returned non-zero exit status 1.
setting up /etc...
setting up /etc...
setting root password...
New password:
Retype new password:
passwd: password updated successfully
installation finished!

/dev/nvme0n1p2 is mounted on /boot
/dev/nvme0n1p1 is mounted on /boot/efi

'--esp-path=/boot', '--boot-path=/boot/efi': looks like your definitions got switched somehow.

Ahhh! My bad!


Add get_bbox() to Sentence and (Temporary)SpanMention, and deprecate bbox_from_span and bbox_from_sentence

This PR has two benefits:

Type hints become short, hence easier to understand: Tuple[int, int, int, int, int] to Bbox.
No need to import bbox_from_sentence and bbox_from_span. Just use sentence.get_bbox() and span.get_bbox(). This is actually the benefit from using OOP.

P.S. There are many more spots where OOP (object-oriented programming) is more suited.

I think I fixed the issue.

Codecov Report

Merging #429 into master will decrease coverage by 0.15%.
The diff coverage is 75.60%.

@@            Coverage Diff             @@
##           master     #429      +/-   ##
==========================================
- Coverage   82.59%   82.44%   -0.16%
==========================================
  Files          86       86
  Lines        4366     4385      +19
  Branches      810      812       +2
==========================================
+ Hits         3606     3615       +9
- Misses        572      582      +10
  Partials      188      188

Flag
Coverage Δ

#unittests
82.44% <75.60%> (-0.16%)
:arrow_down:

Impacted Files
Coverage Δ

src/fonduer/candidates/models/span_mention.py
74.76% <60.00%> (-0.73%)
:arrow_down:

src/fonduer/parser/models/sentence.py
93.38% <60.00%> (-1.44%)
:arrow_down:

src/fonduer/utils/utils_visual.py
58.33% <71.42%> (-6.67%)
:arrow_down:

src/fonduer/utils/data_model_utils/visual.py
88.23% <77.77%> (ø)

src/fonduer/parser/visual_linker.py
83.57% <100.00%> (+0.07%)
:arrow_up:

src/fonduer/utils/visualizer.py
79.16% <100.00%> (ø)

Thanks for this PR!
What do you think about having a fonduer.typing module to store all Fonduer specific typings? Bbox is a good example here.

Having a fonduer.typing module is a good idea.
IMO, this will have type aliases to make codes more readable.
For example, the following type hints are very lengthy and hard to read.
https://github.com/HazyResearch/fonduer/blob/bd79688230ba11f5ed97e58cc78548de14b2c3db/src/fonduer/parser/visual_linker.py#L31-L33
By defining type aliases like below:
Alias1 = List[Tuple[Tuple[int, int], str]]
Alias2 = OrderedDict[Tuple[str, int], Tuple[int, int]]

This could become
self.pdf_word_list: Optional[Alias1] = None
self.html_word_list: Optional[Alias1] = None
self.links: Optional[Alias2] = None

However, Bbox is not an alias, hence IMO it is not suited to be placed fonduer.typing.
Moreover, I'll be adding methods to Bbox like Bbox.horz_aligned (superseding bbox_horz_aligned) and Bbox.vert_aligned (superseding bbox_vert_aligned), which makes Bbox less suitable in fonduer.typing.

A good example would be: alias for Throtter
Currently,
https://github.com/HazyResearch/fonduer/blob/bd79688230ba11f5ed97e58cc78548de14b2c3db/src/fonduer/candidates/candidates.py#L65
with
Throttler=Callable[[Tuple[Mention, ...]], bool]

to
throttlers: Optional[List[Throttler]] = None,