from ........Internal.Core import Core
from ........Internal.CommandsGroup import CommandsGroup
from ........Internal import Conversions


# noinspection PyPep8Naming,PyAttributeOutsideInit,SpellCheckingInspection
class DelayCls:
	"""Delay commands group definition. 2 total commands, 0 Subgroups, 2 group commands"""

	def __init__(self, core: Core, parent):
		self._core = core
		self._cmd_group = CommandsGroup("delay", core, parent)

	def get_step(self) -> float:
		"""SCPI: [SOURce<HW>]:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STEP \n
		Snippet: value: float = driver.source.bb.arbitrary.mcarrier.edit.carrier.delay.get_step() \n
		The command sets the step width by which the start delays of the carriers in the defined carrier range will be
		incremented. \n
			:return: step: float Range: -1 to 1, Unit: s
		"""
		response = self._core.io.query_str('SOURce<HwInstance>:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STEP?')
		return Conversions.str_to_float(response)

	def set_step(self, step: float) -> None:
		"""SCPI: [SOURce<HW>]:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STEP \n
		Snippet: driver.source.bb.arbitrary.mcarrier.edit.carrier.delay.set_step(step = 1.0) \n
		The command sets the step width by which the start delays of the carriers in the defined carrier range will be
		incremented. \n
			:param step: float Range: -1 to 1, Unit: s
		"""
		param = Conversions.decimal_value_to_str(step)
		self._core.io.write(f'SOURce<HwInstance>:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STEP {param}')

	def get_start(self) -> float:
		"""SCPI: [SOURce<HW>]:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:[STARt] \n
		Snippet: value: float = driver.source.bb.arbitrary.mcarrier.edit.carrier.delay.get_start() \n
		The command sets the start delay for the individual carriers in the defined carrier range.
		If the command BB:ARB:MCAR:EDIT:CARR:DEL:STEP is used to define a step width, the delay entered here applies only to the
		starting carrier. The delays of the remaining carriers are stepped up or down by the delay value specified in the
		BB:ARB:MCAR:EDIT:CARR:DEL:STEP command. \n
			:return: start: float Range: 0 to 1, Unit: s
		"""
		response = self._core.io.query_str('SOURce<HwInstance>:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STARt?')
		return Conversions.str_to_float(response)

	def set_start(self, start: float) -> None:
		"""SCPI: [SOURce<HW>]:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:[STARt] \n
		Snippet: driver.source.bb.arbitrary.mcarrier.edit.carrier.delay.set_start(start = 1.0) \n
		The command sets the start delay for the individual carriers in the defined carrier range.
		If the command BB:ARB:MCAR:EDIT:CARR:DEL:STEP is used to define a step width, the delay entered here applies only to the
		starting carrier. The delays of the remaining carriers are stepped up or down by the delay value specified in the
		BB:ARB:MCAR:EDIT:CARR:DEL:STEP command. \n
			:param start: float Range: 0 to 1, Unit: s
		"""
		param = Conversions.decimal_value_to_str(start)
		self._core.io.write(f'SOURce<HwInstance>:BB:ARBitrary:MCARrier:EDIT:CARRier:DELay:STARt {param}')
