SCARA Robotics Domain-Specific Language (DSL) Toolchain & Binary Protocol CodecΒΆ
scaralang is a standalone, lightweight, GUI-independent Python toolchain and compiler for the SCARA Robotics Domain-Specific Language (DSL), combined with the official SCARA Wire Binary Protocol Codec.
Developed in python code.
The README is used to introduce the tool and provide instructions on how to install the tool, any machine dependencies it may have and any other information that should be provided before the tool is installed.
Contents
π InstallationΒΆ
Navigate to release page download and extract release archive.
To install scaralang type the following
tar xvzf scaralang-x.y.z.tar.gz
cd scaralang-x.y.z/
# python3
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
python3 -m pip install --upgrade setuptools
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
pip3 install -r requirements.txt
python3 -m build --no-isolation --wheel
pip3 install ./dist/scaralang-*-py3-none-any.whl
rm -f get-pip.py
You can use Docker to create image/container, or You can use pip to install
# python3
pip3 install scaralang
π¦ DependenciesΒΆ
scaralang requires next modules and libraries
π Tool structureΒΆ
scaralang is based on OOP and Clean Architecture.
Tool structure
scaralang/
βββ core/
βΒ Β βββ __init__.py
βΒ Β βββ model/
βΒ Β βΒ Β βββ dsl/
βΒ Β βΒ Β βΒ Β βββ ast/
βΒ Β βΒ Β βΒ Β βΒ Β βββ command_type.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ instruction.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ instruction_param.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ jog_axis.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_state.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ program.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ speed_mode.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_orient_mode.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_position.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ zone_mode.py
βΒ Β βΒ Β βΒ Β βββ binary/
βΒ Β βΒ Β βΒ Β βΒ Β βββ binary_program_telemetry.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ disassembled_frame.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ disassembly_summary.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ parsed_command_token.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ program.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ step.py
βΒ Β βΒ Β βΒ Β βββ compiler/
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_geometry.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ control_waypoint_descriptor.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ scara_compiler_context.py
βΒ Β βΒ Β βΒ Β βββ diagnostic/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ scara_diagnostic.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ scara_diagnostic_code.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ scara_diagnostic_severity.py
βΒ Β βΒ Β βΒ Β βββ exporter/
βΒ Β βΒ Β βΒ Β βΒ Β βββ export_format.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ linter/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ scara_lint_context.py
βΒ Β βΒ Β βΒ Β βββ macro/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pallet_definition.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ work_frame.py
βΒ Β βΒ Β βΒ Β βββ token/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ lexer_pattern_kind.py
βΒ Β βΒ Β βΒ Β βββ scara_token.py
βΒ Β βΒ Β βΒ Β βββ scara_token_type.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ kinematics/
βΒ Β βΒ Β βΒ Β βββ elbow_config.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ point_2d.py
βΒ Β βΒ Β βΒ Β βββ point_3d.py
βΒ Β βΒ Β βΒ Β βββ scara_bounds.py
βΒ Β βΒ Β βΒ Β βββ transmission_parameters.py
βΒ Β βΒ Β βββ motor/
βΒ Β βΒ Β βΒ Β βββ axis_mask.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ motor_config.py
βΒ Β βΒ Β βΒ Β βββ motor_drive_mode.py
βΒ Β βΒ Β βΒ Β βββ motor_interface_type.py
βΒ Β βΒ Β βββ protocol/
βΒ Β βΒ Β βΒ Β βββ binary_delimiter.py
βΒ Β βΒ Β βΒ Β βββ binary_frame.py
βΒ Β βΒ Β βΒ Β βββ error_code.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ joint_steps.py
βΒ Β βΒ Β βΒ Β βββ message_id.py
βΒ Β βΒ Β βΒ Β βββ motor_wire_mode.py
βΒ Β βΒ Β βΒ Β βββ tool_id.py
βΒ Β βΒ Β βββ repl/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ repl_dispatch_result.py
βΒ Β βΒ Β βΒ Β βββ repl_session_context.py
βΒ Β βΒ Β βββ trajectory/
βΒ Β βΒ Β βββ arc_point.py
βΒ Β βΒ Β βββ axis_peak_metric.py
βΒ Β βΒ Β βββ bottleneck_incident.py
βΒ Β βΒ Β βββ circle_geometry.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ trajectory_cycle_report.py
βΒ Β βΒ Β βββ validation_result.py
βΒ Β βΒ Β βββ waypoint.py
βΒ Β βββ service/
βΒ Β βββ compiler/
βΒ Β βΒ Β βββ binary/
βΒ Β βΒ Β βΒ Β βββ binary_compiler.py
βΒ Β βΒ Β βΒ Β βββ binary_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ command/
βΒ Β βΒ Β βΒ Β βΒ Β βββ command_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ icommand_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motor/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ imotor_frame_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ motor_frame_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ motor_frame_builder_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tokens/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ command_token_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ command_token_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ icommand_token_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ itool_frame_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_frame_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_frame_builder_factory.py
βΒ Β βΒ Β βΒ Β βββ ibinary_compiler.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ metrics/
βΒ Β βΒ Β βΒ Β βΒ Β βββ binary_metrics_calculator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ binary_metrics_calculator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ ibinary_metrics_calculator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ motion/
βΒ Β βΒ Β βΒ Β βΒ Β βββ imotion_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ step/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ istep_discretizer.py
βΒ Β βΒ Β βΒ Β βββ iwaypoint_step_dispatcher.py
βΒ Β βΒ Β βΒ Β βββ step_discretizer.py
βΒ Β βΒ Β βΒ Β βββ step_discretizer_factory.py
βΒ Β βΒ Β βΒ Β βββ waypoint_step_dispatcher.py
βΒ Β βΒ Β βΒ Β βββ waypoint_step_dispatcher_factory.py
βΒ Β βΒ Β βββ frame/
βΒ Β βΒ Β βΒ Β βββ frame_transformer.py
βΒ Β βΒ Β βΒ Β βββ frame_transformer_factory.py
βΒ Β βΒ Β βΒ Β βββ iframe_transformer.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ iinstruction_pipeline.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ instruction_pipeline.py
βΒ Β βΒ Β βββ instruction_pipeline_factory.py
βΒ Β βΒ Β βββ iprimitive_instruction_processor.py
βΒ Β βΒ Β βββ iscara_compiler.py
βΒ Β βΒ Β βββ macro/
βΒ Β βΒ Β βΒ Β βββ frame_macro_expander.py
βΒ Β βΒ Β βΒ Β βββ frame_macro_expander_factory.py
βΒ Β βΒ Β βΒ Β βββ imacro_expander.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ itangent_macro_expander.py
βΒ Β βΒ Β βΒ Β βββ jump_macro_expander.py
βΒ Β βΒ Β βΒ Β βββ jump_macro_expander_factory.py
βΒ Β βΒ Β βΒ Β βββ pallet_macro_expander.py
βΒ Β βΒ Β βΒ Β βββ pallet_macro_expander_factory.py
βΒ Β βΒ Β βΒ Β βββ tangent_macro_expander.py
βΒ Β βΒ Β βΒ Β βββ tangent_macro_expander_factory.py
βΒ Β βΒ Β βββ motion/
βΒ Β βΒ Β βΒ Β βββ arc/
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_move_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_move_compiler_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ builder/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_waypoint_builder_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ iarc_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ calculator/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_point_calculator.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_point_calculator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ iarc_point_calculator.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ interpolation/
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_interpolator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_interpolator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ iarc_interpolator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ cartesian/
βΒ Β βΒ Β βΒ Β βΒ Β βββ cartesian_move_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ cartesian_move_compiler_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ imotion_sub_compiler.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ motion_command_compiler.py
βΒ Β βΒ Β βΒ Β βββ motion_command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ vertical/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ vertical_move_compiler.py
βΒ Β βΒ Β βΒ Β βββ vertical_move_compiler_factory.py
βΒ Β βΒ Β βββ primitive/
βΒ Β βΒ Β βΒ Β βββ control/
βΒ Β βΒ Β βΒ Β βΒ Β βββ control_command_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ control_command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ control_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ control_waypoint_builder_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ icontrol_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iprimitive_compiler.py
βΒ Β βΒ Β βΒ Β βββ state/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_command_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ tool/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ itool_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βββ tool_command_compiler.py
βΒ Β βΒ Β βΒ Β βββ tool_command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ tool_waypoint_builder.py
βΒ Β βΒ Β βΒ Β βββ tool_waypoint_builder_factory.py
βΒ Β βΒ Β βββ primitive_instruction_processor.py
βΒ Β βΒ Β βββ primitive_instruction_processor_factory.py
βΒ Β βΒ Β βββ scara_compiler.py
βΒ Β βΒ Β βββ scara_compiler_factory.py
βΒ Β βββ disassembler/
βΒ Β βΒ Β βββ frame_detail_decoder.py
βΒ Β βΒ Β βββ frame_detail_decoder_factory.py
βΒ Β βΒ Β βββ iframe_detail_decoder.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ iscara_disassembler.py
βΒ Β βΒ Β βββ scara_disassembler.py
βΒ Β βΒ Β βββ scara_disassembler_factory.py
βΒ Β βββ dsl/
βΒ Β βΒ Β βββ binary/
βΒ Β βΒ Β βΒ Β βββ binary_service.py
βΒ Β βΒ Β βΒ Β βββ binary_service_factory.py
βΒ Β βΒ Β βΒ Β βββ ibinary_service.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ compilation/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iscara_dsl_compiler.py
βΒ Β βΒ Β βΒ Β βββ scara_dsl_compiler.py
βΒ Β βΒ Β βΒ Β βββ scara_dsl_compiler_factory.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ iscara_dsl_binary_compiler.py
βΒ Β βΒ Β βββ iscara_dsl_disassembler.py
βΒ Β βΒ Β βββ iscara_dsl_info_provider.py
βΒ Β βΒ Β βββ iscara_dsl_linter.py
βΒ Β βΒ Β βββ iscara_dsl_service.py
βΒ Β βΒ Β βββ iscara_dsl_validator.py
βΒ Β βΒ Β βββ scara_dsl_bundle.py
βΒ Β βΒ Β βββ scara_dsl_pipeline_bundle.py
βΒ Β βΒ Β βββ scara_dsl_service.py
βΒ Β βΒ Β βββ scara_dsl_service_factory.py
βΒ Β βΒ Β βββ toolchain/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ itoolchain_info_provider.py
βΒ Β βΒ Β βΒ Β βββ toolchain_info_provider.py
βΒ Β βΒ Β βΒ Β βββ toolchain_info_provider_factory.py
βΒ Β βΒ Β βββ validation/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ scara_script_validator.py
βΒ Β βΒ Β βββ scara_script_validator_factory.py
βΒ Β βββ exporter/
βΒ Β βΒ Β βββ csv/
βΒ Β βΒ Β βΒ Β βββ csv_trajectory_exporter.py
βΒ Β βΒ Β βΒ Β βββ csv_trajectory_exporter_factory.py
βΒ Β βΒ Β βΒ Β βββ icsv_trajectory_exporter.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ export_dispatcher_bundle.py
βΒ Β βΒ Β βββ export_target_dispatcher.py
βΒ Β βΒ Β βββ export_target_dispatcher_factory.py
βΒ Β βΒ Β βββ gcode/
βΒ Β βΒ Β βΒ Β βββ gcode_exporter.py
βΒ Β βΒ Β βΒ Β βββ gcode_exporter_factory.py
βΒ Β βΒ Β βΒ Β βββ igcode_exporter.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ iexport_target_dispatcher.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ json/
βΒ Β βΒ Β βΒ Β βββ ijson_trajectory_exporter.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ json_trajectory_exporter.py
βΒ Β βΒ Β βΒ Β βββ json_trajectory_exporter_factory.py
βΒ Β βΒ Β βββ scara/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iscara_plan_exporter.py
βΒ Β βΒ Β βΒ Β βββ scara_plan_exporter.py
βΒ Β βΒ Β βΒ Β βββ scara_plan_exporter_factory.py
βΒ Β βΒ Β βΒ Β βββ scara_program_serializer.py
βΒ Β βΒ Β βΒ Β βββ scara_source_generator.py
βΒ Β βΒ Β βββ svg/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ isvg_trajectory_exporter.py
βΒ Β βΒ Β βββ svg_trajectory_exporter.py
βΒ Β βΒ Β βββ svg_trajectory_exporter_factory.py
βΒ Β βββ __init__.py
βΒ Β βββ kinematics/
βΒ Β βΒ Β βββ default_scara_profile.py
βΒ Β βΒ Β βββ ikinematics_service.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ kinematics_service.py
βΒ Β βΒ Β βββ kinematics_service_factory.py
βΒ Β βΒ Β βββ transmission/
βΒ Β βΒ Β βββ ijoint_step_transmission_converter.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ joint_step_transmission_converter.py
βΒ Β βΒ Β βββ joint_step_transmission_converter_factory.py
βΒ Β βββ linter/
βΒ Β βΒ Β βββ diagnostic/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iscara_diagnostic_formatter.py
βΒ Β βΒ Β βΒ Β βββ scara_diagnostic_formatter.py
βΒ Β βΒ Β βΒ Β βββ scara_diagnostic_formatter_factory.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ iscara_linter.py
βΒ Β βΒ Β βββ rules/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iscara_lint_rule.py
βΒ Β βΒ Β βΒ Β βββ motion/
βΒ Β βΒ Β βΒ Β βΒ Β βββ imotion_calibration_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ imotion_duplicate_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_calibration_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_calibration_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_duplicate_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_duplicate_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_lint_rule.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_lint_rule_factory.py
βΒ Β βΒ Β βΒ Β βββ pneumatic/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ ipneumatic_conflict_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ ipneumatic_flyby_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ ipneumatic_redundancy_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_conflict_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_conflict_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_flyby_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_flyby_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_lint_rule.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_lint_rule_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_redundancy_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pneumatic_redundancy_validator_factory.py
βΒ Β βΒ Β βΒ Β βββ state/
βΒ Β βΒ Β βΒ Β βΒ Β βββ imotor_mode_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ istate_homing_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ istate_zone_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motor_mode_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motor_mode_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_homing_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_homing_validator_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_lint_rule.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_lint_rule_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_zone_validator.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ state_zone_validator_factory.py
βΒ Β βΒ Β βΒ Β βββ timing/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ itiming_blend_zone_validator.py
βΒ Β βΒ Β βΒ Β βββ itiming_dwell_validator.py
βΒ Β βΒ Β βΒ Β βββ timing_blend_zone_validator.py
βΒ Β βΒ Β βΒ Β βββ timing_blend_zone_validator_factory.py
βΒ Β βΒ Β βΒ Β βββ timing_dwell_validator.py
βΒ Β βΒ Β βΒ Β βββ timing_dwell_validator_factory.py
βΒ Β βΒ Β βΒ Β βββ timing_lint_rule.py
βΒ Β βΒ Β βΒ Β βββ timing_lint_rule_factory.py
βΒ Β βΒ Β βββ scara_linter.py
βΒ Β βΒ Β βββ scara_linter_factory.py
βΒ Β βββ motor/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ motor_config_factory.py
βΒ Β βΒ Β βββ motor_drive_mode_resolver.py
βΒ Β βΒ Β βββ motor_interface_resolver.py
βΒ Β βΒ Β βββ motor_wire_mode_converter.py
βΒ Β βββ parser/
βΒ Β βΒ Β βββ commands/
βΒ Β βΒ Β βΒ Β βββ config/
βΒ Β βΒ Β βΒ Β βΒ Β βββ accel_config_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ config_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ elbow_config_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motor_config_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ override_config_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ speed_config_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_orient_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ zone_command_parser.py
βΒ Β βΒ Β βΒ Β βββ flow/
βΒ Β βΒ Β βΒ Β βΒ Β βββ disable_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ enable_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ estop_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ flow_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ hold_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ resume_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ sync_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ wait_command_parser.py
βΒ Β βΒ Β βΒ Β βββ frame/
βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_reset_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_set_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ icommand_parser.py
βΒ Β βΒ Β βΒ Β βββ icommand_parser_provider.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ macro/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ jump_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ macro_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pallet_def_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ pallet_move_command_parser.py
βΒ Β βΒ Β βΒ Β βββ motion/
βΒ Β βΒ Β βΒ Β βΒ Β βββ approach_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ arc_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ home_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ jog_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ joint_move_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ linear_move_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ motion_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ probe_command_parser.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ retract_command_parser.py
βΒ Β βΒ Β βΒ Β βββ parameter/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ parameter_extractor.py
βΒ Β βΒ Β βΒ Β βββ tool/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ pump_command_parser.py
βΒ Β βΒ Β βΒ Β βββ tool_command_parser.py
βΒ Β βΒ Β βΒ Β βββ tool_command_parser_factory.py
βΒ Β βΒ Β βΒ Β βββ valve_command_parser.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ instruction/
βΒ Β βΒ Β βΒ Β βββ iinstruction_line_parser.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ instruction_line_parser.py
βΒ Β βΒ Β βΒ Β βββ instruction_line_parser_factory.py
βΒ Β βΒ Β βββ iscara_parser.py
βΒ Β βΒ Β βββ lexer/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ iscara_lexer.py
βΒ Β βΒ Β βΒ Β βββ scara_lexer.py
βΒ Β βΒ Β βΒ Β βββ scara_lexer_factory.py
βΒ Β βΒ Β βββ scara_parser.py
βΒ Β βΒ Β βββ scara_parser_factory.py
βΒ Β βΒ Β βββ splitter/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ itoken_line_splitter.py
βΒ Β βΒ Β βββ token_line_splitter.py
βΒ Β βΒ Β βββ token_line_splitter_factory.py
βΒ Β βββ protocol/
βΒ Β βΒ Β βββ ibinary_frame_builder.py
βΒ Β βΒ Β βββ ibinary_frame_parser.py
βΒ Β βΒ Β βββ ibinary_payload_unpacker.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βββ trajectory/
βΒ Β βββ discretization/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ ishape_discretizer.py
βΒ Β βΒ Β βββ shape_discretizer.py
βΒ Β βΒ Β βββ shape_discretizer_factory.py
βΒ Β βββ __init__.py
βΒ Β βββ metrics/
βΒ Β βΒ Β βββ bottleneck/
βΒ Β βΒ Β βΒ Β βββ imotion_bottleneck_detector.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ motion_bottleneck_detector.py
βΒ Β βΒ Β βΒ Β βββ motion_bottleneck_detector_factory.py
βΒ Β βΒ Β βββ cycle/
βΒ Β βΒ Β βΒ Β βββ cycle_time_calculator.py
βΒ Β βΒ Β βΒ Β βββ cycle_time_calculator_factory.py
βΒ Β βΒ Β βΒ Β βββ icycle_time_calculator.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ profile/
βΒ Β βΒ Β βΒ Β βββ axis_speed_profile_analyzer.py
βΒ Β βΒ Β βΒ Β βββ axis_speed_profile_analyzer_factory.py
βΒ Β βΒ Β βΒ Β βββ iaxis_speed_profile_analyzer.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ summary/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ itrajectory_cycle_summary_builder.py
βΒ Β βΒ Β βΒ Β βββ trajectory_cycle_summary_builder.py
βΒ Β βΒ Β βΒ Β βββ trajectory_cycle_summary_builder_factory.py
βΒ Β βΒ Β βββ trajectory_metrics.py
βΒ Β βββ plan/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ itrajectory_mutable.py
βΒ Β βΒ Β βββ itrajectory_plan.py
βΒ Β βΒ Β βββ itrajectory_plan_factory.py
βΒ Β βΒ Β βββ itrajectory_read_only.py
βΒ Β βΒ Β βββ trajectory_plan.py
βΒ Β βΒ Β βββ trajectory_plan_factory.py
βΒ Β βββ validation/
βΒ Β βββ feedrate/
βΒ Β βΒ Β βββ feedrate_validator.py
βΒ Β βΒ Β βββ feedrate_validator_factory.py
βΒ Β βΒ Β βββ ifeedrate_validator.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βββ __init__.py
βΒ Β βββ itrajectory_validator.py
βΒ Β βββ plan/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ itrajectory_plan_validator.py
βΒ Β βΒ Β βββ trajectory_plan_validator.py
βΒ Β βΒ Β βββ trajectory_plan_validator_factory.py
βΒ Β βββ trajectory_validator.py
βΒ Β βββ trajectory_validator_factory.py
βΒ Β βββ waypoint/
βΒ Β βββ __init__.py
βΒ Β βββ iwaypoint_validator.py
βΒ Β βββ waypoint_validator.py
βΒ Β βββ waypoint_validator_factory.py
βββ engine.py
βββ infrastructure/
βΒ Β βββ cli/
βΒ Β βΒ Β βββ engine.py
βΒ Β βΒ Β βββ icli.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ repl/
βΒ Β βΒ Β βΒ Β βββ compiler/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ irepl_single_command_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_single_command_compiler.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_single_command_compiler_factory.py
βΒ Β βΒ Β βΒ Β βββ dispatch/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ irepl_command_dispatcher.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_command_dispatcher.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_command_dispatcher_factory.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ input/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ irepl_line_reader.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_line_reader.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_line_reader_factory.py
βΒ Β βΒ Β βΒ Β βββ presentation/
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ irepl_response_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_response_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ repl_response_presenter_factory.py
βΒ Β βΒ Β βΒ Β βββ transmission/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ irepl_frame_transmitter.py
βΒ Β βΒ Β βΒ Β βββ repl_frame_transmitter.py
βΒ Β βΒ Β βΒ Β βββ repl_frame_transmitter_factory.py
βΒ Β βΒ Β βββ setup/
βΒ Β βΒ Β βββ bundle.py
βΒ Β βΒ Β βββ dep_validator.py
βΒ Β βΒ Β βββ dependencies.py
βΒ Β βΒ Β βββ factory.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ keys.py
βΒ Β βΒ Β βββ opt_validator.py
βΒ Β βΒ Β βββ options.py
βΒ Β βΒ Β βββ registry.py
βΒ Β βΒ Β βββ validator.py
βΒ Β βββ command/
βΒ Β βΒ Β βββ command_bundle.py
βΒ Β βΒ Β βββ command_bundle_factory.py
βΒ Β βΒ Β βββ compile/
βΒ Β βΒ Β βΒ Β βββ compile_command_definition.py
βΒ Β βΒ Β βΒ Β βββ compile_command_executor.py
βΒ Β βΒ Β βΒ Β βββ compile_command_executor_factory.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ inspection/
βΒ Β βΒ Β βΒ Β βΒ Β βββ framing/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_header_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_header_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_trailer_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_trailer_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ hex_stream_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ hex_stream_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ iframe_header_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ iframe_trailer_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ ihex_stream_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ payload/
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ ijoint_steps_payload_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ ipayload_dispatcher_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ itool_command_payload_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ joint_steps_payload_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ joint_steps_payload_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ payload_dispatcher_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ payload_dispatcher_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_command_payload_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ tool_command_payload_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ presentation/
βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_step_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ frame_step_presenter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ iframe_step_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ iprogram_inspection_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ program_inspection_presenter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ program_inspection_presenter_factory.py
βΒ Β βΒ Β βΒ Β βββ telemetry/
βΒ Β βΒ Β βΒ Β βββ compile_telemetry_formatter.py
βΒ Β βΒ Β βΒ Β βββ compile_telemetry_formatter_factory.py
βΒ Β βΒ Β βΒ Β βββ icompile_telemetry_formatter.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ disassemble/
βΒ Β βΒ Β βΒ Β βββ disassemble_command_definition.py
βΒ Β βΒ Β βΒ Β βββ disassemble_command_executor.py
βΒ Β βΒ Β βΒ Β βββ disassemble_command_executor_factory.py
βΒ Β βΒ Β βΒ Β βββ format/
βΒ Β βΒ Β βΒ Β βΒ Β βββ disassemble_summary_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ disassemble_summary_formatter_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ idisassemble_summary_formatter.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ export/
βΒ Β βΒ Β βΒ Β βββ export_command_definition.py
βΒ Β βΒ Β βΒ Β βββ export_command_executor.py
βΒ Β βΒ Β βΒ Β βββ export_command_executor_factory.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ icommand_definition.py
βΒ Β βΒ Β βββ icommand_executor.py
βΒ Β βΒ Β βββ info/
βΒ Β βΒ Β βΒ Β βββ info_command_definition.py
βΒ Β βΒ Β βΒ Β βββ info_command_executor.py
βΒ Β βΒ Β βΒ Β βββ info_command_executor_factory.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ lint/
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ lint_command_definition.py
βΒ Β βΒ Β βΒ Β βββ lint_command_executor.py
βΒ Β βΒ Β βΒ Β βββ lint_command_executor_factory.py
βΒ Β βΒ Β βββ repl/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ repl_command_definition.py
βΒ Β βΒ Β βββ repl_command_executor.py
βΒ Β βΒ Β βββ repl_command_executor_factory.py
βΒ Β βββ communication/
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ protocol/
βΒ Β βΒ Β βββ binary/
βΒ Β βΒ Β βΒ Β βββ binary_struct_format.py
βΒ Β βΒ Β βΒ Β βββ builder/
βΒ Β βΒ Β βΒ Β βΒ Β βββ binary_frame_builder.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ binary_frame_builder_factory.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ checksum/
βΒ Β βΒ Β βΒ Β βΒ Β βββ crc16_ccitt.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ parser/
βΒ Β βΒ Β βΒ Β βββ binary_frame_assembler.py
βΒ Β βΒ Β βΒ Β βββ binary_frame_assembler_factory.py
βΒ Β βΒ Β βΒ Β βββ binary_frame_parser.py
βΒ Β βΒ Β βΒ Β βββ binary_frame_parser_factory.py
βΒ Β βΒ Β βΒ Β βββ binary_payload_unpacker.py
βΒ Β βΒ Β βΒ Β βββ binary_payload_unpacker_factory.py
βΒ Β βΒ Β βΒ Β βββ ibinary_frame_assembler.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ parser_state.py
βΒ Β βΒ Β βββ __init__.py
βΒ Β βββ config/
βΒ Β βΒ Β βββ scaralang.cfg
βΒ Β βΒ Β βββ scaralang.logo
βΒ Β βββ __init__.py
βββ __init__.py
βββ py.typed
βββ setup/
βββ bundle.py
βββ dep_validator.py
βββ dependencies.py
βββ factory.py
βββ __init__.py
βββ keys.py
βββ opt_validator.py
βββ options.py
βββ registry.py
βββ validator.py
117 directories, 545 files
π Architecture & SOLID PrinciplesΒΆ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLI / Inbound Adapters β
β (Compile, Disassemble, Lint, Info, Export, REPL) β
ββββββββββββββββ¬ββββββββββββββββββββββββββββββββ¬βββββββββββββββ
β Depends on Role Protocols β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β IScaraDslLinter ββ IScaraDslBinaryCompiler β
β (Validation & Diagnostics) ββ (Plan / Binary Generation) β
ββββββββββββββββ¬ββββββββββββββββββββββββββββββββ¬βββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Application Services β
β ββββββββββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β β ScaraLexer β β ScaraParser β βScaraCompilerβ β
β β (Token Stream) β β(Command Parsers)β β(Macro Expan)β β
β ββββββββββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β ββββββββββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β β BinaryCompiler β βScaraDisassemblerβ βExportDispatcβ β
β β (Step Generator) β β(Frame Breakdown)β β(Multi-targetβ β
β ββββββββββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β Operates on Pure Models
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Pure Domain Models β
β (ScaraProgram, BinaryProgram, Waypoint, DisassemblySum, β
β InstructionParam, ScaraCommandType, MessageId, Zone) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SOLID Principles ComplianceΒΆ
S β Single Responsibility Principle (SRP): Every module, class, and service has exactly one clearly bounded reason to change. Parser and compiler logic is decomposed into dedicated handlers (
MotionCommandParser,ConfigCommandParser,PalletMacroExpander,StepDiscretizer) rather than a monolithic interpreter. Strict limit of <= 15 methods per class across the entire codebase enforced by automated Quality Gate.O β Open/Closed Principle (OCP): The DSL parser, macro expanders, and exporters are open for extension without modifying existing code. Extensible Chain of Responsibility and dispatcher pattern allow registering new instruction handlers and export targets seamlessly.
L β Liskov Substitution Principle (LSP): Pure structural subtyping via Python
@runtime_checkable Protocoldefinitions. Concrete classes never inherit from abstract protocols, ensuring complete structural interchangeability.I β Interface Segregation Principle (ISP): Fat facade
IScaraDslServiceis segregated into focused role protocols (IScaraDslBinaryCompiler,IScaraDslDisassembler,IScaraDslLinter,IScaraDslInfoProvider,IScaraDslCompiler,IScaraPlanExporter). Clients depend strictly on the minimal methods they call.D β Dependency Inversion Principle (DIP): High-level domain services and CLI executors depend strictly on abstract protocols, never on concrete implementations. All infrastructure dependencies are injected via constructor Dependency Injection (Zero-Fallback DI).
Automated Quality Gates (run_quality_gates.sh)ΒΆ
Every build is validated against 4 strict automated quality gates:
Structural Protocols Gate (``interfaces_checker.py``): Verifies 100% compliance with
@runtime_checkable Protocolstructural typing across concrete implementations.Interface Segregation Gate (``isp_checker.py``): Enforces ISP compliance and verifies that no bloated or unused interfaces exist.
Module Limits Gate (``limits_checker.py``): Enforces file length, method count, and line length limits (<= 150 characters).
Single Responsibility Gate (``srp_checker.py``): Strictly enforces <= 15 methods per class and logical method line limits.
β¨ FeaturesΒΆ
High-Level SCARA DSL Toolchain: Lexer, Tokenizer, Line Splitter, AST Parser, Linter, and Semantic Validator for human-readable SCARA motion scripts (
.scara).Deterministic Bytecode Compiler: Direct translation of high-level Cartesian DSL trajectories into discrete stepper motor joint step blocks (
JointSteps,Step,BinaryProgram).SCARA Binary Wire Protocol Codec: High-performance streaming frame parser, payload unpacker, frame builder, and CRC-16-CCITT integrity verification (
0xAA 0x55header framing).Multi-Target Trajectory Exporter: Export robotic trajectories into industrial G-code, CSV time-series data, JSON trajectory bundles, and SVG vector toolpaths.
Interactive Motion REPL Console: Terminal-based interactive console (
scarac repl) for real-time single-command compilation, inspection, and frame transmission.Single Source of Truth (SSoT): Seamless domain and codec foundation shared between
scarajectory(Desktop Studio),scaraemu(Digital Twin Simulator), anddof2bot/scara(RP2040 firmware).Zero GUI Dependencies: 100% headless, clean architecture design with zero Tkinter, Qt, or graphics dependencies.
Strict Quality & SOLID Standards: 100% structural protocol conformance, 99% test coverage, and 10.00 / 10.00 Pylint score.
π SCARA Domain-Specific Language (DSL) & .scara ProgramsΒΆ
scaralang includes a dedicated, industrial-grade Domain-Specific Language designed specifically for SCARA robotic manipulators. Programs are written in plain text files with the .scara extension and compiled into validated Cartesian trajectories via a clean AST pipeline:
βββββββββββββββββββββββββββ
β .scara Source β
ββββββββββββββ¬βββββββββββββ
ScaraLexer β
βΌ
βββββββββββββββββββββββββββ
β Token Stream β
ββββββββββββββ¬βββββββββββββ
ScaraParser β
βΌ
βββββββββββββββββββββββββββ
β Abstract AST β
ββββββββββββββ¬βββββββββββββ
ScaraCompiler β (Macros + Kinematics)
βΌ
βββββββββββββββββββββββββββ
β TrajectoryPlan β
β(Waypoints & Discretize) β
ββββββββββββββ¬βββββββββββββ
BinaryCompiler β (Step Discretization)
βΌ
βββββββββββββββββββββββββββ
β BinaryProgram β
β(Wire Frames & Bytecode) β
βββββββββββββββββββββββββββ
SCARA DSL Instruction ReferenceΒΆ
For the exhaustive syntax specification, boundary constraints, and compiler rules, see LANGUAGE_REFERENCE.md.
Category |
Instruction & Syntax |
Parameters |
Description |
|---|---|---|---|
Motion |
|
|
Rapid non-interpolated Cartesian joint motion. |
|
|
Linear continuous path interpolated motion. |
|
|
|
Clockwise circular arc interpolation in XY plane. |
|
|
|
Counter-clockwise circular arc interpolation. |
|
|
|
Relative vertical descent along -Z axis. |
|
|
|
Relative vertical ascent along +Z axis. |
|
|
Axis name, step displacement |
Incremental single-axis manual jog move. |
|
|
Joint ID (1..4), angle (deg) |
Incremental individual joint rotational jog. |
|
|
|
Tactile surface contact search along -Z axis. |
|
Macros |
|
|
Smooth 3D parabolic pick-and-place arch motion. |
|
Matrix dimensions & grid spacing |
Defines structured 2D Cartesian pallet matrix. |
|
|
Pallet identifier, 1-based index |
Direct positioning to pallet matrix cell. |
|
Actuators |
|
|
Energizes or cuts end-effector vacuum pump. |
|
|
Opens or closes pneumatic release blow-off valve. |
|
|
|
Actuates tool head vertical pneumatic slide stage. |
|
|
Tracking mode |
Configures 4th-axis tool yaw orientation mode. |
|
Dynamics |
|
|
Configures travel or working linear feedrate. |
|
|
Configures linear path acceleration limit. |
|
|
|
Scales path execution velocity dynamically. |
|
|
Corner rounding tolerance (mm) |
Corner tolerance zone for trajectory smoothing. |
|
Kinematics |
|
|
Sets arm kinematic inverse solution branch. |
|
Drive control mode |
Selects open-loop microstepping or closed-loop FOC. |
|
|
Cartesian offset coordinates |
Defines user workpiece reference coordinate frame. |
|
|
None |
Resets coordinate system to base world origin. |
|
|
None |
Triggers complete multi-axis homing routine. |
|
Safety & Flow |
|
|
Dwells execution for specified hardware duration. |
|
None |
Trajectory execution barrier (drains buffer). |
|
|
None |
Trajectory feed hold; pauses running motion. |
|
|
None |
Resumes previously suspended trajectory. |
|
|
None |
Immediate emergency stop and motion abort. |
|
|
None |
Energizes motor driver stages (holding torque). |
|
|
None |
De-energizes motor driver stages (free movement). |
Example .scara Program: Industrial Pick & PlaceΒΆ
# ----------------------------------------------------
# Industrial Pick-and-Place Cycle with Pneumatic Grip
# ----------------------------------------------------
CONFIG ELBOW LEFT
SPEED RAPID 180.0
SPEED WORK 60.0
ACCEL 400.0
OVERRIDE 100
# Home robot to reference position
HOME
# Rapid move above pick feeder station
MOVE_J X 140.0 Y -30.0 Z 35.0
APPROACH DIST 30.0
# Engage suction cup and pause for vacuum seal
PUMP ON
WAIT 200
# Retract with part
RETRACT DIST 30.0
# Smooth 3D parabolic arch transfer to drop location
JUMP X 180.0 Y 30.0 Z 5.0 ARCH 40.0
# Release part with air pulse
PUMP OFF
VALVE ON
WAIT 100
VALVE OFF
# Retract to safe transit altitude
RETRACT DIST 30.0
HOME
π‘ SCARA Binary Wire Protocol & CodecΒΆ
All binary wire communication between scaralang, scarajectory, scaraemu, and physical robot firmware is governed by deterministic packet framing:
Frame Header & Wire FormatΒΆ
Each binary frame consists of a 4-byte header, variable payload, and 2-byte CRC-16-CCITT checksum:
ββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββ
β SOF1 (0xAA) β SOF2 (0x55) β Msg ID (1B) β Payload Len (1B)β Payload (NB) β ... CRC16 (2B)
ββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββ
Message Types & Payload StructureΒΆ
Message ID |
Enum Identifier |
Payload Structure |
Description |
|---|---|---|---|
|
|
|
Coordinated stepper motor joint step block. |
|
|
|
End-effector actuator trigger (vacuum, gripper, valve). |
|
|
Empty ( |
Immediate hardware emergency stop. |
|
|
Empty ( |
Pause execution / feed hold. |
|
|
Empty ( |
Resume paused trajectory execution. |
|
|
|
Real-time link health and operational state beacon. |
|
|
|
Clock synchronization and timestamp alignment. |
Hardware Execution & Motor Actuation TargetsΒΆ
Binary wire frames generated by scaralang stream directly over UART / USB-CDC to the physical ``scara_base`` firmware running on the Raspberry Pi Pico (RP2040), which coordinates motor actuation across two configurable drive modes:
Open-Loop Stepper Mode (TMC2209): Coordinated microstepping pulses generated by RP2040 PIO hardware state machines driving TMC2209 STEP/DIR stages for ultra-silent operation.
Closed-Loop Stepper Mode (MKS SERVO42D over CAN Bus): NEMA stepper motors equipped with MKS SERVO42D closed-loop modules communicating with the Raspberry Pi Pico over a high-speed differential CAN bus (CAN_H / CAN_L). This guarantees 100% elimination of lost steps, hardware PID closed-loop position correction, and real-time following-error telemetry.
π Code coverageΒΆ
Name |
Stmts |
Miss |
Cover |
|---|---|---|---|
scaralang/__init__.py |
9 |
0 |
100% |
scaralang/core/__init__.py |
9 |
0 |
100% |
scaralang/core/model/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/ast/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/ast/command_type.py |
47 |
0 |
100% |
scaralang/core/model/dsl/ast/instruction.py |
18 |
0 |
100% |
scaralang/core/model/dsl/ast/instruction_param.py |
57 |
0 |
100% |
scaralang/core/model/dsl/ast/jog_axis.py |
16 |
0 |
100% |
scaralang/core/model/dsl/ast/pneumatic_state.py |
14 |
0 |
100% |
scaralang/core/model/dsl/ast/program.py |
14 |
0 |
100% |
scaralang/core/model/dsl/ast/speed_mode.py |
14 |
0 |
100% |
scaralang/core/model/dsl/ast/tool_orient_mode.py |
15 |
0 |
100% |
scaralang/core/model/dsl/ast/tool_position.py |
14 |
0 |
100% |
scaralang/core/model/dsl/ast/zone_mode.py |
15 |
0 |
100% |
scaralang/core/model/dsl/binary/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/binary/binary_program_telemetry.py |
21 |
0 |
100% |
scaralang/core/model/dsl/binary/disassembled_frame.py |
17 |
0 |
100% |
scaralang/core/model/dsl/binary/disassembly_summary.py |
18 |
0 |
100% |
scaralang/core/model/dsl/binary/parsed_command_token.py |
16 |
0 |
100% |
scaralang/core/model/dsl/binary/program.py |
20 |
0 |
100% |
scaralang/core/model/dsl/binary/step.py |
19 |
0 |
100% |
scaralang/core/model/dsl/compiler/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/compiler/arc_geometry.py |
18 |
0 |
100% |
scaralang/core/model/dsl/compiler/control_waypoint_descriptor.py |
16 |
0 |
100% |
scaralang/core/model/dsl/compiler/scara_compiler_context.py |
35 |
0 |
100% |
scaralang/core/model/dsl/diagnostic/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/diagnostic/scara_diagnostic.py |
18 |
0 |
100% |
scaralang/core/model/dsl/diagnostic/scara_diagnostic_code.py |
23 |
0 |
100% |
scaralang/core/model/dsl/diagnostic/scara_diagnostic_severity.py |
15 |
0 |
100% |
scaralang/core/model/dsl/exporter/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/exporter/export_format.py |
17 |
0 |
100% |
scaralang/core/model/dsl/linter/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/linter/scara_lint_context.py |
22 |
0 |
100% |
scaralang/core/model/dsl/macro/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/macro/pallet_definition.py |
19 |
0 |
100% |
scaralang/core/model/dsl/macro/work_frame.py |
15 |
0 |
100% |
scaralang/core/model/dsl/token/__init__.py |
9 |
0 |
100% |
scaralang/core/model/dsl/token/lexer_pattern_kind.py |
22 |
0 |
100% |
scaralang/core/model/dsl/token/scara_token.py |
17 |
0 |
100% |
scaralang/core/model/dsl/token/scara_token_type.py |
23 |
0 |
100% |
scaralang/core/model/kinematics/__init__.py |
9 |
0 |
100% |
scaralang/core/model/kinematics/elbow_config.py |
14 |
0 |
100% |
scaralang/core/model/kinematics/point_2d.py |
14 |
0 |
100% |
scaralang/core/model/kinematics/point_3d.py |
15 |
0 |
100% |
scaralang/core/model/kinematics/scara_bounds.py |
29 |
0 |
100% |
scaralang/core/model/kinematics/transmission_parameters.py |
18 |
0 |
100% |
scaralang/core/model/motor/__init__.py |
9 |
0 |
100% |
scaralang/core/model/motor/axis_mask.py |
18 |
0 |
100% |
scaralang/core/model/motor/motor_config.py |
18 |
0 |
100% |
scaralang/core/model/motor/motor_drive_mode.py |
14 |
0 |
100% |
scaralang/core/model/motor/motor_interface_type.py |
15 |
0 |
100% |
scaralang/core/model/protocol/__init__.py |
9 |
0 |
100% |
scaralang/core/model/protocol/binary_delimiter.py |
15 |
0 |
100% |
scaralang/core/model/protocol/binary_frame.py |
17 |
0 |
100% |
scaralang/core/model/protocol/error_code.py |
21 |
0 |
100% |
scaralang/core/model/protocol/joint_steps.py |
18 |
0 |
100% |
scaralang/core/model/protocol/message_id.py |
41 |
0 |
100% |
scaralang/core/model/protocol/motor_wire_mode.py |
14 |
0 |
100% |
scaralang/core/model/protocol/tool_id.py |
13 |
0 |
100% |
scaralang/core/model/repl/__init__.py |
9 |
0 |
100% |
scaralang/core/model/repl/repl_dispatch_result.py |
15 |
0 |
100% |
scaralang/core/model/repl/repl_session_context.py |
23 |
0 |
100% |
scaralang/core/model/trajectory/__init__.py |
9 |
0 |
100% |
scaralang/core/model/trajectory/arc_point.py |
15 |
0 |
100% |
scaralang/core/model/trajectory/axis_peak_metric.py |
16 |
0 |
100% |
scaralang/core/model/trajectory/bottleneck_incident.py |
16 |
0 |
100% |
scaralang/core/model/trajectory/circle_geometry.py |
18 |
0 |
100% |
scaralang/core/model/trajectory/trajectory_cycle_report.py |
18 |
0 |
100% |
scaralang/core/model/trajectory/validation_result.py |
15 |
0 |
100% |
scaralang/core/model/trajectory/waypoint.py |
19 |
0 |
100% |
scaralang/core/service/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/binary_compiler.py |
28 |
0 |
100% |
scaralang/core/service/compiler/binary/binary_compiler_factory.py |
20 |
0 |
100% |
scaralang/core/service/compiler/binary/command/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/command/command_compiler.py |
56 |
0 |
100% |
scaralang/core/service/compiler/binary/command/command_compiler_factory.py |
31 |
0 |
100% |
scaralang/core/service/compiler/binary/command/icommand_compiler.py |
14 |
0 |
100% |
scaralang/core/service/compiler/binary/command/motor/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/command/motor/imotor_frame_builder.py |
14 |
0 |
100% |
scaralang/core/service/compiler/binary/command/motor/motor_frame_builder.py |
23 |
0 |
100% |
scaralang/core/service/compiler/binary/command/motor/motor_frame_builder_factory.py |
19 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tokens/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tokens/command_token_parser.py |
22 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tokens/command_token_parser_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tokens/icommand_token_parser.py |
16 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tool/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tool/itool_frame_builder.py |
15 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tool/tool_frame_builder.py |
21 |
0 |
100% |
scaralang/core/service/compiler/binary/command/tool/tool_frame_builder_factory.py |
19 |
0 |
100% |
scaralang/core/service/compiler/binary/ibinary_compiler.py |
15 |
0 |
100% |
scaralang/core/service/compiler/binary/metrics/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/metrics/binary_metrics_calculator.py |
26 |
0 |
100% |
scaralang/core/service/compiler/binary/metrics/binary_metrics_calculator_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/binary/metrics/ibinary_metrics_calculator.py |
17 |
0 |
100% |
scaralang/core/service/compiler/binary/motion/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/motion/imotion_compiler.py |
15 |
0 |
100% |
scaralang/core/service/compiler/binary/motion/motion_compiler.py |
28 |
0 |
100% |
scaralang/core/service/compiler/binary/motion/motion_compiler_factory.py |
20 |
0 |
100% |
scaralang/core/service/compiler/binary/step/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/binary/step/istep_discretizer.py |
16 |
0 |
100% |
scaralang/core/service/compiler/binary/step/iwaypoint_step_dispatcher.py |
16 |
0 |
100% |
scaralang/core/service/compiler/binary/step/step_discretizer.py |
42 |
2 |
95% |
scaralang/core/service/compiler/binary/step/step_discretizer_factory.py |
20 |
0 |
100% |
scaralang/core/service/compiler/binary/step/waypoint_step_dispatcher.py |
32 |
0 |
100% |
scaralang/core/service/compiler/binary/step/waypoint_step_dispatcher_factory.py |
20 |
0 |
100% |
scaralang/core/service/compiler/frame/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/frame/frame_transformer.py |
22 |
0 |
100% |
scaralang/core/service/compiler/frame/frame_transformer_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/frame/iframe_transformer.py |
15 |
0 |
100% |
scaralang/core/service/compiler/iinstruction_pipeline.py |
16 |
0 |
100% |
scaralang/core/service/compiler/instruction_pipeline.py |
36 |
0 |
100% |
scaralang/core/service/compiler/instruction_pipeline_factory.py |
27 |
1 |
96% |
scaralang/core/service/compiler/iprimitive_instruction_processor.py |
16 |
0 |
100% |
scaralang/core/service/compiler/iscara_compiler.py |
15 |
0 |
100% |
scaralang/core/service/compiler/macro/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/macro/frame_macro_expander.py |
29 |
0 |
100% |
scaralang/core/service/compiler/macro/frame_macro_expander_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/macro/imacro_expander.py |
16 |
0 |
100% |
scaralang/core/service/compiler/macro/itangent_macro_expander.py |
18 |
0 |
100% |
scaralang/core/service/compiler/macro/jump_macro_expander.py |
34 |
0 |
100% |
scaralang/core/service/compiler/macro/jump_macro_expander_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/macro/pallet_macro_expander.py |
43 |
0 |
100% |
scaralang/core/service/compiler/macro/pallet_macro_expander_factory.py |
23 |
0 |
100% |
scaralang/core/service/compiler/macro/tangent_macro_expander.py |
34 |
0 |
100% |
scaralang/core/service/compiler/macro/tangent_macro_expander_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/motion/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/arc_move_compiler.py |
40 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/arc_move_compiler_factory.py |
29 |
1 |
97% |
scaralang/core/service/compiler/motion/arc/builder/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/builder/arc_waypoint_builder.py |
21 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/builder/arc_waypoint_builder_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/builder/iarc_waypoint_builder.py |
17 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/calculator/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/calculator/arc_point_calculator.py |
35 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/calculator/arc_point_calculator_factory.py |
28 |
1 |
96% |
scaralang/core/service/compiler/motion/arc/calculator/iarc_point_calculator.py |
18 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/interpolation/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/interpolation/arc_interpolator.py |
40 |
1 |
98% |
scaralang/core/service/compiler/motion/arc/interpolation/arc_interpolator_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/motion/arc/interpolation/iarc_interpolator.py |
15 |
0 |
100% |
scaralang/core/service/compiler/motion/cartesian/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/cartesian/cartesian_move_compiler.py |
45 |
0 |
100% |
scaralang/core/service/compiler/motion/cartesian/cartesian_move_compiler_factory.py |
28 |
0 |
100% |
scaralang/core/service/compiler/motion/imotion_sub_compiler.py |
17 |
0 |
100% |
scaralang/core/service/compiler/motion/motion_command_compiler.py |
34 |
0 |
100% |
scaralang/core/service/compiler/motion/motion_command_compiler_factory.py |
26 |
0 |
100% |
scaralang/core/service/compiler/motion/vertical/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/motion/vertical/vertical_move_compiler.py |
33 |
0 |
100% |
scaralang/core/service/compiler/motion/vertical/vertical_move_compiler_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/primitive/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/control_command_compiler.py |
42 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/control_command_compiler_factory.py |
23 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/control_waypoint_builder.py |
16 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/control_waypoint_builder_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/primitive/control/icontrol_waypoint_builder.py |
16 |
0 |
100% |
scaralang/core/service/compiler/primitive/iprimitive_compiler.py |
17 |
0 |
100% |
scaralang/core/service/compiler/primitive/state/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/primitive/state/state_command_compiler.py |
47 |
0 |
100% |
scaralang/core/service/compiler/primitive/state/state_command_compiler_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/__init__.py |
9 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/itool_waypoint_builder.py |
17 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/tool_command_compiler.py |
34 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/tool_command_compiler_factory.py |
23 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/tool_waypoint_builder.py |
20 |
0 |
100% |
scaralang/core/service/compiler/primitive/tool/tool_waypoint_builder_factory.py |
18 |
0 |
100% |
scaralang/core/service/compiler/primitive_instruction_processor.py |
24 |
0 |
100% |
scaralang/core/service/compiler/primitive_instruction_processor_factory.py |
20 |
0 |
100% |
scaralang/core/service/compiler/scara_compiler.py |
32 |
0 |
100% |
scaralang/core/service/compiler/scara_compiler_factory.py |
43 |
0 |
100% |
scaralang/core/service/disassembler/__init__.py |
9 |
0 |
100% |
scaralang/core/service/disassembler/frame_detail_decoder.py |
63 |
0 |
100% |
scaralang/core/service/disassembler/frame_detail_decoder_factory.py |
18 |
0 |
100% |
scaralang/core/service/disassembler/iframe_detail_decoder.py |
15 |
0 |
100% |
scaralang/core/service/disassembler/iscara_disassembler.py |
18 |
0 |
100% |
scaralang/core/service/disassembler/scara_disassembler.py |
33 |
0 |
100% |
scaralang/core/service/disassembler/scara_disassembler_factory.py |
20 |
0 |
100% |
scaralang/core/service/dsl/__init__.py |
9 |
0 |
100% |
scaralang/core/service/dsl/binary/__init__.py |
9 |
0 |
100% |
scaralang/core/service/dsl/binary/binary_service.py |
31 |
0 |
100% |
scaralang/core/service/dsl/binary/binary_service_factory.py |
39 |
0 |
100% |
scaralang/core/service/dsl/binary/ibinary_service.py |
21 |
0 |
100% |
scaralang/core/service/dsl/compilation/__init__.py |
9 |
0 |
100% |
scaralang/core/service/dsl/compilation/iscara_dsl_compiler.py |
16 |
0 |
100% |
scaralang/core/service/dsl/compilation/scara_dsl_compiler.py |
34 |
0 |
100% |
scaralang/core/service/dsl/compilation/scara_dsl_compiler_factory.py |
21 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_binary_compiler.py |
19 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_disassembler.py |
16 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_info_provider.py |
13 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_linter.py |
14 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_service.py |
19 |
0 |
100% |
scaralang/core/service/dsl/iscara_dsl_validator.py |
16 |
0 |
100% |
scaralang/core/service/dsl/scara_dsl_bundle.py |
22 |
0 |
100% |
scaralang/core/service/dsl/scara_dsl_pipeline_bundle.py |
24 |
0 |
100% |
scaralang/core/service/dsl/scara_dsl_service.py |
67 |
1 |
99% |
scaralang/core/service/dsl/scara_dsl_service_factory.py |
50 |
0 |
100% |
scaralang/core/service/dsl/toolchain/__init__.py |
9 |
0 |
100% |
scaralang/core/service/dsl/toolchain/itoolchain_info_provider.py |
14 |
0 |
100% |
scaralang/core/service/dsl/toolchain/toolchain_info_provider.py |
19 |
0 |
100% |
scaralang/core/service/dsl/toolchain/toolchain_info_provider_factory.py |
18 |
0 |
100% |
scaralang/core/service/dsl/validation/__init__.py |
9 |
0 |
100% |
scaralang/core/service/dsl/validation/scara_script_validator.py |
46 |
0 |
100% |
scaralang/core/service/dsl/validation/scara_script_validator_factory.py |
21 |
0 |
100% |
scaralang/core/service/exporter/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/csv/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/csv/csv_trajectory_exporter.py |
19 |
0 |
100% |
scaralang/core/service/exporter/csv/csv_trajectory_exporter_factory.py |
18 |
0 |
100% |
scaralang/core/service/exporter/csv/icsv_trajectory_exporter.py |
16 |
0 |
100% |
scaralang/core/service/exporter/export_dispatcher_bundle.py |
22 |
0 |
100% |
scaralang/core/service/exporter/export_target_dispatcher.py |
44 |
0 |
100% |
scaralang/core/service/exporter/export_target_dispatcher_factory.py |
28 |
0 |
100% |
scaralang/core/service/exporter/gcode/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/gcode/gcode_exporter.py |
24 |
0 |
100% |
scaralang/core/service/exporter/gcode/gcode_exporter_factory.py |
18 |
0 |
100% |
scaralang/core/service/exporter/gcode/igcode_exporter.py |
16 |
0 |
100% |
scaralang/core/service/exporter/iexport_target_dispatcher.py |
16 |
0 |
100% |
scaralang/core/service/exporter/json/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/json/ijson_trajectory_exporter.py |
16 |
0 |
100% |
scaralang/core/service/exporter/json/json_trajectory_exporter.py |
18 |
0 |
100% |
scaralang/core/service/exporter/json/json_trajectory_exporter_factory.py |
18 |
0 |
100% |
scaralang/core/service/exporter/scara/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/scara/iscara_plan_exporter.py |
16 |
0 |
100% |
scaralang/core/service/exporter/scara/scara_plan_exporter.py |
27 |
0 |
100% |
scaralang/core/service/exporter/scara/scara_plan_exporter_factory.py |
18 |
0 |
100% |
scaralang/core/service/exporter/scara/scara_program_serializer.py |
18 |
0 |
100% |
scaralang/core/service/exporter/scara/scara_source_generator.py |
22 |
0 |
100% |
scaralang/core/service/exporter/svg/__init__.py |
9 |
0 |
100% |
scaralang/core/service/exporter/svg/isvg_trajectory_exporter.py |
17 |
0 |
100% |
scaralang/core/service/exporter/svg/svg_trajectory_exporter.py |
25 |
0 |
100% |
scaralang/core/service/exporter/svg/svg_trajectory_exporter_factory.py |
18 |
0 |
100% |
scaralang/core/service/kinematics/__init__.py |
9 |
0 |
100% |
scaralang/core/service/kinematics/default_scara_profile.py |
21 |
0 |
100% |
scaralang/core/service/kinematics/ikinematics_service.py |
26 |
0 |
100% |
scaralang/core/service/kinematics/kinematics_service.py |
96 |
0 |
100% |
scaralang/core/service/kinematics/kinematics_service_factory.py |
23 |
0 |
100% |
scaralang/core/service/kinematics/transmission/__init__.py |
9 |
0 |
100% |
scaralang/core/service/kinematics/transmission/ijoint_step_transmission_converter.py |
16 |
0 |
100% |
scaralang/core/service/kinematics/transmission/joint_step_transmission_converter.py |
32 |
0 |
100% |
scaralang/core/service/kinematics/transmission/joint_step_transmission_converter_factory.py |
23 |
0 |
100% |
scaralang/core/service/linter/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/diagnostic/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/diagnostic/iscara_diagnostic_formatter.py |
15 |
0 |
100% |
scaralang/core/service/linter/diagnostic/scara_diagnostic_formatter.py |
18 |
0 |
100% |
scaralang/core/service/linter/diagnostic/scara_diagnostic_formatter_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/iscara_linter.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/rules/iscara_lint_rule.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/motion/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/rules/motion/imotion_calibration_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/motion/imotion_duplicate_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/motion/motion_calibration_validator.py |
22 |
1 |
95% |
scaralang/core/service/linter/rules/motion/motion_calibration_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/motion/motion_duplicate_validator.py |
39 |
1 |
97% |
scaralang/core/service/linter/rules/motion/motion_duplicate_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/motion/motion_lint_rule.py |
34 |
0 |
100% |
scaralang/core/service/linter/rules/motion/motion_lint_rule_factory.py |
25 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/ipneumatic_conflict_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/ipneumatic_flyby_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/ipneumatic_redundancy_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_conflict_validator.py |
32 |
1 |
97% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_conflict_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_flyby_validator.py |
25 |
1 |
96% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_flyby_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_lint_rule.py |
45 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_lint_rule_factory.py |
27 |
0 |
100% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_redundancy_validator.py |
32 |
1 |
97% |
scaralang/core/service/linter/rules/pneumatic/pneumatic_redundancy_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/state/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/rules/state/imotor_mode_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/state/istate_homing_validator.py |
17 |
0 |
100% |
scaralang/core/service/linter/rules/state/istate_zone_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/state/motor_mode_validator.py |
35 |
0 |
100% |
scaralang/core/service/linter/rules/state/motor_mode_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/state/state_homing_validator.py |
20 |
1 |
95% |
scaralang/core/service/linter/rules/state/state_homing_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/state/state_lint_rule.py |
38 |
0 |
100% |
scaralang/core/service/linter/rules/state/state_lint_rule_factory.py |
28 |
0 |
100% |
scaralang/core/service/linter/rules/state/state_zone_validator.py |
37 |
1 |
97% |
scaralang/core/service/linter/rules/state/state_zone_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/timing/__init__.py |
9 |
0 |
100% |
scaralang/core/service/linter/rules/timing/itiming_blend_zone_validator.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/timing/itiming_dwell_validator.py |
17 |
0 |
100% |
scaralang/core/service/linter/rules/timing/timing_blend_zone_validator.py |
27 |
1 |
96% |
scaralang/core/service/linter/rules/timing/timing_blend_zone_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/timing/timing_dwell_validator.py |
27 |
1 |
96% |
scaralang/core/service/linter/rules/timing/timing_dwell_validator_factory.py |
18 |
0 |
100% |
scaralang/core/service/linter/rules/timing/timing_lint_rule.py |
33 |
0 |
100% |
scaralang/core/service/linter/rules/timing/timing_lint_rule_factory.py |
25 |
0 |
100% |
scaralang/core/service/linter/scara_linter.py |
35 |
0 |
100% |
scaralang/core/service/linter/scara_linter_factory.py |
27 |
0 |
100% |
scaralang/core/service/motor/__init__.py |
9 |
0 |
100% |
scaralang/core/service/motor/motor_config_factory.py |
51 |
0 |
100% |
scaralang/core/service/motor/motor_drive_mode_resolver.py |
28 |
0 |
100% |
scaralang/core/service/motor/motor_interface_resolver.py |
30 |
0 |
100% |
scaralang/core/service/motor/motor_wire_mode_converter.py |
25 |
0 |
100% |
scaralang/core/service/parser/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/config/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/config/accel_config_parser.py |
26 |
0 |
100% |
scaralang/core/service/parser/commands/config/config_command_parser_factory.py |
24 |
0 |
100% |
scaralang/core/service/parser/commands/config/elbow_config_parser.py |
32 |
0 |
100% |
scaralang/core/service/parser/commands/config/motor_config_parser.py |
56 |
0 |
100% |
scaralang/core/service/parser/commands/config/override_config_parser.py |
26 |
0 |
100% |
scaralang/core/service/parser/commands/config/speed_config_parser.py |
30 |
0 |
100% |
scaralang/core/service/parser/commands/config/tool_orient_command_parser.py |
35 |
0 |
100% |
scaralang/core/service/parser/commands/config/zone_command_parser.py |
35 |
1 |
97% |
scaralang/core/service/parser/commands/flow/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/flow/disable_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/enable_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/estop_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/flow_command_parser_factory.py |
24 |
0 |
100% |
scaralang/core/service/parser/commands/flow/hold_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/resume_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/sync_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/flow/wait_command_parser.py |
28 |
0 |
100% |
scaralang/core/service/parser/commands/frame/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/frame/frame_command_parser_factory.py |
19 |
0 |
100% |
scaralang/core/service/parser/commands/frame/frame_reset_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/frame/frame_set_command_parser.py |
24 |
0 |
100% |
scaralang/core/service/parser/commands/icommand_parser.py |
18 |
0 |
100% |
scaralang/core/service/parser/commands/icommand_parser_provider.py |
17 |
0 |
100% |
scaralang/core/service/parser/commands/macro/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/macro/jump_command_parser.py |
27 |
1 |
96% |
scaralang/core/service/parser/commands/macro/macro_command_parser_factory.py |
20 |
0 |
100% |
scaralang/core/service/parser/commands/macro/pallet_def_command_parser.py |
30 |
0 |
100% |
scaralang/core/service/parser/commands/macro/pallet_move_command_parser.py |
30 |
0 |
100% |
scaralang/core/service/parser/commands/motion/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/motion/approach_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/motion/arc_command_parser.py |
25 |
0 |
100% |
scaralang/core/service/parser/commands/motion/home_command_parser.py |
22 |
0 |
100% |
scaralang/core/service/parser/commands/motion/jog_command_parser.py |
35 |
0 |
100% |
scaralang/core/service/parser/commands/motion/joint_move_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/motion/linear_move_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/motion/motion_command_parser_factory.py |
25 |
0 |
100% |
scaralang/core/service/parser/commands/motion/probe_command_parser.py |
24 |
0 |
100% |
scaralang/core/service/parser/commands/motion/retract_command_parser.py |
23 |
0 |
100% |
scaralang/core/service/parser/commands/parameter/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/parameter/parameter_extractor.py |
39 |
0 |
100% |
scaralang/core/service/parser/commands/tool/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/commands/tool/pump_command_parser.py |
31 |
0 |
100% |
scaralang/core/service/parser/commands/tool/tool_command_parser.py |
31 |
0 |
100% |
scaralang/core/service/parser/commands/tool/tool_command_parser_factory.py |
20 |
0 |
100% |
scaralang/core/service/parser/commands/tool/valve_command_parser.py |
31 |
0 |
100% |
scaralang/core/service/parser/instruction/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/instruction/iinstruction_line_parser.py |
20 |
0 |
100% |
scaralang/core/service/parser/instruction/instruction_line_parser.py |
54 |
0 |
100% |
scaralang/core/service/parser/instruction/instruction_line_parser_factory.py |
36 |
0 |
100% |
scaralang/core/service/parser/iscara_parser.py |
19 |
0 |
100% |
scaralang/core/service/parser/lexer/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/lexer/iscara_lexer.py |
16 |
0 |
100% |
scaralang/core/service/parser/lexer/scara_lexer.py |
45 |
1 |
98% |
scaralang/core/service/parser/lexer/scara_lexer_factory.py |
18 |
0 |
100% |
scaralang/core/service/parser/scara_parser.py |
34 |
0 |
100% |
scaralang/core/service/parser/scara_parser_factory.py |
31 |
0 |
100% |
scaralang/core/service/parser/splitter/__init__.py |
9 |
0 |
100% |
scaralang/core/service/parser/splitter/itoken_line_splitter.py |
17 |
0 |
100% |
scaralang/core/service/parser/splitter/token_line_splitter.py |
29 |
0 |
100% |
scaralang/core/service/parser/splitter/token_line_splitter_factory.py |
18 |
0 |
100% |
scaralang/core/service/protocol/__init__.py |
9 |
0 |
100% |
scaralang/core/service/protocol/ibinary_frame_builder.py |
25 |
0 |
100% |
scaralang/core/service/protocol/ibinary_frame_parser.py |
18 |
0 |
100% |
scaralang/core/service/protocol/ibinary_payload_unpacker.py |
20 |
0 |
100% |
scaralang/core/service/trajectory/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/discretization/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/discretization/ishape_discretizer.py |
20 |
0 |
100% |
scaralang/core/service/trajectory/discretization/shape_discretizer.py |
35 |
0 |
100% |
scaralang/core/service/trajectory/discretization/shape_discretizer_factory.py |
18 |
0 |
100% |
scaralang/core/service/trajectory/metrics/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/metrics/bottleneck/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/metrics/bottleneck/imotion_bottleneck_detector.py |
17 |
0 |
100% |
scaralang/core/service/trajectory/metrics/bottleneck/motion_bottleneck_detector.py |
34 |
0 |
100% |
scaralang/core/service/trajectory/metrics/bottleneck/motion_bottleneck_detector_factory.py |
18 |
0 |
100% |
scaralang/core/service/trajectory/metrics/cycle/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/metrics/cycle/cycle_time_calculator.py |
41 |
0 |
100% |
scaralang/core/service/trajectory/metrics/cycle/cycle_time_calculator_factory.py |
18 |
0 |
100% |
scaralang/core/service/trajectory/metrics/cycle/icycle_time_calculator.py |
17 |
0 |
100% |
scaralang/core/service/trajectory/metrics/profile/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/metrics/profile/axis_speed_profile_analyzer.py |
46 |
0 |
100% |
scaralang/core/service/trajectory/metrics/profile/axis_speed_profile_analyzer_factory.py |
18 |
0 |
100% |
scaralang/core/service/trajectory/metrics/profile/iaxis_speed_profile_analyzer.py |
17 |
0 |
100% |
scaralang/core/service/trajectory/metrics/summary/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/metrics/summary/itrajectory_cycle_summary_builder.py |
18 |
0 |
100% |
scaralang/core/service/trajectory/metrics/summary/trajectory_cycle_summary_builder.py |
35 |
0 |
100% |
scaralang/core/service/trajectory/metrics/summary/trajectory_cycle_summary_builder_factory.py |
21 |
0 |
100% |
scaralang/core/service/trajectory/metrics/trajectory_metrics.py |
40 |
0 |
100% |
scaralang/core/service/trajectory/plan/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/plan/itrajectory_mutable.py |
21 |
0 |
100% |
scaralang/core/service/trajectory/plan/itrajectory_plan.py |
13 |
0 |
100% |
scaralang/core/service/trajectory/plan/itrajectory_plan_factory.py |
16 |
0 |
100% |
scaralang/core/service/trajectory/plan/itrajectory_read_only.py |
20 |
0 |
100% |
scaralang/core/service/trajectory/plan/trajectory_plan.py |
42 |
0 |
100% |
scaralang/core/service/trajectory/plan/trajectory_plan_factory.py |
22 |
0 |
100% |
scaralang/core/service/trajectory/validation/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/validation/feedrate/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/validation/feedrate/feedrate_validator.py |
25 |
0 |
100% |
scaralang/core/service/trajectory/validation/feedrate/feedrate_validator_factory.py |
19 |
0 |
100% |
scaralang/core/service/trajectory/validation/feedrate/ifeedrate_validator.py |
16 |
0 |
100% |
scaralang/core/service/trajectory/validation/itrajectory_validator.py |
28 |
0 |
100% |
scaralang/core/service/trajectory/validation/plan/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/validation/plan/itrajectory_plan_validator.py |
16 |
0 |
100% |
scaralang/core/service/trajectory/validation/plan/trajectory_plan_validator.py |
44 |
0 |
100% |
scaralang/core/service/trajectory/validation/plan/trajectory_plan_validator_factory.py |
20 |
0 |
100% |
scaralang/core/service/trajectory/validation/trajectory_validator.py |
46 |
0 |
100% |
scaralang/core/service/trajectory/validation/trajectory_validator_factory.py |
28 |
0 |
100% |
scaralang/core/service/trajectory/validation/waypoint/__init__.py |
9 |
0 |
100% |
scaralang/core/service/trajectory/validation/waypoint/iwaypoint_validator.py |
17 |
0 |
100% |
scaralang/core/service/trajectory/validation/waypoint/waypoint_validator.py |
33 |
0 |
100% |
scaralang/core/service/trajectory/validation/waypoint/waypoint_validator_factory.py |
19 |
0 |
100% |
scaralang/engine.py |
60 |
0 |
100% |
scaralang/infrastructure/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/engine.py |
44 |
0 |
100% |
scaralang/infrastructure/cli/icli.py |
15 |
0 |
100% |
scaralang/infrastructure/cli/repl/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/compiler/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/compiler/irepl_single_command_compiler.py |
16 |
0 |
100% |
scaralang/infrastructure/cli/repl/compiler/repl_single_command_compiler.py |
46 |
1 |
98% |
scaralang/infrastructure/cli/repl/compiler/repl_single_command_compiler_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/cli/repl/dispatch/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/dispatch/irepl_command_dispatcher.py |
17 |
0 |
100% |
scaralang/infrastructure/cli/repl/dispatch/repl_command_dispatcher.py |
37 |
0 |
100% |
scaralang/infrastructure/cli/repl/dispatch/repl_command_dispatcher_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/cli/repl/input/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/input/irepl_line_reader.py |
13 |
0 |
100% |
scaralang/infrastructure/cli/repl/input/repl_line_reader.py |
21 |
0 |
100% |
scaralang/infrastructure/cli/repl/input/repl_line_reader_factory.py |
21 |
0 |
100% |
scaralang/infrastructure/cli/repl/presentation/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/presentation/irepl_response_presenter.py |
18 |
0 |
100% |
scaralang/infrastructure/cli/repl/presentation/repl_response_presenter.py |
25 |
0 |
100% |
scaralang/infrastructure/cli/repl/presentation/repl_response_presenter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/cli/repl/transmission/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/repl/transmission/irepl_frame_transmitter.py |
15 |
0 |
100% |
scaralang/infrastructure/cli/repl/transmission/repl_frame_transmitter.py |
24 |
0 |
100% |
scaralang/infrastructure/cli/repl/transmission/repl_frame_transmitter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/cli/setup/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/cli/setup/bundle.py |
22 |
0 |
100% |
scaralang/infrastructure/cli/setup/dep_validator.py |
37 |
0 |
100% |
scaralang/infrastructure/cli/setup/dependencies.py |
18 |
0 |
100% |
scaralang/infrastructure/cli/setup/factory.py |
26 |
0 |
100% |
scaralang/infrastructure/cli/setup/keys.py |
26 |
0 |
100% |
scaralang/infrastructure/cli/setup/opt_validator.py |
35 |
0 |
100% |
scaralang/infrastructure/cli/setup/options.py |
15 |
0 |
100% |
scaralang/infrastructure/cli/setup/registry.py |
31 |
0 |
100% |
scaralang/infrastructure/cli/setup/validator.py |
43 |
0 |
100% |
scaralang/infrastructure/command/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/command_bundle.py |
16 |
0 |
100% |
scaralang/infrastructure/command/command_bundle_factory.py |
47 |
0 |
100% |
scaralang/infrastructure/command/compile/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/compile_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/compile/compile_command_executor.py |
57 |
0 |
100% |
scaralang/infrastructure/command/compile/compile_command_executor_factory.py |
26 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/frame_header_formatter.py |
15 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/frame_header_formatter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/frame_trailer_formatter.py |
12 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/frame_trailer_formatter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/hex_stream_formatter.py |
19 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/hex_stream_formatter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/iframe_header_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/iframe_trailer_formatter.py |
13 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/framing/ihex_stream_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/ijoint_steps_payload_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/ipayload_dispatcher_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/itool_command_payload_formatter.py |
13 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/joint_steps_payload_formatter.py |
23 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/joint_steps_payload_formatter_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/payload_dispatcher_formatter.py |
43 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/payload_dispatcher_formatter_factory.py |
25 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/tool_command_payload_formatter.py |
22 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/payload/tool_command_payload_formatter_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/frame_step_presenter.py |
34 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/frame_step_presenter_factory.py |
21 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/iframe_step_presenter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/iprogram_inspection_presenter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/program_inspection_presenter.py |
25 |
0 |
100% |
scaralang/infrastructure/command/compile/inspection/presentation/program_inspection_presenter_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/command/compile/telemetry/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/compile/telemetry/compile_telemetry_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/compile/telemetry/compile_telemetry_formatter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/command/compile/telemetry/icompile_telemetry_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/disassemble/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/disassemble/disassemble_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/disassemble/disassemble_command_executor.py |
45 |
2 |
96% |
scaralang/infrastructure/command/disassemble/disassemble_command_executor_factory.py |
24 |
0 |
100% |
scaralang/infrastructure/command/disassemble/format/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/disassemble/format/disassemble_summary_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/disassemble/format/disassemble_summary_formatter_factory.py |
17 |
0 |
100% |
scaralang/infrastructure/command/disassemble/format/idisassemble_summary_formatter.py |
14 |
0 |
100% |
scaralang/infrastructure/command/export/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/export/export_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/export/export_command_executor.py |
46 |
2 |
96% |
scaralang/infrastructure/command/export/export_command_executor_factory.py |
24 |
0 |
100% |
scaralang/infrastructure/command/icommand_definition.py |
14 |
0 |
100% |
scaralang/infrastructure/command/icommand_executor.py |
14 |
0 |
100% |
scaralang/infrastructure/command/info/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/info/info_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/info/info_command_executor.py |
23 |
0 |
100% |
scaralang/infrastructure/command/info/info_command_executor_factory.py |
22 |
0 |
100% |
scaralang/infrastructure/command/lint/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/lint/lint_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/lint/lint_command_executor.py |
40 |
2 |
95% |
scaralang/infrastructure/command/lint/lint_command_executor_factory.py |
24 |
0 |
100% |
scaralang/infrastructure/command/repl/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/command/repl/repl_command_definition.py |
24 |
0 |
100% |
scaralang/infrastructure/command/repl/repl_command_executor.py |
77 |
2 |
97% |
scaralang/infrastructure/command/repl/repl_command_executor_factory.py |
33 |
0 |
100% |
scaralang/infrastructure/communication/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/binary_struct_format.py |
23 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/builder/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/builder/binary_frame_builder.py |
57 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/builder/binary_frame_builder_factory.py |
18 |
1 |
94% |
scaralang/infrastructure/communication/protocol/binary/checksum/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/checksum/crc16_ccitt.py |
30 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/__init__.py |
9 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_frame_assembler.py |
27 |
1 |
96% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_frame_assembler_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_frame_parser.py |
91 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_frame_parser_factory.py |
26 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_payload_unpacker.py |
48 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/binary_payload_unpacker_factory.py |
18 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/ibinary_frame_assembler.py |
16 |
0 |
100% |
scaralang/infrastructure/communication/protocol/binary/parser/parser_state.py |
20 |
0 |
100% |
scaralang/setup/__init__.py |
9 |
0 |
100% |
scaralang/setup/bundle.py |
21 |
0 |
100% |
scaralang/setup/dep_validator.py |
36 |
0 |
100% |
scaralang/setup/dependencies.py |
17 |
0 |
100% |
scaralang/setup/factory.py |
50 |
1 |
98% |
scaralang/setup/keys.py |
26 |
0 |
100% |
scaralang/setup/opt_validator.py |
34 |
0 |
100% |
scaralang/setup/options.py |
13 |
0 |
100% |
scaralang/setup/registry.py |
30 |
0 |
100% |
scaralang/setup/validator.py |
43 |
0 |
100% |
Total |
11454 |
31 |
99% |
π UsageΒΆ
Install package
pip3 install scaralang
CLI Tool (scarac / scaralang)ΒΆ
# Display general help and available subcommands
scarac --help
# Validate syntax and run static diagnostic lint checks
scarac lint program.scara
# Compile DSL program to packed binary execution file (.bin)
scarac compile program.scara -o program.bin
# Compile with verbose wire frame inspection and telemetry metrics
scarac compile program.scara -o program.bin --verbose
# Disassemble binary bytecode file into human-readable frame breakdown
scarac disassemble program.bin --summary
# Export trajectory to industrial G-code, CSV time-series, JSON, or SVG
scarac export program.scara --format GCODE -o program.gcode
scarac export program.scara --format CSV -o trajectory.csv
scarac export program.scara --format JSON -o bundle.json
scarac export program.scara --format SVG -o toolpath.svg
# Inspect toolchain info, supported commands, and grammar version
scarac info
# Launch interactive SCARA DSL motion REPL console
scarac repl
Python Library APIΒΆ
from scaralang.setup.factory import ScaralangBundleFactory
from scaralang.engine import Scaralang
from scaralang.core.service.dsl.scara_dsl_service_factory import (
ScaraDslServiceFactory,
)
# Initialize full DSL service via Composition Root factory
dsl_service = ScaraDslServiceFactory.create()
# Lint a script string
diagnostics = dsl_service.lint(
"HOME\nMOVE_J X:100.0 Y:150.0 Z:20.0 SPEED:FAST\n"
)
if not diagnostics:
print("Syntax & static semantics: OK")
# Compile to binary wire payload
binary_data, telemetry = dsl_service.compile_to_binary(
"HOME\nMOVE_L X:50.0 Y:80.0 Z:10.0 SPEED:SLOW\n"
)
print(
f"Compiled {len(binary_data)} bytes in {telemetry.compilation_duration_ms:.2f} ms"
)
π DocsΒΆ
π₯ ContributingΒΆ
π Copyright and licenceΒΆ
Copyright (C) 2026 by vroncevic.github.io/scaralang
scaralang is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, at your option, any later version of Python 3 you may have available.