Coverage report: 81%

Files Functions Classes

coverage.py v7.13.5, created at 2026-09-02 00:03 +0000

File function   statements missing excluded   coverage
core / src / sensorkit / api / __init__.py entity   3 1 0   67%
core / src / sensorkit / api / __init__.py program   3 1 0   67%
core / src / sensorkit / api / __init__.py controller   3 1 0   67%
core / src / sensorkit / api / __init__.py device   3 1 0   67%
core / src / sensorkit / api / __init__.py (no function)   31 2 0   94%
core / src / sensorkit / api / bootstrap.py _read_config   0 0 1   100%
core / src / sensorkit / api / bootstrap.py _read_config   0 0 1   100%
core / src / sensorkit / api / bootstrap.py _read_config   4 4 0   0%
core / src / sensorkit / api / bootstrap.py _read_config._read_config_sync   9 9 0   0%
core / src / sensorkit / api / bootstrap.py _imports_from_env   1 1 0   0%
core / src / sensorkit / api / bootstrap.py _import_modules_sync   15 15 0   0%
core / src / sensorkit / api / bootstrap.py set_config_location   5 5 0   0%
core / src / sensorkit / api / bootstrap.py load_config   6 6 0   0%
core / src / sensorkit / api / bootstrap.py import_modules   3 3 0   0%
core / src / sensorkit / api / bootstrap.py connect   10 3 0   70%
core / src / sensorkit / api / bootstrap.py (no function)   23 0 6   100%
core / src / sensorkit / api / declarative.py _mark_decl_type   2 0 0   100%
core / src / sensorkit / api / declarative.py auto_create_decl   7 0 0   100%
core / src / sensorkit / api / declarative.py decl_for_instance   1 1 0   0%
core / src / sensorkit / api / declarative.py entity_for_instance   1 1 0   0%
core / src / sensorkit / api / declarative.py _mark_callback   3 1 0   67%
core / src / sensorkit / api / declarative.py is_callback   1 0 0   100%
core / src / sensorkit / api / declarative.py get_callback_kind   1 0 0   100%
core / src / sensorkit / api / declarative.py introspect_param_type   5 0 0   100%
core / src / sensorkit / api / declarative.py introspect_decls   13 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredEntity.__init__   5 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredEntity.delegate_target   1 1 0   0%
core / src / sensorkit / api / declarative.py DeclaredEntity.binding   2 2 0   0%
core / src / sensorkit / api / declarative.py DeclaredEntity.associate   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredEntity.register   9 1 0   89%
core / src / sensorkit / api / declarative.py DeclaredEntity.validate_declaration   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredEntity.create_impl   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredEntity.register_callback   5 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredDevice.__init__   2 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredDevice.create_impl   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredDevice.validate_declaration   14 3 0   79%
core / src / sensorkit / api / declarative.py DeclaredDevice.register_callback   7 1 0   86%
core / src / sensorkit / api / declarative.py DeclaredController.create_impl   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredController.register_callback   7 1 0   86%
core / src / sensorkit / api / declarative.py DeclaredProgram.create_impl   1 0 0   100%
core / src / sensorkit / api / declarative.py DeclaredProgram.register_callback   8 0 0   100%
core / src / sensorkit / api / declarative.py Service.__init__   11 0 0   100%
core / src / sensorkit / api / declarative.py Service.add   10 5 0   50%
core / src / sensorkit / api / declarative.py Service.include   23 12 0   48%
core / src / sensorkit / api / declarative.py Service.include_module   2 2 0   0%
core / src / sensorkit / api / declarative.py Service.register   5 0 0   100%
core / src / sensorkit / api / declarative.py Service.start   16 1 0   94%
core / src / sensorkit / api / declarative.py Service.start.wait_for_shutdown   11 8 0   27%
core / src / sensorkit / api / declarative.py Service.run   4 0 0   100%
core / src / sensorkit / api / declarative.py Service.stop   3 0 0   100%
core / src / sensorkit / api / declarative.py _decorator   4 0 0   100%
core / src / sensorkit / api / declarative.py on_attach   5 0 0   100%
core / src / sensorkit / api / declarative.py on_detach   5 0 0   100%
core / src / sensorkit / api / declarative.py command_handler   5 0 0   100%
core / src / sensorkit / api / declarative.py task_handler   5 0 0   100%
core / src / sensorkit / api / declarative.py task_factory   5 0 0   100%
core / src / sensorkit / api / declarative.py on_enable   5 2 0   60%
core / src / sensorkit / api / declarative.py on_disable   5 2 0   60%
core / src / sensorkit / api / declarative.py declare_entity   3 0 0   100%
core / src / sensorkit / api / declarative.py declare_device   18 3 0   83%
core / src / sensorkit / api / declarative.py declare_controller   3 0 0   100%
core / src / sensorkit / api / declarative.py declare_program   3 0 0   100%
core / src / sensorkit / api / declarative.py (no function)   99 0 0   100%
core / src / sensorkit / api / entrypoint.py ServiceEntrypoint.from_spec   1 1 0   0%
core / src / sensorkit / api / entrypoint.py ServiceEntrypoint.__init__   2 0 0   100%
core / src / sensorkit / api / entrypoint.py ServiceEntrypoint.run   22 10 0   55%
core / src / sensorkit / api / entrypoint.py ServiceEntrypoint.__call__   1 0 0   100%
core / src / sensorkit / api / entrypoint.py service_entrypoint   2 0 0   100%
core / src / sensorkit / api / entrypoint.py service_entrypoint.decorator   1 0 0   100%
core / src / sensorkit / api / entrypoint.py run_services   11 0 0   100%
core / src / sensorkit / api / entrypoint.py run_services.signal_shutdown   15 6 0   60%
core / src / sensorkit / api / entrypoint.py _restart_loop   14 0 0   100%
core / src / sensorkit / api / entrypoint.py _service_loop   21 0 0   100%
core / src / sensorkit / api / entrypoint.py _service_loop._wait_for_shutdown   7 0 0   100%
core / src / sensorkit / api / entrypoint.py _service_proc   27 5 0   81%
core / src / sensorkit / api / entrypoint.py (no function)   27 0 0   100%
core / src / sensorkit / astro / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / astro / common.py ReferenceFrame.to_astropy   12 0 0   100%
core / src / sensorkit / astro / common.py TLE.to_list   3 0 0   100%
core / src / sensorkit / astro / common.py TLE.norad_id   2 0 0   100%
core / src / sensorkit / astro / common.py SitePosition.from_coords   1 1 0   0%
core / src / sensorkit / astro / common.py SitePosition.to_coords   2 2 0   0%
core / src / sensorkit / astro / common.py AltAzPointing.from_coords   1 1 0   0%
core / src / sensorkit / astro / common.py RADecPointing.from_coords   1 1 0   0%
core / src / sensorkit / astro / common.py RADecPointing.to_coords   2 0 0   100%
core / src / sensorkit / astro / common.py RADecPointing.ra_hms   1 0 0   100%
core / src / sensorkit / astro / common.py RADecPointing.dec_dms   1 0 0   100%
core / src / sensorkit / astro / common.py (no function)   48 0 2   100%
core / src / sensorkit / astro / coords.py astropy_unit   2 0 0   100%
core / src / sensorkit / astro / coords.py Horizontal.to_astropy   3 0 0   100%
core / src / sensorkit / astro / coords.py Equatorial.to_astropy   4 0 0   100%
core / src / sensorkit / astro / coords.py Equatorial.ra_hms   6 0 0   100%
core / src / sensorkit / astro / coords.py Equatorial.dec_dms   5 0 0   100%
core / src / sensorkit / astro / coords.py Geodetic.to_astropy   4 0 0   100%
core / src / sensorkit / astro / coords.py Cartesian.__mul__   7 0 0   100%
core / src / sensorkit / astro / coords.py StateVector.to_numpy   1 0 0   100%
core / src / sensorkit / astro / coords.py StateVector.from_astropy   5 0 0   100%
core / src / sensorkit / astro / coords.py StateVector.to_astropy   4 0 0   100%
core / src / sensorkit / astro / coords.py (no function)   46 0 3   100%
core / src / sensorkit / astro / observer.py EarthObserver.bootstrap   6 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.get   3 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.__init__   2 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.to_astropy   2 2 0   0%
core / src / sensorkit / astro / observer.py EarthObserver.get_sunrise_times   1 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.get_sunrise_time   2 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.get_sunset_times   1 0 0   100%
core / src / sensorkit / astro / observer.py EarthObserver.get_sunset_time   2 0 0   100%
core / src / sensorkit / astro / observer.py (no function)   24 0 0   100%
core / src / sensorkit / astro / target.py _topocentric_cartesian   2 0 0   100%
core / src / sensorkit / astro / target.py _topocentric_icrs   1 0 0   100%
core / src / sensorkit / astro / target.py _topocentric_cirs   3 0 0   100%
core / src / sensorkit / astro / target.py _output_frame_transform   14 2 0   86%
core / src / sensorkit / astro / target.py _ephemeris_points   11 0 0   100%
core / src / sensorkit / astro / target.py TargetTrack.__init__   8 0 0   100%
core / src / sensorkit / astro / target.py TargetTrack.sample   5 0 0   100%
core / src / sensorkit / astro / target.py TargetTrack.sample._sample_series   9 1 0   89%
core / src / sensorkit / astro / target.py TargetTrack.stream   9 0 0   100%
core / src / sensorkit / astro / target.py TargetTrack._propagate_through   8 0 0   100%
core / src / sensorkit / astro / target.py _accepted_frame   7 1 0   86%
core / src / sensorkit / astro / target.py BaseTarget.adapt   23 1 0   96%
core / src / sensorkit / astro / target.py BaseTarget.to_trajectory   1 0 0   100%
core / src / sensorkit / astro / target.py BaseTarget.to_track   4 1 0   75%
core / src / sensorkit / astro / target.py BaseTarget.to_ephemeris_target   3 0 0   100%
core / src / sensorkit / astro / target.py FixedTarget.to_astropy   0 0 1   100%
core / src / sensorkit / astro / target.py AltAzTarget.to_astropy   1 1 0   0%
core / src / sensorkit / astro / target.py ICRSTarget.to_astropy   1 0 0   100%
core / src / sensorkit / astro / target.py TLETarget.to_trajectory   1 0 0   100%
core / src / sensorkit / astro / target.py StateVectorTarget.to_trajectory   1 0 0   100%
core / src / sensorkit / astro / target.py StateVectorTarget.sv_gcrf   3 1 0   67%
core / src / sensorkit / astro / target.py time_grid   12 0 0   100%
core / src / sensorkit / astro / target.py make_altaz_frame   1 0 0   100%
core / src / sensorkit / astro / target.py norm_az_deg   1 0 0   100%
core / src / sensorkit / astro / target.py sample_altaz_series   39 15 0   62%
core / src / sensorkit / astro / target.py altitude_mask   1 0 0   100%
core / src / sensorkit / astro / target.py darkness_mask   6 6 0   0%
core / src / sensorkit / astro / target.py sun_avoidance_mask   9 9 0   0%
core / src / sensorkit / astro / target.py moon_avoidance_mask   9 9 0   0%
core / src / sensorkit / astro / target.py is_observable   20 7 0   65%
core / src / sensorkit / astro / target.py (no function)   99 0 5   100%
core / src / sensorkit / astro / trajectory.py _gcrs_cartesian   3 0 0   100%
core / src / sensorkit / astro / trajectory.py Trajectory.propagate   0 0 0   100%
core / src / sensorkit / astro / trajectory.py Trajectory.sample   0 0 0   100%
core / src / sensorkit / astro / trajectory.py OrbitalTrajectory.__init__   2 0 0   100%
core / src / sensorkit / astro / trajectory.py OrbitalTrajectory.propagate   2 0 0   100%
core / src / sensorkit / astro / trajectory.py OrbitalTrajectory.sample   5 0 0   100%
core / src / sensorkit / astro / trajectory.py TLETrajectory.__init__   1 0 0   100%
core / src / sensorkit / astro / trajectory.py TLETrajectory.propagate   1 0 0   100%
core / src / sensorkit / astro / trajectory.py TLETrajectory.sample   10 0 0   100%
core / src / sensorkit / astro / trajectory.py (no function)   25 0 0   100%
core / src / sensorkit / auto / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / auto / agent.py _set_controller_config_names   3 3 0   0%
core / src / sensorkit / auto / agent.py AgentConfig.model_post_init   2 2 0   0%
core / src / sensorkit / auto / agent.py AgentControllerInfo.default   1 1 0   0%
core / src / sensorkit / auto / agent.py AgentOperatingState.derive_for_request   1 1 0   0%
core / src / sensorkit / auto / agent.py AgentOperatingState.derive_for_status   1 1 0   0%
core / src / sensorkit / auto / agent.py AgentOperatingState.derive_for_config_change   7 7 0   0%
core / src / sensorkit / auto / agent.py AgentSchedulerState.derive_for_request   1 1 0   0%
core / src / sensorkit / auto / agent.py AgentSchedulerState.derive_for_status   1 1 0   0%
core / src / sensorkit / auto / agent.py AgentState.apply_to_operator   17 1 0   94%
core / src / sensorkit / auto / agent.py agent_service   17 17 0   0%
core / src / sensorkit / auto / agent.py agent_service._agent_configure_request   4 4 0   0%
core / src / sensorkit / auto / agent.py agent_service.publish   4 4 0   0%
core / src / sensorkit / auto / agent.py (no function)   57 0 0   100%
core / src / sensorkit / auto / constraint.py Constraint.model_registry   1 0 0   100%
core / src / sensorkit / auto / constraint.py Constraint.check_task   0 0 0   100%
core / src / sensorkit / auto / constraint.py Constraint._compat   8 2 0   75%
core / src / sensorkit / auto / constraint.py ConstraintDetails.model_registry   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.__init__   14 2 0   86%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.is_active   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.is_ready   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.wait_ready   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.next_update   4 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.ready   4 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.constrain   4 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.clear   5 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.cleanup   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.hold_remaining   3 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator.holding_until_dt   4 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator._update_state   7 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator._do_hold   5 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator._begin_hold   5 1 0   80%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator._cancel_hold   2 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintEvaluator._stop_hold_task   3 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintManager.__init__   7 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintManager.entries   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintManager.is_constrained   1 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintManager.start   9 2 0   78%
core / src / sensorkit / auto / constraint.py ConstraintManager._set_state   16 0 0   100%
core / src / sensorkit / auto / constraint.py ConstraintManager._constraint_supervisor   24 3 0   88%
core / src / sensorkit / auto / constraint.py ConstraintManager._constraint_task   21 2 0   90%
core / src / sensorkit / auto / constraint.py GenericConstraint.check_task   24 0 0   100%
core / src / sensorkit / auto / constraint.py (no function)   78 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerStateMonitor.__init__   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerStateMonitor.start   3 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerStateMonitor._monitor   10 6 0   40%
core / src / sensorkit / auto / lifecycle.py ControllerStateMonitor.in_error   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerStateMonitor.wait   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProcError.__init__   2 2 0   0%
core / src / sensorkit / auto / lifecycle.py DemandProc.__init__   6 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.start   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc._demand_proc   17 3 0   82%
core / src / sensorkit / auto / lifecycle.py DemandProc._demand_proc_cancelled   24 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.shield_with_cleanup   4 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.run_with_cleanup   2 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.run_with_cleanup._execute   5 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.state_logic   0 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.stop_logic   0 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.abort_logic   0 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.interrupt_no_raise   7 2 0   71%
core / src / sensorkit / auto / lifecycle.py DemandProc.stop   8 1 0   88%
core / src / sensorkit / auto / lifecycle.py DemandProc.abort   8 1 0   88%
core / src / sensorkit / auto / lifecycle.py DemandProc.cancel   2 2 0   0%
core / src / sensorkit / auto / lifecycle.py DemandProc.done   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py DemandProc.error   1 1 0   0%
core / src / sensorkit / auto / lifecycle.py DemandProc.future   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.__init__   5 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.start   3 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.stop   3 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.enable   1 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.disable   2 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.enabled   1 1 0   0%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.demand_state   1 1 0   0%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.set_demand_state   0 0 1   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.set_demand_state   0 0 1   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.set_demand_state   0 0 1   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.set_demand_state   3 1 0   67%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle._lifecycle   20 2 0   90%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle._lifecycle_reactor   25 10 0   60%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle._error_recovery   32 32 0   0%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.OperateProc.state_logic   35 15 0   57%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.OperateProc.stop_logic   12 8 0   33%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.OperateProc.abort_logic   6 2 0   67%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.StandbyProc.state_logic   11 0 0   100%
core / src / sensorkit / auto / lifecycle.py ControllerLifecycle.ShutdownProc.state_logic   11 0 0   100%
core / src / sensorkit / auto / lifecycle.py (no function)   89 0 19   100%
core / src / sensorkit / auto / mode.py Mode.evaluate   8 1 0   88%
core / src / sensorkit / auto / mode.py Mode.__lt__   1 0 0   100%
core / src / sensorkit / auto / mode.py _ensure_unique_mode_names   3 0 0   100%
core / src / sensorkit / auto / mode.py Criterion.evaluate   0 0 0   100%
core / src / sensorkit / auto / mode.py Criterion._compat   5 0 0   100%
core / src / sensorkit / auto / mode.py TimeRangeCriterion.evaluate   15 3 0   80%
core / src / sensorkit / auto / mode.py TaskingAvailableCriterion.evaluate   5 0 0   100%
core / src / sensorkit / auto / mode.py AfterActivityCriterion.evaluate   9 0 0   100%
core / src / sensorkit / auto / mode.py (no function)   46 0 0   100%
core / src / sensorkit / auto / operator.py ControllerConfig.name   3 1 0   67%
core / src / sensorkit / auto / operator.py ControllerConfig.name   1 0 0   100%
core / src / sensorkit / auto / operator.py ControllerConfig.mode   1 1 0   0%
core / src / sensorkit / auto / operator.py ControllerConfig.program_config   1 1 0   0%
core / src / sensorkit / auto / operator.py ControllerConfig.model_post_init   2 0 0   100%
core / src / sensorkit / auto / operator.py ControllerConfig.propagate_config   3 3 0   0%
core / src / sensorkit / auto / operator.py ControllerDriver.__init__   7 0 0   100%
core / src / sensorkit / auto / operator.py ControllerDriver.start   15 3 0   80%
core / src / sensorkit / auto / operator.py ControllerDriver.stop   1 0 0   100%
core / src / sensorkit / auto / operator.py ControllerDriver.evaluate_state   12 3 0   75%
core / src / sensorkit / auto / operator.py ControllerDriver.set_demand   32 11 0   66%
core / src / sensorkit / auto / operator.py ProgramStateManager.__init__   5 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager.assign_controller   4 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager.enable   11 2 0   82%
core / src / sensorkit / auto / operator.py ProgramStateManager.disable   3 3 0   0%
core / src / sensorkit / auto / operator.py ProgramStateManager.global_enable   3 2 0   33%
core / src / sensorkit / auto / operator.py ProgramStateManager.global_disable   3 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager.is_enabled   1 1 0   0%
core / src / sensorkit / auto / operator.py ProgramStateManager.get_target_controller   3 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager.start   6 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager._handle_program   24 9 0   62%
core / src / sensorkit / auto / operator.py ProgramStateManager._watch_discovery   7 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager._watch_changes   5 0 0   100%
core / src / sensorkit / auto / operator.py ProgramStateManager.enabled_programs   1 0 0   100%
core / src / sensorkit / auto / operator.py VirtualOperator.__init__   7 0 0   100%
core / src / sensorkit / auto / operator.py VirtualOperator.start   5 0 0   100%
core / src / sensorkit / auto / operator.py VirtualOperator.stop   5 0 0   100%
core / src / sensorkit / auto / operator.py VirtualOperator._virtual_operator   11 1 0   91%
core / src / sensorkit / auto / operator.py (no function)   66 0 0   100%
core / src / sensorkit / auto / scheduler.py Scheduler.__init__   5 0 0   100%
core / src / sensorkit / auto / scheduler.py Scheduler.get_schedule   1 1 0   0%
core / src / sensorkit / auto / scheduler.py Scheduler.get_intent   5 2 0   60%
core / src / sensorkit / auto / scheduler.py Scheduler.update   18 7 0   61%
core / src / sensorkit / auto / scheduler.py Scheduler._support_after_activity   12 7 0   42%
core / src / sensorkit / auto / scheduler.py debug_print_schedule   3 3 0   0%
core / src / sensorkit / auto / scheduler.py create_schedule   5 0 0   100%
core / src / sensorkit / auto / scheduler.py create_schedule.merge_func   1 0 0   100%
core / src / sensorkit / auto / scheduler.py (no function)   34 0 0   100%
core / src / sensorkit / backend / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / backend / base.py Backend.__init__   1 0 0   100%
core / src / sensorkit / backend / base.py Backend.register_service   1 0 0   100%
core / src / sensorkit / backend / base.py Backend.shutdown_request_listeners   1 0 0   100%
core / src / sensorkit / backend / base.py Backend.request   1 0 0   100%
core / src / sensorkit / backend / base.py Backend.stream   1 0 0   100%
core / src / sensorkit / backend / base.py Backend.key_value   1 0 0   100%
core / src / sensorkit / backend / base.py Entity.at   1 0 0   100%
core / src / sensorkit / backend / base.py Entity.subject   1 0 0   100%
core / src / sensorkit / backend / base.py Entity.__str__   1 0 0   100%
core / src / sensorkit / backend / base.py Entity.__repr__   1 1 0   0%
core / src / sensorkit / backend / base.py Subject.full_path   1 0 0   100%
core / src / sensorkit / backend / base.py Subject.entity   1 0 0   100%
core / src / sensorkit / backend / base.py Subject.__str__   1 0 0   100%
core / src / sensorkit / backend / base.py Subject.__repr__   1 0 0   100%
core / src / sensorkit / backend / base.py RemoteRequestError.__init__   2 0 0   100%
core / src / sensorkit / backend / base.py RemoteRequestError.parse   5 0 0   100%
core / src / sensorkit / backend / base.py RemoteRequestError.from_exception   1 0 0   100%
core / src / sensorkit / backend / base.py RemoteRequestError.encode   1 0 0   100%
core / src / sensorkit / backend / base.py UnregisteredResponder.__init__   1 0 0   100%
core / src / sensorkit / backend / base.py RequestResponseContext.invoke   5 0 0   100%
core / src / sensorkit / backend / base.py RequestResponseContext.handle_request   2 0 0   100%
core / src / sensorkit / backend / base.py RequestResponseContext.handle_request._request_wrapper   9 2 0   78%
core / src / sensorkit / backend / base.py StreamContext.list_keys   1 1 0   0%
core / src / sensorkit / backend / base.py StreamContext.consume   1 0 0   100%
core / src / sensorkit / backend / base.py StreamContext.publish   1 0 0   100%
core / src / sensorkit / backend / base.py StreamContext.publish_event   1 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.monitor_all   6 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.monitor_all.key_value_monitor   3 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.monitor   3 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.monitor.key_value_monitor   3 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.get_all   9 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.get   1 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.create   1 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.update   1 0 0   100%
core / src / sensorkit / backend / base.py KeyValueContext.delete   1 0 0   100%
core / src / sensorkit / backend / base.py KVEntry.deleted   1 0 0   100%
core / src / sensorkit / backend / base.py KeyNotFound.__init__   2 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.create   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.register_service   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.request_invoke   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.request_listen   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.request_purge_listeners   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.stream_list   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.stream_publish   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.stream_consume   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.kv_monitor   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.kv_get   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.kv_create   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.kv_update   0 0 0   100%
core / src / sensorkit / backend / base.py BackendImpl.kv_delete   0 0 0   100%
core / src / sensorkit / backend / base.py (no function)   121 0 0   100%
core / src / sensorkit / backend / event.py Event.model_registry   1 0 0   100%
core / src / sensorkit / backend / event.py Event.timestamp   1 0 0   100%
core / src / sensorkit / backend / event.py EventMultiplexer.__init__   2 0 0   100%
core / src / sensorkit / backend / event.py EventMultiplexer.wait_ready   0 0 0   100%
core / src / sensorkit / backend / event.py EventMultiplexer.parse_event   8 3 0   62%
core / src / sensorkit / backend / event.py EventMultiplexer.event_queue   6 0 0   100%
core / src / sensorkit / backend / event.py EventMultiplexer.all_events   5 0 0   100%
core / src / sensorkit / backend / event.py EventStreamConsumer.__init__   3 0 0   100%
core / src / sensorkit / backend / event.py EventStreamConsumer.start   2 0 0   100%
core / src / sensorkit / backend / event.py EventStreamConsumer.wait_ready   1 0 0   100%
core / src / sensorkit / backend / event.py EventStreamConsumer._event_consumer_task   11 5 0   55%
core / src / sensorkit / backend / event.py (no function)   34 0 2   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement._observe   4 0 0   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement.subscribe   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement.subscribe_children   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement.subscribe_descendants   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement.direct_set   4 0 0   100%
core / src / sensorkit / backend / fake.py FakeBrokerElement.descendant_set   6 0 0   100%
core / src / sensorkit / backend / fake.py FakeBroker.__init__   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBroker.element   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBroker.children_of   5 2 0   60%
core / src / sensorkit / backend / fake.py FakeBroker.children_of.node_factory   4 0 0   100%
core / src / sensorkit / backend / fake.py FakeBroker.descendants_of   4 2 0   50%
core / src / sensorkit / backend / fake.py FakeBroker.publish   10 1 0   90%
core / src / sensorkit / backend / fake.py FakeBroker.defined   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.create   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.__init__   6 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.request_invoke   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.request_listen   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.request_purge_listeners   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.stream_list   1 1 0   0%
core / src / sensorkit / backend / fake.py FakeBackendImpl.stream_publish   7 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl._stream_filtered_history   17 1 0   94%
core / src / sensorkit / backend / fake.py FakeBackendImpl.stream_consume   15 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.stream_consume._stream_consume   4 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_monitor   15 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_monitor._kv_monitor   3 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl._kv_defined_not_deleted   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_get   4 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl._kv_do_update   24 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl._kv_do_update._expire_ttl   2 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl._kv_do_update._expire_cleanup   3 1 0   67%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_create   7 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_update   1 0 0   100%
core / src / sensorkit / backend / fake.py FakeBackendImpl.kv_delete   2 0 0   100%
core / src / sensorkit / backend / fake.py (no function)   62 0 0   100%
core / src / sensorkit / backend / lease.py Lease.acquire   10 1 0   90%
core / src / sensorkit / backend / lease.py Lease.__init__   9 0 0   100%
core / src / sensorkit / backend / lease.py Lease._temp_monitor_lease   3 0 0   100%
core / src / sensorkit / backend / lease.py Lease._expiry_monitor   13 2 0   85%
core / src / sensorkit / backend / lease.py Lease.refresh   5 1 0   80%
core / src / sensorkit / backend / lease.py Lease.expire   10 0 0   100%
core / src / sensorkit / backend / lease.py Lease.expired   1 0 0   100%
core / src / sensorkit / backend / lease.py Lease.wait_expired   1 0 0   100%
core / src / sensorkit / backend / lease.py Lease.__aenter__   1 1 0   0%
core / src / sensorkit / backend / lease.py Lease.__aexit__   1 1 0   0%
core / src / sensorkit / backend / lease.py LeaseGroup.__init__   3 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup.acquire   5 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup.refresh_loop   14 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup.expire   9 1 0   89%
core / src / sensorkit / backend / lease.py LeaseGroup._wait_for_event   7 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup._schedule_pop   4 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup._time_until_next_refresh   1 0 0   100%
core / src / sensorkit / backend / lease.py LeaseGroup._schedule_add   3 0 0   100%
core / src / sensorkit / backend / lease.py (no function)   40 0 0   100%
core / src / sensorkit / backend / nats.py Method.with_prefix   1 0 0   100%
core / src / sensorkit / backend / nats.py _subject_to_nats   13 2 0   85%
core / src / sensorkit / backend / nats.py _subject_from_nats   6 2 0   67%
core / src / sensorkit / backend / nats.py _kv_entry   1 0 0   100%
core / src / sensorkit / backend / nats.py NATSBackendImpl.create   11 1 0   91%
core / src / sensorkit / backend / nats.py NATSBackendImpl.__init__   5 0 0   100%
core / src / sensorkit / backend / nats.py NATSBackendImpl.register_service   4 4 0   0%
core / src / sensorkit / backend / nats.py NATSBackendImpl.request_invoke   7 2 0   71%
core / src / sensorkit / backend / nats.py NATSBackendImpl.request_listen   6 2 0   67%
core / src / sensorkit / backend / nats.py NATSBackendImpl.request_listen._handle_request   4 1 0   75%
core / src / sensorkit / backend / nats.py NATSBackendImpl.request_listen._receive_request   2 0 0   100%
core / src / sensorkit / backend / nats.py NATSBackendImpl.request_purge_listeners   5 0 0   100%
core / src / sensorkit / backend / nats.py NATSBackendImpl.stream_list   5 5 0   0%
core / src / sensorkit / backend / nats.py NATSBackendImpl.stream_publish   4 2 0   50%
core / src / sensorkit / backend / nats.py NATSBackendImpl._stream_iterator   8 1 0   88%
core / src / sensorkit / backend / nats.py NATSBackendImpl.stream_consume   23 6 0   74%
core / src / sensorkit / backend / nats.py NATSBackendImpl._kv_iterator   11 0 0   100%
core / src / sensorkit / backend / nats.py NATSBackendImpl.kv_monitor   7 4 0   43%
core / src / sensorkit / backend / nats.py NATSBackendImpl.kv_get   9 2 0   78%
core / src / sensorkit / backend / nats.py NATSBackendImpl.kv_create   11 4 0   64%
core / src / sensorkit / backend / nats.py NATSBackendImpl.kv_update   16 9 0   44%
core / src / sensorkit / backend / nats.py NATSBackendImpl.kv_delete   6 4 0   33%
core / src / sensorkit / backend / nats.py (no function)   60 0 0   100%
core / src / sensorkit / backend / request.py Call.__init__   6 0 0   100%
core / src / sensorkit / backend / request.py Call._invoke   6 0 0   100%
core / src / sensorkit / backend / request.py Call.invoke   7 0 0   100%
core / src / sensorkit / backend / request.py Call.wait   1 0 0   100%
core / src / sensorkit / backend / request.py Call.get_future   1 0 0   100%
core / src / sensorkit / backend / request.py Call.done   1 1 0   0%
core / src / sensorkit / backend / request.py Call.result   1 0 0   100%
core / src / sensorkit / backend / request.py Call.run_to_completion   4 0 0   100%
core / src / sensorkit / backend / request.py Call.__await__   1 0 0   100%
core / src / sensorkit / backend / request.py CallHandler.__init__   2 0 0   100%
core / src / sensorkit / backend / request.py CallHandler._run_handler   1 0 0   100%
core / src / sensorkit / backend / request.py CallHandler.__call__   5 0 0   100%
core / src / sensorkit / backend / request.py ExtendedCall.__init__   3 0 0   100%
core / src / sensorkit / backend / request.py ExtendedCall.invoke   26 4 0   85%
core / src / sensorkit / backend / request.py ExtendedCall.invoke.extended_call_done   7 1 0   86%
core / src / sensorkit / backend / request.py ExtendedCall._rejection_error   11 3 0   73%
core / src / sensorkit / backend / request.py ExtendedCall._await_response_events   15 1 0   93%
core / src / sensorkit / backend / request.py CallContext.__init__   4 0 0   100%
core / src / sensorkit / backend / request.py CallContext.accept   7 1 0   86%
core / src / sensorkit / backend / request.py CallContext.reject   7 1 0   86%
core / src / sensorkit / backend / request.py CallContext.progress   3 1 0   67%
core / src / sensorkit / backend / request.py CallContext.progress_from_task   6 0 0   100%
core / src / sensorkit / backend / request.py CallContext.succeed   5 2 0   60%
core / src / sensorkit / backend / request.py CallContext.fail   3 1 0   67%
core / src / sensorkit / backend / request.py CallContext._call_event   4 1 0   75%
core / src / sensorkit / backend / request.py ExtendedCallHandler.__init__   3 0 0   100%
core / src / sensorkit / backend / request.py ExtendedCallHandler._run_handler   20 6 0   70%
core / src / sensorkit / backend / request.py ExtendedCallHandler._run_handler.call_handler_done   6 0 0   100%
core / src / sensorkit / backend / request.py CallHandlerResponseError.__init__   3 3 0   0%
core / src / sensorkit / backend / request.py Request.is_extended   1 0 0   100%
core / src / sensorkit / backend / request.py Request.create_handler   3 0 0   100%
core / src / sensorkit / backend / request.py Request.define   0 0 0   100%
core / src / sensorkit / backend / request.py Request.define   0 0 0   100%
core / src / sensorkit / backend / request.py Request.define   0 0 0   100%
core / src / sensorkit / backend / request.py Request.define   7 1 0   86%
core / src / sensorkit / backend / request.py (no function)   83 0 0   100%
core / src / sensorkit / cli / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / cli / __main__.py cli   2 2 0   0%
core / src / sensorkit / cli / __main__.py root   1 1 0   0%
core / src / sensorkit / cli / __main__.py (no function)   21 21 0   0%
core / src / sensorkit / cli / agent.py agent_group   1 1 0   0%
core / src / sensorkit / cli / agent.py include   3 3 0   0%
core / src / sensorkit / cli / agent.py exclude   3 3 0   0%
core / src / sensorkit / cli / agent.py global_control   4 4 0   0%
core / src / sensorkit / cli / agent.py controller_control   4 4 0   0%
core / src / sensorkit / cli / agent.py controller_override   5 5 0   0%
core / src / sensorkit / cli / agent.py scheduling   4 4 0   0%
core / src / sensorkit / cli / agent.py status   19 19 0   0%
core / src / sensorkit / cli / agent.py _print_controller_info   23 23 0   0%
core / src / sensorkit / cli / agent.py (no function)   42 42 0   0%
core / src / sensorkit / cli / config.py config_group   0 0 0   100%
core / src / sensorkit / cli / config.py config_error_message   15 15 0   0%
core / src / sensorkit / cli / config.py get_changed_ekv   17 17 0   0%
core / src / sensorkit / cli / config.py print_ekv   12 12 0   0%
core / src / sensorkit / cli / config.py config_load   23 23 0   0%
core / src / sensorkit / cli / config.py config_schema   13 13 0   0%
core / src / sensorkit / cli / config.py (no function)   28 28 0   0%
core / src / sensorkit / cli / controller.py controller_group   0 0 0   100%
core / src / sensorkit / cli / controller.py abort   1 1 0   0%
core / src / sensorkit / cli / controller.py startup   2 2 0   0%
core / src / sensorkit / cli / controller.py shutdown   2 2 0   0%
core / src / sensorkit / cli / controller.py collect   5 5 0   0%
core / src / sensorkit / cli / controller.py (no function)   28 28 0   0%
core / src / sensorkit / cli / device.py device_group   0 0 0   100%
core / src / sensorkit / cli / device.py connect_device   2 2 0   0%
core / src / sensorkit / cli / device.py disconnect_device   2 2 0   0%
core / src / sensorkit / cli / device.py stop_device   2 2 0   0%
core / src / sensorkit / cli / device.py (no function)   16 16 0   0%
core / src / sensorkit / cli / go.py ServiceDefinition.from_shorthand   3 3 0   0%
core / src / sensorkit / cli / go.py read_config_file   3 3 0   0%
core / src / sensorkit / cli / go.py _logger_formatter   2 2 0   0%
core / src / sensorkit / cli / go.py _logger_patcher   34 34 0   0%
core / src / sensorkit / cli / go.py go_command   38 38 0   0%
core / src / sensorkit / cli / go.py (no function)   26 26 0   0%
core / src / sensorkit / cli / kv.py kv_group   0 0 0   100%
core / src / sensorkit / cli / kv.py list_kv   14 14 0   0%
core / src / sensorkit / cli / kv.py get_kv   12 12 0   0%
core / src / sensorkit / cli / kv.py put_kv   4 4 0   0%
core / src / sensorkit / cli / kv.py delete_kv   10 10 0   0%
core / src / sensorkit / cli / kv.py load_kv_records   14 14 0   0%
core / src / sensorkit / cli / kv.py expand_files   6 6 0   0%
core / src / sensorkit / cli / kv.py load_kv_command   21 21 0   0%
core / src / sensorkit / cli / kv.py _read_configs   10 10 0   0%
core / src / sensorkit / cli / kv.py (no function)   45 45 0   0%
core / src / sensorkit / cli / service.py service_group   0 0 0   100%
core / src / sensorkit / cli / service.py service_run   52 52 0   0%
core / src / sensorkit / cli / service.py service_list   6 6 0   0%
core / src / sensorkit / cli / service.py (no function)   14 14 0   0%
core / src / sensorkit / cli / utils.py common_options   1 1 0   0%
core / src / sensorkit / cli / utils.py entity_option   1 1 0   0%
core / src / sensorkit / cli / utils.py report_errors   20 20 0   0%
core / src / sensorkit / cli / utils.py with_kit   3 3 0   0%
core / src / sensorkit / cli / utils.py with_kit.wrapper   4 4 0   0%
core / src / sensorkit / cli / utils.py (no function)   12 12 0   0%
core / src / sensorkit / common / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / common / aio.py scoped_waiter   1 0 0   100%
core / src / sensorkit / common / aio.py cleanup_future   0 0 1   100%
core / src / sensorkit / common / aio.py cleanup_future   0 0 1   100%
core / src / sensorkit / common / aio.py cleanup_future   4 1 0   75%
core / src / sensorkit / common / aio.py _scoped_waiter   9 0 0   100%
core / src / sensorkit / common / aio.py AsyncValueLatch.__init__   3 0 0   100%
core / src / sensorkit / common / aio.py AsyncValueLatch.update   5 0 0   100%
core / src / sensorkit / common / aio.py AsyncValueLatch.pending_change   1 0 0   100%
core / src / sensorkit / common / aio.py AsyncValueLatch.wait_until_pending   1 0 0   100%
core / src / sensorkit / common / aio.py AsyncValueLatch.apply   4 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.__init__   3 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.subscribe   7 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.unsubscribe   2 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.subscription   4 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.notify   10 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.value   3 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.subscriber_count   1 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.dropped   1 0 0   100%
core / src / sensorkit / common / aio.py AsyncObserver.consume   10 1 0   90%
core / src / sensorkit / common / aio.py AsyncLoop.__init__   5 0 0   100%
core / src / sensorkit / common / aio.py AsyncLoop.active   1 0 0   100%
core / src / sensorkit / common / aio.py AsyncLoop.start   3 0 0   100%
core / src / sensorkit / common / aio.py AsyncLoop.stop   7 0 0   100%
core / src / sensorkit / common / aio.py AsyncLoop._run   10 3 0   70%
core / src / sensorkit / common / aio.py (no function)   39 0 4   100%
core / src / sensorkit / common / condition.py resolve_field   8 0 0   100%
core / src / sensorkit / common / condition.py _coerce_to_threshold_type   14 5 0   64%
core / src / sensorkit / common / condition.py Condition.evaluate   0 0 1   100%
core / src / sensorkit / common / condition.py ChangesCondition.evaluate   2 0 0   100%
core / src / sensorkit / common / condition.py AboveCondition.evaluate   9 0 0   100%
core / src / sensorkit / common / condition.py BelowCondition.evaluate   9 0 0   100%
core / src / sensorkit / common / condition.py EqualsCondition.evaluate   2 0 0   100%
core / src / sensorkit / common / condition.py BecomesCondition.evaluate   4 0 0   100%
core / src / sensorkit / common / condition.py CrossesAboveCondition.evaluate   10 0 0   100%
core / src / sensorkit / common / condition.py CrossesBelowCondition.evaluate   10 0 0   100%
core / src / sensorkit / common / condition.py (no function)   49 0 2   100%
core / src / sensorkit / common / filewatch.py to_file_event   7 1 0   86%
core / src / sensorkit / common / filewatch.py Subscriber.__init__   4 0 0   100%
core / src / sensorkit / common / filewatch.py Subscriber.deliver   6 2 0   67%
core / src / sensorkit / common / filewatch.py Subscriber._put   6 4 0   33%
core / src / sensorkit / common / filewatch.py DispatchHandler.__init__   1 0 0   100%
core / src / sensorkit / common / filewatch.py DispatchHandler.on_any_event   7 0 0   100%
core / src / sensorkit / common / filewatch.py DirWatch.__init__   5 0 0   100%
core / src / sensorkit / common / filewatch.py WatchManager.__init__   5 0 0   100%
core / src / sensorkit / common / filewatch.py WatchManager.subscribe   12 0 0   100%
core / src / sensorkit / common / filewatch.py WatchManager.unsubscribe   13 2 0   85%
core / src / sensorkit / common / filewatch.py WatchManager._reap   8 2 0   75%
core / src / sensorkit / common / filewatch.py WatchManager._unschedule_locked   10 4 0   60%
core / src / sensorkit / common / filewatch.py WatchManager._ensure_observer_locked   6 0 0   100%
core / src / sensorkit / common / filewatch.py WatchManager._ensure_reaper_locked   3 0 0   100%
core / src / sensorkit / common / filewatch.py WatchManager._reset   6 0 0   100%
core / src / sensorkit / common / filewatch.py patch_windows_emitter_handle_close   6 6 0   0%
core / src / sensorkit / common / filewatch.py patch_windows_emitter_handle_close.on_thread_stop   4 4 0   0%
core / src / sensorkit / common / filewatch.py event_matches   5 1 0   80%
core / src / sensorkit / common / filewatch.py event_stream   7 0 0   100%
core / src / sensorkit / common / filewatch.py scan_existing   3 0 0   100%
core / src / sensorkit / common / filewatch.py watch_dir   18 0 1   100%
core / src / sensorkit / common / filewatch.py watch_dir.subscribe_and_scan   6 3 0   50%
core / src / sensorkit / common / filewatch.py watch_dir.drop_orphaned_subscription   2 1 0   50%
core / src / sensorkit / common / filewatch.py WaitFileHandler.__init__   3 0 0   100%
core / src / sensorkit / common / filewatch.py WaitFileHandler._signal   6 3 0   50%
core / src / sensorkit / common / filewatch.py WaitFileHandler.on_created   1 0 0   100%
core / src / sensorkit / common / filewatch.py WaitFileHandler.on_moved   1 1 0   0%
core / src / sensorkit / common / filewatch.py wait_for_file   13 0 0   100%
core / src / sensorkit / common / filewatch.py (no function)   64 1 0   98%
core / src / sensorkit / common / graph.py StateElection.__init__   3 0 0   100%
core / src / sensorkit / common / graph.py StateElection.vote   16 1 0   94%
core / src / sensorkit / common / graph.py StateElection._evaluate_subject   13 0 0   100%
core / src / sensorkit / common / graph.py StateElection.evaluate   4 0 0   100%
core / src / sensorkit / common / graph.py (no function)   14 0 0   100%
core / src / sensorkit / common / importutil.py get_caller_module   7 0 0   100%
core / src / sensorkit / common / importutil.py module_from_file   9 0 0   100%
core / src / sensorkit / common / importutil.py import_module_or_file   6 1 0   83%
core / src / sensorkit / common / importutil.py obj_from_spec   15 0 0   100%
core / src / sensorkit / common / importutil.py (no function)   9 0 0   100%
core / src / sensorkit / common / interval.py combine_interval_trees   37 1 0   97%
core / src / sensorkit / common / interval.py combine_interval_trees.tagged_tree   1 0 0   100%
core / src / sensorkit / common / interval.py intersect_interval_trees   25 1 0   96%
core / src / sensorkit / common / interval.py stack_interval_trees   9 1 0   89%
core / src / sensorkit / common / interval.py stamp_interval_trees   8 0 0   100%
core / src / sensorkit / common / interval.py print_interval_tree   41 41 0   0%
core / src / sensorkit / common / interval.py (no function)   12 0 0   100%
core / src / sensorkit / common / keyword.py declare_keyword   8 1 0   88%
core / src / sensorkit / common / keyword.py get_keyword_info   3 0 0   100%
core / src / sensorkit / common / keyword.py is_keyword   1 0 0   100%
core / src / sensorkit / common / keyword.py dump_keyword_json   1 0 0   100%
core / src / sensorkit / common / keyword.py validate_keyword   1 0 0   100%
core / src / sensorkit / common / keyword.py validate_keyword_json   1 0 0   100%
core / src / sensorkit / common / keyword.py validated_items   8 2 0   75%
core / src / sensorkit / common / keyword.py CompositeKeyword.composed_keywords   0 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.__init__   17 2 0   88%
core / src / sensorkit / common / keyword.py KeywordDict.set   2 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.set_keyword   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.set_value   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.update   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict._validate   5 1 0   80%
core / src / sensorkit / common / keyword.py KeywordDict.__get_pydantic_core_schema__   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.copy   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.__iter__   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.__len__   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.__eq__   7 7 0   0%
core / src / sensorkit / common / keyword.py KeywordDict.__repr__   1 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.get   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.get   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.get   4 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.pop   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.pop   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.pop   10 7 0   30%
core / src / sensorkit / common / keyword.py KeywordDict.__getitem__   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.__getitem__   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.__getitem__   3 0 0   100%
core / src / sensorkit / common / keyword.py KeywordDict.__delitem__   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.__delitem__   0 0 1   100%
core / src / sensorkit / common / keyword.py KeywordDict.__delitem__   3 3 0   0%
core / src / sensorkit / common / keyword.py (no function)   56 0 16   100%
core / src / sensorkit / common / logging.py _format_time   1 1 0   0%
core / src / sensorkit / common / logging.py configure_logging   8 8 0   0%
core / src / sensorkit / common / logging.py add_debug_logger   10 10 0   0%
core / src / sensorkit / common / logging.py NullLogger.__getattr__   1 0 0   100%
core / src / sensorkit / common / logging.py NullLogger.discard   1 0 0   100%
core / src / sensorkit / common / logging.py RateLimiter.__init__   1 0 0   100%
core / src / sensorkit / common / logging.py RateLimiter.allow   5 0 0   100%
core / src / sensorkit / common / logging.py _logger_limiter   1 0 0   100%
core / src / sensorkit / common / logging.py limited_logger   11 0 0   100%
core / src / sensorkit / common / logging.py (no function)   26 0 2   100%
core / src / sensorkit / common / model.py ModelRegistryBase.validate   0 0 1   100%
core / src / sensorkit / common / model.py ModelRegistryBase.__contains__   0 0 1   100%
core / src / sensorkit / common / model.py extract_field_default_value   11 2 0   82%
core / src / sensorkit / common / model.py ModelRegistry.__init__   7 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.add   17 5 0   71%
core / src / sensorkit / common / model.py ModelRegistry.entries   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.get_tags   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.get_namespaces   3 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.get_type   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.create_resolved_view   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry._default_view   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.discriminator   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.type_adapter   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.validate   4 0 0   100%
core / src / sensorkit / common / model.py ModelRegistry.__contains__   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistryView.__init__   5 0 0   100%
core / src / sensorkit / common / model.py ModelRegistryView._resolve   10 2 0   80%
core / src / sensorkit / common / model.py ModelRegistryView.update   8 0 0   100%
core / src / sensorkit / common / model.py ModelRegistryView.validate   25 4 0   84%
core / src / sensorkit / common / model.py ModelRegistryView.__contains__   1 0 0   100%
core / src / sensorkit / common / model.py ModelRegistryView.as_current   4 0 0   100%
core / src / sensorkit / common / model.py RegistryDiscriminator.__init__   1 0 0   100%
core / src / sensorkit / common / model.py RegistryDiscriminator._validate   10 1 0   90%
core / src / sensorkit / common / model.py RegistryDiscriminator._serialize   3 1 0   67%
core / src / sensorkit / common / model.py RegistryDiscriminator.__get_pydantic_core_schema__   1 0 0   100%
core / src / sensorkit / common / model.py RegistryBaseModel.model_registry   1 1 0   0%
core / src / sensorkit / common / model.py RegistryBaseModel.model_tag   1 0 0   100%
core / src / sensorkit / common / model.py RegistryBaseModel.__init_subclass__   13 0 0   100%
core / src / sensorkit / common / model.py RegistryBaseModel.model_post_init   8 1 0   88%
core / src / sensorkit / common / model.py RegistryBaseModel._find_registered_base   4 1 0   75%
core / src / sensorkit / common / model.py RegistryBaseModel.__get_pydantic_core_schema__   5 0 0   100%
core / src / sensorkit / common / model.py (no function)   73 0 5   100%
core / src / sensorkit / common / time.py _timezones   2 0 0   100%
core / src / sensorkit / common / time.py clear_timezone_cache   1 0 0   100%
core / src / sensorkit / common / time.py get_tzinfo   11 0 0   100%
core / src / sensorkit / common / time.py parse_time_of_day   11 0 0   100%
core / src / sensorkit / common / time.py parse_time_delta   4 0 0   100%
core / src / sensorkit / common / time.py parse_spec   17 2 0   88%
core / src / sensorkit / common / time.py parse_time_range   7 1 0   86%
core / src / sensorkit / common / time.py (no function)   21 0 0   100%
core / src / sensorkit / config / __init__.py (no function)   2 0 0   100%
core / src / sensorkit / config / core.py DataFlowConfig._validator   3 3 0   0%
core / src / sensorkit / config / core.py (no function)   16 0 0   100%
core / src / sensorkit / config / parser.py ServiceConfig._validator   5 5 0   0%
core / src / sensorkit / config / parser.py SensorKitBaseConfig._validate   3 1 0   67%
core / src / sensorkit / config / parser.py SensorKitBaseConfig.resolve_dynamic_sections   3 0 0   100%
core / src / sensorkit / config / parser.py SensorKitBaseConfig.configured_imports   1 1 0   0%
core / src / sensorkit / config / parser.py SensorKitConfig.backend   1 1 0   0%
core / src / sensorkit / config / parser.py SensorKitConfig.global_kv   1 1 0   0%
core / src / sensorkit / config / parser.py _validate_mapper_return_value   8 2 0   75%
core / src / sensorkit / config / parser.py _parse_section   14 6 0   57%
core / src / sensorkit / config / parser.py _parse_extra_sections   11 2 0   82%
core / src / sensorkit / config / parser.py parse_config   1 0 0   100%
core / src / sensorkit / config / parser.py (no function)   48 0 0   100%
core / src / sensorkit / config / schema.py _stitch_id_key   19 1 0   95%
core / src / sensorkit / config / schema.py _conditional_branches   1 0 0   100%
core / src / sensorkit / config / schema.py _expand_discriminators   10 0 0   100%
core / src / sensorkit / config / schema.py _closable   1 0 0   100%
core / src / sensorkit / config / schema.py _close_objects   9 0 0   100%
core / src / sensorkit / config / schema.py _referenced_defs   9 0 0   100%
core / src / sensorkit / config / schema.py _reachable_defs   9 0 0   100%
core / src / sensorkit / config / schema.py config_json_schema   13 0 0   100%
core / src / sensorkit / config / schema.py (no function)   21 0 0   100%
core / src / sensorkit / config / section.py _section_entries   1 0 0   100%
core / src / sensorkit / config / section.py _validate_id_naming   6 0 0   100%
core / src / sensorkit / config / section.py declare_config_section   19 0 0   100%
core / src / sensorkit / config / section.py get_config_section   1 0 0   100%
core / src / sensorkit / config / section.py config_sections   1 0 0   100%
core / src / sensorkit / config / section.py (no function)   25 0 0   100%
core / src / sensorkit / core / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / core / client.py SensorKit.__init__   5 0 0   100%
core / src / sensorkit / core / client.py SensorKit.register_service   4 1 0   75%
core / src / sensorkit / core / client.py SensorKit.list_services   9 0 0   100%
core / src / sensorkit / core / client.py SensorKit.list_entities   1 0 0   100%
core / src / sensorkit / core / client.py SensorKit.find_devices   10 10 0   0%
core / src / sensorkit / core / client.py SensorKit.entity   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.entity   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.entity   4 0 0   100%
core / src / sensorkit / core / client.py SensorKit.device   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.device   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.device   4 0 0   100%
core / src / sensorkit / core / client.py SensorKit.controller   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.controller   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.controller   4 0 0   100%
core / src / sensorkit / core / client.py SensorKit.program   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.program   0 0 1   100%
core / src / sensorkit / core / client.py SensorKit.program   4 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register   2 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.__init__   6 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register_impl   6 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.init_impl   6 0 0   100%
core / src / sensorkit / core / client.py ServiceContext._service_task   30 1 0   97%
core / src / sensorkit / core / client.py ServiceContext._run_detach   10 2 0   80%
core / src / sensorkit / core / client.py ServiceContext.shutdown   7 2 0   71%
core / src / sensorkit / core / client.py ServiceContext.join   3 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register_entity   1 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register_device   1 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register_controller   1 0 0   100%
core / src / sensorkit / core / client.py ServiceContext.register_program   1 0 0   100%
core / src / sensorkit / core / client.py (no function)   52 0 16   100%
core / src / sensorkit / core / controller.py TaskExecutionState._migrate_legacy_task   10 1 0   90%
core / src / sensorkit / core / controller.py TaskExecutionState._validate   7 3 0   57%
core / src / sensorkit / core / controller.py ControllerOperatingState.derive   3 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.enable   1 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.disable   1 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.execute_task   1 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.start_task   6 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.abort_task   1 0 0   100%
core / src / sensorkit / core / controller.py ControllerClient.wait_for_task   7 1 0   86%
core / src / sensorkit / core / controller.py ControllerRef._get_client   1 1 0   0%
core / src / sensorkit / core / controller.py ControllerDevice.__getitem__   1 0 0   100%
core / src / sensorkit / core / controller.py ControllerDevice.__len__   1 1 0   0%
core / src / sensorkit / core / controller.py ControllerDevice.__iter__   1 1 0   0%
core / src / sensorkit / core / controller.py ControllerInterface.on_enable   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.on_disable   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.use_device   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.get_device   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.all_devices   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.start_device_subscriptions   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.stop_device_subscriptions   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.update_context   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.task_handler   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.task_running   0 0 1   100%
core / src / sensorkit / core / controller.py ControllerInterface.set_internal_state   0 0 1   100%
core / src / sensorkit / core / controller.py (no function)   115 0 12   100%
core / src / sensorkit / core / delegate.py EntityDelegate.delegate_target   0 0 1   100%
core / src / sensorkit / core / delegate.py EntityDelegate.kv_put_model   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.kv_get_model   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.task_group   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.emit_event   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.publish   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.handle_request   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.data_graph   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.publish_entity_info   1 1 0   0%
core / src / sensorkit / core / delegate.py EntityDelegate.sensorkit   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.delegate_target   0 0 1   100%
core / src / sensorkit / core / delegate.py ControllerDelegate.on_enable   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.on_disable   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.use_device   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.get_device   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.all_devices   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.start_device_subscriptions   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.stop_device_subscriptions   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.update_context   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.task_handler   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.task_running   1 1 0   0%
core / src / sensorkit / core / delegate.py ControllerDelegate.set_internal_state   1 1 0   0%
core / src / sensorkit / core / delegate.py DeviceDelegate.delegate_target   0 0 1   100%
core / src / sensorkit / core / delegate.py DeviceDelegate.on_enable   1 1 0   0%
core / src / sensorkit / core / delegate.py DeviceDelegate.on_disable   1 1 0   0%
core / src / sensorkit / core / delegate.py DeviceDelegate.command_handler   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.delegate_target   0 0 1   100%
core / src / sensorkit / core / delegate.py ProgramDelegate.on_enable   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.on_disable   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.task_factory   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.get_offers   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.publish_offers   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.add_offer   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.remove_offer   1 1 0   0%
core / src / sensorkit / core / delegate.py ProgramDelegate.clear_offers   1 1 0   0%
core / src / sensorkit / core / delegate.py (no function)   89 0 13   100%
core / src / sensorkit / core / device.py DeviceCommand.model_registry   1 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.__init__   2 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.enable   1 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.disable   1 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.command   1 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.get_details   6 1 0   83%
core / src / sensorkit / core / device.py DeviceClient.has_trait   2 0 0   100%
core / src / sensorkit / core / device.py DeviceClient.get_traits   2 2 0   0%
core / src / sensorkit / core / device.py DeviceClient.get_archetype   2 2 0   0%
core / src / sensorkit / core / device.py DeviceRef._get_client   1 1 0   0%
core / src / sensorkit / core / device.py DeviceInterface.on_enable   0 0 1   100%
core / src / sensorkit / core / device.py DeviceInterface.on_disable   0 0 1   100%
core / src / sensorkit / core / device.py DeviceInterface.command_handler   0 0 1   100%
core / src / sensorkit / core / device.py (no function)   56 0 4   100%
core / src / sensorkit / core / entity.py DeviceDetails.archetype   1 0 0   100%
core / src / sensorkit / core / entity.py DeviceDetails.traits   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase.__init__   3 0 0   100%
core / src / sensorkit / core / entity.py EntityBase.sensorkit   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase._request   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase._stream   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase._kv   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase.kv_put_model   1 0 0   100%
core / src / sensorkit / core / entity.py EntityBase.kv_get_model   2 0 0   100%
core / src / sensorkit / core / entity.py EntityBase.kv_monitor_model   5 0 0   100%
core / src / sensorkit / core / entity.py EntityClient.__init__   3 0 0   100%
core / src / sensorkit / core / entity.py EntityClient._monitor_online_state   6 0 0   100%
core / src / sensorkit / core / entity.py EntityClient.observe_online_state   3 0 0   100%
core / src / sensorkit / core / entity.py EntityClient.get_event_mux   3 0 0   100%
core / src / sensorkit / core / entity.py EntityClient._monitor_receive   4 0 0   100%
core / src / sensorkit / core / entity.py EntityClient._await_event_consumer   5 3 0   40%
core / src / sensorkit / core / entity.py EntityClient.monitor_event   5 0 0   100%
core / src / sensorkit / core / entity.py EntityClient.monitor_all_events   5 5 0   0%
core / src / sensorkit / core / entity.py EntityClient.monitor   7 1 0   86%
core / src / sensorkit / core / entity.py EntityClient.monitor.receive_data   8 2 0   75%
core / src / sensorkit / core / entity.py EntityClient.monitor_all   3 0 0   100%
core / src / sensorkit / core / entity.py EntityClient.monitor_all.receive_data   10 4 0   60%
core / src / sensorkit / core / entity.py EntityClient.request   2 2 0   0%
core / src / sensorkit / core / entity.py EntityClient.call   5 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__init__   2 0 0   100%
core / src / sensorkit / core / entity.py EntityRef._get_client   1 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.resolve   2 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.get   3 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.require   4 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__call__   1 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__eq__   1 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__hash__   1 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__repr__   1 1 0   0%
core / src / sensorkit / core / entity.py EntityRef.__get_pydantic_core_schema__   1 0 0   100%
core / src / sensorkit / core / entity.py EntityRef.__get_pydantic_json_schema__   3 0 0   100%
core / src / sensorkit / core / entity.py EntityInterface.sensorkit   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.task_group   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.kv_put_model   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.kv_get_model   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.emit_event   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.publish   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.handle_request   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.data_graph   0 0 1   100%
core / src / sensorkit / core / entity.py EntityInterface.publish_entity_info   0 0 1   100%
core / src / sensorkit / core / entity.py (no function)   96 0 10   100%
core / src / sensorkit / core / executor.py _invoke_factory   22 6 0   73%
core / src / sensorkit / core / executor.py _resume_factory   6 2 0   67%
core / src / sensorkit / core / executor.py TaskingLoop.__init__   7 0 0   100%
core / src / sensorkit / core / executor.py TaskingLoop.start   4 1 0   75%
core / src / sensorkit / core / executor.py TaskingLoop.stop   7 0 0   100%
core / src / sensorkit / core / executor.py TaskingLoop.stop_requested   1 0 0   100%
core / src / sensorkit / core / executor.py TaskingLoop._resolve_context   4 1 0   75%
core / src / sensorkit / core / executor.py TaskingLoop._resolve_expiry   6 2 0   67%
core / src / sensorkit / core / executor.py TaskingLoop._tasking_loop   9 0 0   100%
core / src / sensorkit / core / executor.py TaskingLoop._dispatch   27 6 0   78%
core / src / sensorkit / core / executor.py TaskingLoop._notify_task_change   2 0 0   100%
core / src / sensorkit / core / executor.py TaskingLoop._abort   9 3 0   67%
core / src / sensorkit / core / executor.py (no function)   28 0 0   100%
core / src / sensorkit / core / impl / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerDeviceMap.__init__   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerDeviceMap.get_or_add   4 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerDeviceMap.__getitem__   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerDeviceMap.__len__   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerDeviceMap.__iter__   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.__init__   6 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.task_running   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.on_enable   2 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.on_disable   2 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.init_impl   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.attach_impl   6 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.detach_impl   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.use_device   5 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.get_device   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.all_devices   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.start_device_subscriptions   2 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.stop_device_subscriptions   2 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.update_context   11 2 1   82%
core / src / sensorkit / core / impl / controller.py ControllerImpl._set_enable_state   6 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl._abort_request   17 5 0   71%
core / src / sensorkit / core / impl / controller.py ControllerImpl._execute_request   56 19 0   66%
core / src / sensorkit / core / impl / controller.py ControllerImpl._execute_task   17 4 0   76%
core / src / sensorkit / core / impl / controller.py ControllerImpl.task_handler   2 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.task_handler.decorator   4 1 0   75%
core / src / sensorkit / core / impl / controller.py ControllerImpl.entity_info   1 0 0   100%
core / src / sensorkit / core / impl / controller.py ControllerImpl.set_internal_state   1 1 0   0%
core / src / sensorkit / core / impl / controller.py (no function)   59 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.__init__   5 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.declare_published_keyword   1 1 0   0%
core / src / sensorkit / core / impl / device.py DeviceImpl.on_enable   2 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.on_disable   2 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.init_impl   1 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.attach_impl   4 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl._set_enable_state   6 1 0   83%
core / src / sensorkit / core / impl / device.py DeviceImpl._command_request   33 9 0   73%
core / src / sensorkit / core / impl / device.py DeviceImpl.command_handler   3 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.command_handler.decorator   2 0 0   100%
core / src / sensorkit / core / impl / device.py DeviceImpl.entity_info   1 0 0   100%
core / src / sensorkit / core / impl / device.py (no function)   28 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.for_service_context   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.__init__   5 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.init_impl   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.on_attach   2 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.attach   4 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.attach_impl   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.on_detach   2 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.detach   11 2 0   82%
core / src / sensorkit / core / impl / entity.py EntityImpl.detach_impl   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.enter_context   9 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.task_group   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.emit_event   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.publish   3 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.handle_request   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.data_graph   8 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.entity_info   1 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl.publish_entity_info   3 0 0   100%
core / src / sensorkit / core / impl / entity.py EntityImpl._call_with_context   19 2 0   89%
core / src / sensorkit / core / impl / entity.py EntityImpl._call_with_context.invoke   2 0 0   100%
core / src / sensorkit / core / impl / entity.py (no function)   45 0 2   100%
core / src / sensorkit / core / impl / program.py ProgramOffers.__init__   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramOffers.wait   1 1 0   0%
core / src / sensorkit / core / impl / program.py ProgramOffers.poll   4 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramOffers.get_offer_windows   5 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramOffers.add   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramOffers.remove   5 5 0   0%
core / src / sensorkit / core / impl / program.py ProgramOffers.clear   3 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.__init__   8 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.init_impl   10 3 0   70%
core / src / sensorkit / core / impl / program.py ProgramImpl.attach_impl   4 1 0   75%
core / src / sensorkit / core / impl / program.py ProgramImpl.on_enable   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.on_disable   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.task_factory   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl._start_loop   13 1 0   92%
core / src / sensorkit / core / impl / program.py ProgramImpl._start_loop._on_task_change   1 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl._start_loop._finalize_loop   9 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl._stop_loop   12 5 0   58%
core / src / sensorkit / core / impl / program.py ProgramImpl._set_enable_state   12 2 0   83%
core / src / sensorkit / core / impl / program.py ProgramImpl._set_active_state   28 10 0   64%
core / src / sensorkit / core / impl / program.py ProgramImpl._update_state   4 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.get_offers   1 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.publish_offers   2 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.add_offer   1 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.remove_offer   1 1 0   0%
core / src / sensorkit / core / impl / program.py ProgramImpl.clear_offers   1 0 0   100%
core / src / sensorkit / core / impl / program.py ProgramImpl.entity_info   1 0 0   100%
core / src / sensorkit / core / impl / program.py (no function)   54 0 0   100%
core / src / sensorkit / core / program.py ProgramTaskingState._migrate_legacy_executing_task   6 0 0   100%
core / src / sensorkit / core / program.py ProgramState._migrate_legacy_tasking_state   5 0 0   100%
core / src / sensorkit / core / program.py ProgramActiveStateRequest.active_state   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.enable   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.disable   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.start_tasking   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.stop_tasking   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.abort_tasking   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.wait_until_tasking_stops   7 3 0   57%
core / src / sensorkit / core / program.py ProgramClient.tasking_change_events   1 0 0   100%
core / src / sensorkit / core / program.py ProgramClient.monitor_enable_state   3 0 0   100%
core / src / sensorkit / core / program.py ProgramRef._get_client   1 1 0   0%
core / src / sensorkit / core / program.py ControllerOffers.__init__   4 0 0   100%
core / src / sensorkit / core / program.py ControllerOffers.start   4 0 0   100%
core / src / sensorkit / core / program.py ControllerOffers._discover_programs   13 2 0   85%
core / src / sensorkit / core / program.py ControllerOffers._monitor_program   12 1 0   92%
core / src / sensorkit / core / program.py ControllerOffers.get_offers   1 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.__init__   5 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.start   4 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.stop   8 1 0   88%
core / src / sensorkit / core / program.py ProgramDiscovery._discover_programs   25 4 0   84%
core / src / sensorkit / core / program.py ProgramDiscovery._monitor_task   15 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.enabled_programs   1 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.known_programs   1 0 0   100%
core / src / sensorkit / core / program.py ProgramDiscovery.controller_programs   1 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor.__init__   4 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor.start   1 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor.stop   2 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor.observe   1 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor._notify   3 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor._monitor_liveness   3 0 0   100%
core / src / sensorkit / core / program.py ProgramStateMonitor._monitor_state   14 3 0   79%
core / src / sensorkit / core / program.py ProgramInterface.on_enable   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.on_disable   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.task_factory   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.get_offers   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.publish_offers   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.add_offer   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.remove_offer   0 0 1   100%
core / src / sensorkit / core / program.py ProgramInterface.clear_offers   0 0 1   100%
core / src / sensorkit / core / program.py (no function)   110 0 9   100%
core / src / sensorkit / core / state.py EventSourcedState.model_post_init   3 0 0   100%
core / src / sensorkit / core / state.py EventSourcedState._set_event_fields   6 1 0   83%
core / src / sensorkit / core / state.py EventSourcedState._introspect_event_fields   8 0 0   100%
core / src / sensorkit / core / state.py EventSourcedState.update   11 0 0   100%
core / src / sensorkit / core / state.py EventSourcedState.event_stream   13 4 0   69%
core / src / sensorkit / core / state.py EventSourcedState.recover   7 0 0   100%
core / src / sensorkit / core / state.py EventSourcedState.recover_or_init   6 0 0   100%
core / src / sensorkit / core / state.py EventSourcedState._get_latest_event_if_newer   1 0 0   100%
core / src / sensorkit / core / state.py (no function)   27 0 0   100%
core / src / sensorkit / core / task.py Task.model_registry   1 0 0   100%
core / src / sensorkit / core / task.py Task.execution   3 1 0   67%
core / src / sensorkit / core / task.py Task.associate_execution   3 1 0   67%
core / src / sensorkit / core / task.py Task.__eq__   3 1 0   67%
core / src / sensorkit / core / task.py Task.target_state   1 0 0   100%
core / src / sensorkit / core / task.py Task.default_expiry   1 0 0   100%
core / src / sensorkit / core / task.py Task.submit   1 0 0   100%
core / src / sensorkit / core / task.py InitTask.target_state   2 0 0   100%
core / src / sensorkit / core / task.py StandbyTask.target_state   2 0 0   100%
core / src / sensorkit / core / task.py ShutdownTask.target_state   2 0 0   100%
core / src / sensorkit / core / task.py TaskInfo.get_fits_cards   3 3 0   0%
core / src / sensorkit / core / task.py TaskExecution.bind_result   3 1 0   67%
core / src / sensorkit / core / task.py TaskExecution._require_result   3 1 0   67%
core / src / sensorkit / core / task.py TaskExecution.__await__   1 0 0   100%
core / src / sensorkit / core / task.py TaskExecution.done   1 0 0   100%
core / src / sensorkit / core / task.py TaskExecution.result   1 1 0   0%
core / src / sensorkit / core / task.py _deep_merge   8 0 0   100%
core / src / sensorkit / core / task.py TaskContextOverlay._task_type_items   3 0 0   100%
core / src / sensorkit / core / task.py TaskContextOverlay.propagate   10 2 0   80%
core / src / sensorkit / core / task.py TaskContextOverlay.build   1 0 0   100%
core / src / sensorkit / core / task.py TaskContextMap.get   1 0 0   100%
core / src / sensorkit / core / task.py (no function)   79 0 2   100%
core / src / sensorkit / core / trait.py Trait.effective_command_ids   1 0 0   100%
core / src / sensorkit / core / trait.py Trait.effective_keyword_ids   1 0 0   100%
core / src / sensorkit / core / trait.py Trait.match   5 0 0   100%
core / src / sensorkit / core / trait.py Trait.__hash__   1 0 0   100%
core / src / sensorkit / core / trait.py Trait.__eq__   1 0 0   100%
core / src / sensorkit / core / trait.py Trait.__repr__   1 0 0   100%
core / src / sensorkit / core / trait.py Archetype.effective_command_ids   1 0 0   100%
core / src / sensorkit / core / trait.py Archetype.effective_keyword_ids   1 0 0   100%
core / src / sensorkit / core / trait.py Archetype.__repr__   1 0 0   100%
core / src / sensorkit / core / trait.py declare_trait   3 0 0   100%
core / src / sensorkit / core / trait.py declare_archetype   7 0 0   100%
core / src / sensorkit / core / trait.py get_registered_traits   1 0 0   100%
core / src / sensorkit / core / trait.py get_registered_archetypes   1 0 0   100%
core / src / sensorkit / core / trait.py match_traits   9 0 0   100%
core / src / sensorkit / core / trait.py match_archetype   4 0 0   100%
core / src / sensorkit / core / trait.py (no function)   31 0 3   100%
core / src / sensorkit / data / __init__.py (no function)   0 0 0   100%
core / src / sensorkit / data / context.py _raw_fstring_source   7 0 0   100%
core / src / sensorkit / data / context.py Context.__init__   3 0 0   100%
core / src / sensorkit / data / context.py Context.update   3 0 0   100%
core / src / sensorkit / data / context.py Context.set_keyword   3 0 0   100%
core / src / sensorkit / data / context.py Context._expand_all   1 0 0   100%
core / src / sensorkit / data / context.py Context._expand_values   3 0 0   100%
core / src / sensorkit / data / context.py Context._expand   7 0 0   100%
core / src / sensorkit / data / context.py Context.eval   6 0 0   100%
core / src / sensorkit / data / context.py Context.resolve   0 0 1   100%
core / src / sensorkit / data / context.py Context.resolve   0 0 1   100%
core / src / sensorkit / data / context.py Context.resolve   13 4 0   69%
core / src / sensorkit / data / context.py ContextSubscription.__init__   7 0 0   100%
core / src / sensorkit / data / context.py ContextSubscription.add   2 0 0   100%
core / src / sensorkit / data / context.py ContextSubscription._subscription_adder   5 0 0   100%
core / src / sensorkit / data / context.py ContextSubscription._consumer   3 0 0   100%
core / src / sensorkit / data / context.py ContextSubscription.start   6 1 0   83%
core / src / sensorkit / data / context.py ContextSubscription.stop   8 0 0   100%
core / src / sensorkit / data / context.py ContextSubscription.snapshot   4 0 0   100%
core / src / sensorkit / data / context.py (no function)   32 0 6   100%
core / src / sensorkit / data / filesys.py FileInfo.from_path   2 0 0   100%
core / src / sensorkit / data / filesys.py wait_until_stable   12 3 0   75%
core / src / sensorkit / data / filesys.py WatchDirectory.graph_source   14 2 0   86%
core / src / sensorkit / data / filesys.py WriteFile.process   28 4 0   86%
core / src / sensorkit / data / filesys.py ReadFile.process   16 0 0   100%
core / src / sensorkit / data / filesys.py get_file_reader   12 0 0   100%
core / src / sensorkit / data / filesys.py get_file_reader.feed_data   7 0 0   100%
core / src / sensorkit / data / filesys.py get_file_writer   1 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter.open   5 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter.__init__   6 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter.start   1 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter._write_task   25 6 0   76%
core / src / sensorkit / data / filesys.py FileAsyncWriter.write   4 1 0   75%
core / src / sensorkit / data / filesys.py FileAsyncWriter.drain   1 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter.close   2 0 0   100%
core / src / sensorkit / data / filesys.py FileAsyncWriter.is_closing   1 1 0   0%
core / src / sensorkit / data / filesys.py FileAsyncWriter.wait_closed   2 0 0   100%
core / src / sensorkit / data / filesys.py (no function)   59 0 0   100%
core / src / sensorkit / data / fits.py ArrayInfo.from_array   0 0 1   100%
core / src / sensorkit / data / fits.py ArrayInfo.from_array   0 0 1   100%
core / src / sensorkit / data / fits.py ArrayInfo.from_array   15 4 0   73%
core / src / sensorkit / data / fits.py ArrayInfo.bit_length   1 0 0   100%
core / src / sensorkit / data / fits.py ArrayInfo.ndarray_from_buffer   4 0 0   100%
core / src / sensorkit / data / fits.py ReshapeArray.process   6 1 0   83%
core / src / sensorkit / data / fits.py FITSHeader.from_astropy_header   7 1 0   86%
core / src / sensorkit / data / fits.py FITSHeader.write_to   2 0 0   100%
core / src / sensorkit / data / fits.py FITSHeader.resolve_from_context   3 0 0   100%
core / src / sensorkit / data / fits.py FITSCardProvider.get_fits_cards   0 0 1   100%
core / src / sensorkit / data / fits.py ImageInfo.width   1 0 0   100%
core / src / sensorkit / data / fits.py ImageInfo.height   1 0 0   100%
core / src / sensorkit / data / fits.py ImageInfo.get_fits_cards   12 2 0   83%
core / src / sensorkit / data / fits.py ImageInfo.composed_keywords   1 0 0   100%
core / src / sensorkit / data / fits.py resolve_fits_card   9 0 0   100%
core / src / sensorkit / data / fits.py BuildFITSHeader.process   7 0 0   100%
core / src / sensorkit / data / fits.py BuildFITSHeader._populate   14 0 0   100%
core / src / sensorkit / data / fits.py BuildFITSHeader._apply_includes   17 0 0   100%
core / src / sensorkit / data / fits.py ArrayToFITS.process   19 0 0   100%
core / src / sensorkit / data / fits.py CompressFITS.process   3 0 0   100%
core / src / sensorkit / data / fits.py CompressFITS._compress   13 0 0   100%
core / src / sensorkit / data / fits.py ContextFromFITS.process   9 0 0   100%
core / src / sensorkit / data / fits.py ApplyDark.process   6 0 0   100%
core / src / sensorkit / data / fits.py ApplyDark._load_dark_library   15 2 0   87%
core / src / sensorkit / data / fits.py ApplyDark._find_closest_dark   6 0 0   100%
core / src / sensorkit / data / fits.py ApplyDark._apply_dark   20 0 0   100%
core / src / sensorkit / data / fits.py (no function)   99 0 16   100%
core / src / sensorkit / data / focus.py FocusConvolutionResults.add_result   1 1 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars.process   12 12 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._extract_fits_image   3 3 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._analyze_focus   23 23 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._analyze_star   13 13 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._calculate_hfr   9 9 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._calculate_fwhm   18 18 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusStars._compute_focus_info   6 6 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusFFT.process   12 12 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusFFT._extract_fits_image   3 3 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusFFT._analyze_focus_fft   20 20 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusConvolution.process   16 16 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusConvolution._extract_fits_image   3 3 0   0%
core / src / sensorkit / data / focus.py AnalyzeFocusConvolution._analyze_focus_convolution   19 19 0   0%
core / src / sensorkit / data / focus.py FocusInfoToFITS.process   11 11 0   0%
core / src / sensorkit / data / focus.py FocusInfoToFITS._update_fits_headers   24 24 0   0%
core / src / sensorkit / data / focus.py (no function)   61 61 0   0%
core / src / sensorkit / data / graph.py DataFlow.__init__   5 0 0   100%
core / src / sensorkit / data / graph.py DataFlow.send   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.send   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.send   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.send   28 3 0   89%
core / src / sensorkit / data / graph.py DataFlow._send_ready   2 0 0   100%
core / src / sensorkit / data / graph.py DataFlow.receive   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.receive   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.receive   0 0 1   100%
core / src / sensorkit / data / graph.py DataFlow.receive   6 1 0   83%
core / src / sensorkit / data / graph.py DataOp.model_registry   1 0 0   100%
core / src / sensorkit / data / graph.py DataOp.process   0 0 1   100%
core / src / sensorkit / data / graph.py SourceOp.graph_source   0 0 1   100%
core / src / sensorkit / data / graph.py SourceOp.process   3 0 0   100%
core / src / sensorkit / data / graph.py SinkOp.graph_sink   0 0 1   100%
core / src / sensorkit / data / graph.py SinkOp.process   2 0 0   100%
core / src / sensorkit / data / graph.py _parse_simple   14 1 0   93%
core / src / sensorkit / data / graph.py _describe_simple_form   1 0 0   100%
core / src / sensorkit / data / graph.py DataGraph._validate   6 0 0   100%
core / src / sensorkit / data / graph.py DataGraph.__init__   7 0 0   100%
core / src / sensorkit / data / graph.py DataGraph.add   6 2 0   67%
core / src / sensorkit / data / graph.py DataGraph._index_node   6 0 0   100%
core / src / sensorkit / data / graph.py DataGraph.find_source   9 4 0   56%
core / src / sensorkit / data / graph.py DataGraph.app_source   2 0 0   100%
core / src / sensorkit / data / graph.py DataGraph.find_sink   9 4 0   56%
core / src / sensorkit / data / graph.py DataGraph.app_sink   2 0 0   100%
core / src / sensorkit / data / graph.py DataGraph._validate_component   17 2 0   88%
core / src / sensorkit / data / graph.py DataGraph.start   7 0 0   100%
core / src / sensorkit / data / graph.py DataGraph.stop   1 0 0   100%
core / src / sensorkit / data / graph.py DataGraphRunner.__init__   4 0 0   100%
core / src / sensorkit / data / graph.py DataGraphRunner.start   9 2 0   78%
core / src / sensorkit / data / graph.py DataGraphRunner.start._finalize_graph_run   8 4 0   50%
core / src / sensorkit / data / graph.py DataGraphRunner.stop   3 0 0   100%
core / src / sensorkit / data / graph.py DataGraphRunner._run_graph   24 6 0   75%
core / src / sensorkit / data / graph.py DataGraphRunner._run_tasks   13 0 0   100%
core / src / sensorkit / data / graph.py (no function)   63 0 35   100%
core / src / sensorkit / data / local.py AppSource.__init__   2 0 0   100%
core / src / sensorkit / data / local.py AppSource.produce   5 0 0   100%
core / src / sensorkit / data / local.py AppSource.graph_source   7 0 0   100%
core / src / sensorkit / data / local.py AppSink.__init__   2 0 0   100%
core / src / sensorkit / data / local.py AppSink.consume   4 0 0   100%
core / src / sensorkit / data / local.py AppSink.graph_sink   3 0 0   100%
core / src / sensorkit / data / local.py (no function)   18 0 0   100%
core / src / sensorkit / data / streams.py StreamReader.exception   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.at_eof   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.readline   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.readuntil   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.read   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.readexactly   0 0 1   100%
core / src / sensorkit / data / streams.py StreamReader.__aiter__   2 0 0   100%
core / src / sensorkit / data / streams.py StreamWriter.write   0 0 1   100%
core / src / sensorkit / data / streams.py StreamWriter.close   0 0 1   100%
core / src / sensorkit / data / streams.py StreamWriter.is_closing   0 0 1   100%
core / src / sensorkit / data / streams.py StreamWriter.wait_closed   0 0 1   100%
core / src / sensorkit / data / streams.py StreamWriter.drain   0 0 1   100%
core / src / sensorkit / data / streams.py BufferReader.__init__   3 0 0   100%
core / src / sensorkit / data / streams.py BufferReader.exception   1 1 0   0%
core / src / sensorkit / data / streams.py BufferReader.at_eof   1 0 0   100%
core / src / sensorkit / data / streams.py BufferReader.readline   1 0 0   100%
core / src / sensorkit / data / streams.py BufferReader.readuntil   12 5 0   58%
core / src / sensorkit / data / streams.py BufferReader.read   8 3 0   62%
core / src / sensorkit / data / streams.py BufferReader.readexactly   4 1 0   75%
core / src / sensorkit / data / streams.py BufferWriter.__init__   3 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.write   1 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.write_eof   1 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.close   1 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.is_closing   1 1 0   0%
core / src / sensorkit / data / streams.py BufferWriter.wait_closed   1 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.drain   1 0 0   100%
core / src / sensorkit / data / streams.py BufferWriter.get_future   1 0 0   100%
core / src / sensorkit / data / streams.py QueueReader.__init__   4 0 0   100%
core / src / sensorkit / data / streams.py QueueReader.exception   1 1 0   0%
core / src / sensorkit / data / streams.py QueueReader.at_eof   1 0 0   100%
core / src / sensorkit / data / streams.py QueueReader._get_next_chunk   12 4 0   67%
core / src / sensorkit / data / streams.py QueueReader.read   22 13 0   41%
core / src / sensorkit / data / streams.py QueueReader.readline   1 1 0   0%
core / src / sensorkit / data / streams.py QueueReader.readuntil   17 3 0   82%
core / src / sensorkit / data / streams.py QueueReader.readexactly   12 3 0   75%
core / src / sensorkit / data / streams.py QueueWriter.__init__   2 0 0   100%
core / src / sensorkit / data / streams.py QueueWriter.write   3 1 0   67%
core / src / sensorkit / data / streams.py QueueWriter.close   3 0 0   100%
core / src / sensorkit / data / streams.py QueueWriter.is_closing   1 0 0   100%
core / src / sensorkit / data / streams.py QueueWriter.wait_closed   2 0 0   100%
core / src / sensorkit / data / streams.py QueueWriter.drain   1 0 0   100%
core / src / sensorkit / data / streams.py create_connected_streams   2 0 0   100%
core / src / sensorkit / data / streams.py (no function)   44 0 5   100%
core / src / sensorkit / std / __init__.py (no function)   9 0 0   100%
core / src / sensorkit / std / collect.py Collect.track_mode   10 4 0   60%
core / src / sensorkit / std / collect.py Collect.get_fits_cards   3 3 0   0%
core / src / sensorkit / std / collect.py (no function)   33 0 0   100%
core / src / sensorkit / std / enclosure.py (no function)   19 0 0   100%
core / src / sensorkit / std / instrument.py CameraSensorSize.width   1 1 0   0%
core / src / sensorkit / std / instrument.py CameraSensorSize.height   1 1 0   0%
core / src / sensorkit / std / instrument.py ExposureInfo.get_fits_cards   18 18 0   0%
core / src / sensorkit / std / instrument.py (no function)   64 0 0   100%
core / src / sensorkit / std / mount.py (no function)   88 0 0   100%
core / src / sensorkit / std / optics.py (no function)   25 0 0   100%
core / src / sensorkit / std / safety.py SafetyConstraint.check_task   11 2 0   82%
core / src / sensorkit / std / safety.py (no function)   18 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.__init__   9 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.init_dome   14 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.deinit_dome   16 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.init_mount   4 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.deinit_mount   3 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.init_mirror_cover   4 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.deinit_mirror_cover   4 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.init_all   9 0 0   100%
core / src / sensorkit / std / sensor.py Sensor.stop_all   9 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.__init__   1 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.controller_init   4 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.sensor_init   8 4 0   50%
core / src / sensorkit / std / sensor.py SensorControl.sensor_standby   8 4 0   50%
core / src / sensorkit / std / sensor.py SensorControl.sensor_collect   35 9 0   74%
core / src / sensorkit / std / sensor.py SensorControl.sensor_recover   6 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.sensor_recover.assert_success_or_unsupported   4 1 0   75%
core / src / sensorkit / std / sensor.py SensorControl.sensor_shutdown   14 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.sensor_shutdown.attempt   5 0 0   100%
core / src / sensorkit / std / sensor.py SensorControl.sensor_shutdown.raise_failures   7 0 0   100%
core / src / sensorkit / std / sensor.py sensor_control_service   9 9 0   0%
core / src / sensorkit / std / sensor.py _add_compat_context   14 4 0   71%
core / src / sensorkit / std / sensor.py (no function)   95 0 0   100%
core / src / sensorkit / std / traits.py (no function)   34 0 0   100%
core / src / sensorkit / std / weather.py BasicWeather.to_astropy   2 0 0   100%
core / src / sensorkit / std / weather.py BasicWeather.get_fits_cards   16 0 0   100%
core / src / sensorkit / std / weather.py WeatherFieldEvaluator.__init__   4 0 0   100%
core / src / sensorkit / std / weather.py WeatherFieldEvaluator.eval_threshold   7 0 0   100%
core / src / sensorkit / std / weather.py WeatherConstraint._get_field_evaluators   6 0 0   100%
core / src / sensorkit / std / weather.py WeatherConstraint._field_evaluators   1 0 0   100%
core / src / sensorkit / std / weather.py WeatherConstraint.check_weather   8 0 0   100%
core / src / sensorkit / std / weather.py WeatherConstraint.check_task   12 2 0   83%
core / src / sensorkit / std / weather.py (no function)   45 0 2   100%
core / src / sensorkit / webapi / __init__.py WebAPIService.startup   7 7 0   0%
core / src / sensorkit / webapi / __init__.py WebAPIService.shutdown   2 2 0   0%
core / src / sensorkit / webapi / __init__.py webapi_service   2 2 0   0%
core / src / sensorkit / webapi / __init__.py (no function)   13 0 0   100%
core / src / sensorkit / webapi / fastapi.py DeviceListing._populate_from_details   4 0 0   100%
core / src / sensorkit / webapi / fastapi.py _status_ok   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py _error_handler   12 2 0   83%
core / src / sensorkit / webapi / fastapi.py _snapshot   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI.__init__   14 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI.forwarders   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._check_stream_capacity   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._stream_records   18 18 0   0%
core / src / sensorkit / webapi / fastapi.py WebAPI._product_listing   6 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._product_handler   4 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._product_data   5 2 0   60%
core / src / sensorkit / webapi / fastapi.py WebAPI._product_metadata   5 2 0   60%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_fastapi_app   12 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._finalize_openapi   6 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_global_endpoints   7 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_global_endpoints.firehose_subscription   3 3 0   0%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_global_endpoints.get_full_system_snapshot   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_global_endpoints.get_entity_snapshot   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_global_endpoints.get_entity_list   12 1 0   92%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_device_endpoints   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_device_endpoints.get_device_state   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_device_endpoints.run_device_command   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints   19 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.get_controller_state   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.run_controller_task   5 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.wait_for_current_task   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.wait_for_task   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.abort_controller_task   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.list_controller_products   1 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.subscribe_controller_products   5 5 0   0%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.subscribe_controller_products.is_controller_product   1 1 0   0%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.get_controller_product_data   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.get_controller_product_preview   7 3 0   57%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_controller_endpoints.get_controller_product_metadata   4 1 0   75%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints   11 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.get_program_state   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.enable_program   9 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.disable_program   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.activate_program   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.deactivate_program   3 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_program_endpoints.abort_program   3 3 0   0%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints   19 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.get_agent_state   2 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.enable_agent   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.enable_controller   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.disable_agent   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.disable_controller   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.override_controller   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.enable_scheduler   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.disable_scheduler   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.include_program   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._create_agent_endpoints.exclude_program   3 1 0   67%
core / src / sensorkit / webapi / fastapi.py WebAPI._start_forwarders   11 0 0   100%
core / src / sensorkit / webapi / fastapi.py WebAPI._warn_if_exposed   5 3 0   40%
core / src / sensorkit / webapi / fastapi.py WebAPI.serve   12 3 0   75%
core / src / sensorkit / webapi / fastapi.py WebAPI.shutdown   13 2 0   85%
core / src / sensorkit / webapi / fastapi.py (no function)   77 0 0   100%
core / src / sensorkit / webapi / forwarder.py SKRecord.serialize   1 0 0   100%
core / src / sensorkit / webapi / forwarder.py Forwarder.__init__   3 0 0   100%
core / src / sensorkit / webapi / forwarder.py Forwarder.start   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py Forwarder.stop   5 0 0   100%
core / src / sensorkit / webapi / forwarder.py Forwarder._run   16 1 0   94%
core / src / sensorkit / webapi / forwarder.py Forwarder._monitor   0 0 0   100%
core / src / sensorkit / webapi / forwarder.py Forwarder.snapshot   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py KeyValueForwarder.__init__   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py KeyValueForwarder._monitor   8 2 0   75%
core / src / sensorkit / webapi / forwarder.py StreamForwarder.__init__   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py StreamForwarder._monitor   7 2 0   71%
core / src / sensorkit / webapi / forwarder.py ProductForwarder.__init__   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py ProductForwarder._monitor   2 0 0   100%
core / src / sensorkit / webapi / forwarder.py (no function)   39 0 0   100%
core / src / sensorkit / webapi / preview.py _discard_if_unsuccessful   2 0 0   100%
core / src / sensorkit / webapi / preview.py PreviewJPEG.__init__   2 0 0   100%
core / src / sensorkit / webapi / preview.py PreviewJPEG.from_fits   11 1 0   91%
core / src / sensorkit / webapi / preview.py PreviewJPEG._encode   22 3 0   86%
core / src / sensorkit / webapi / preview.py (no function)   13 0 0   100%
core / src / sensorkit / webapi / schema.py _sensorkit_models   1 0 0   100%
core / src / sensorkit / webapi / schema.py _update_refs   9 0 0   100%
core / src / sensorkit / webapi / schema.py _add_model_schema   12 0 0   100%
core / src / sensorkit / webapi / schema.py add_sensorkit_schema   3 0 0   100%
core / src / sensorkit / webapi / schema.py (no function)   9 0 0   100%
core / src / sensorkit / webapi / security.py TLSConfig._check_verify_source   3 0 0   100%
core / src / sensorkit / webapi / security.py TLSConfig.uvicorn_options   9 1 0   89%
core / src / sensorkit / webapi / security.py TLSConfig.apply_minimum_version   1 0 0   100%
core / src / sensorkit / webapi / security.py Authenticator.enabled   0 0 0   100%
core / src / sensorkit / webapi / security.py Authenticator.authorize   0 0 0   100%
core / src / sensorkit / webapi / security.py Authenticator.openapi_scheme   1 0 0   100%
core / src / sensorkit / webapi / security.py OpenAccess.enabled   1 1 0   0%
core / src / sensorkit / webapi / security.py OpenAccess.authorize   1 0 0   100%
core / src / sensorkit / webapi / security.py BearerToken.__init__   2 0 0   100%
core / src / sensorkit / webapi / security.py BearerToken.enabled   1 1 0   0%
core / src / sensorkit / webapi / security.py BearerToken.authorize   5 0 0   100%
core / src / sensorkit / webapi / security.py BearerToken.openapi_scheme   1 0 0   100%
core / src / sensorkit / webapi / security.py NoAuthConfig.create_authenticator   1 0 0   100%
core / src / sensorkit / webapi / security.py TokenAuthConfig._check_one_source   3 0 0   100%
core / src / sensorkit / webapi / security.py TokenAuthConfig.create_authenticator   14 1 0   93%
core / src / sensorkit / webapi / security.py CORSConfig._check_credentialed_wildcard   3 0 0   100%
core / src / sensorkit / webapi / security.py CORSConfig.middleware_options   1 0 0   100%
core / src / sensorkit / webapi / security.py AuthMiddleware.__init__   2 0 0   100%
core / src / sensorkit / webapi / security.py AuthMiddleware.__call__   9 0 0   100%
core / src / sensorkit / webapi / security.py SecurityHeadersMiddleware.__init__   2 0 0   100%
core / src / sensorkit / webapi / security.py SecurityHeadersMiddleware.__call__   8 0 0   100%
core / src / sensorkit / webapi / security.py SecurityHeadersMiddleware.__call__.send_with_headers   3 0 0   100%
core / src / sensorkit / webapi / security.py (no function)   77 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.get_listing   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.watch_listing   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.has_product   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.get_metadata   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.get_data   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.start_monitor   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeHandler.stop_monitor   0 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSConfig.create_handler   1 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.__init__   5 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.get_listing   2 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.watch_listing   5 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.has_product   1 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.get_metadata   1 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.get_data   3 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.start_monitor   1 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler.stop_monitor   5 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler._monitor   9 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler._read_whole_frame   11 0 0   100%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler._read_whole_frame.read_file   8 2 0   75%
core / src / sensorkit / webapi / serve.py ServeLocalFITSHandler._found_file   23 6 0   74%
core / src / sensorkit / webapi / serve.py (no function)   69 0 0   100%
Total     10531 2040 290   81%

No items found using the specified filter.