Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
a = A(value=9)
b = B(count=8)
# Register callbacks that count.
callback_count = []
def a_callback(name, old, new):
callback_count.append('a')
a.on_trait_change(a_callback, 'value')
def b_callback(name, old, new):
callback_count.append('b')
b.on_trait_change(b_callback, 'count')
# Connect the two classes.
c = link((a, 'value'), (b, 'count'))
# Make sure b's count was set to a's value once.
assert ''.join(callback_count) == 'b'
del callback_count[:]
# Make sure a's value was set to b's count once.
b.count = 5
assert ''.join(callback_count) == 'ba'
del callback_count[:]
# Make sure b's count was set to a's value once.
a.value = 4
assert ''.join(callback_count) == 'ab'
del callback_count[:]
@register_ipy_widget(toolkey="Signal1D.smooth_butterworth")
@add_display_arg
def smooth_butterworth(obj, **kwargs):
wdict = {}
cutoff = ipywidgets.FloatSlider(min=0.01, max=1.)
order = ipywidgets.IntText()
type_ = ipywidgets.Dropdown(options=("low", "high"))
color = ipywidgets.ColorPicker()
close = ipywidgets.Button(
description="Close",
tooltip="Close widget and remove the smoothed line from the signal figure.")
apply = ipywidgets.Button(
description="Apply",
tooltip="Perform the operation using the selected range.")
link((obj, "cutoff_frequency_ratio"), (cutoff, "value"))
link((obj, "type"), (type_, "value"))
link((obj, "order"), (order, "value"))
wdict["cutoff"] = cutoff
wdict["order"] = order
wdict["type"] = type_
wdict["color"] = color
wdict["close_button"] = close
wdict["apply_button"] = apply
box = ipywidgets.VBox([
labelme("Cutoff frequency ration", cutoff),
labelme("Type", type_),
labelme("Order", order),
ipywidgets.HBox((apply, close))
])
def on_apply_clicked(b):
def smooth_tv_ipy(obj, **kwargs):
wdict = {}
smoothing_parameter = ipywidgets.FloatSlider(min=0.1, max=1000)
smoothing_parameter_max = ipywidgets.FloatText(
value=smoothing_parameter.max)
color = ipywidgets.ColorPicker()
close = ipywidgets.Button(
description="Close",
tooltip="Close widget and remove the smoothed line from the signal figure.")
apply = ipywidgets.Button(
description="Apply",
tooltip="Perform the operation using the selected range.")
link((obj, "smoothing_parameter"),
(smoothing_parameter, "value"))
link((smoothing_parameter_max, "value"),
(smoothing_parameter, "max"))
link((obj, "line_color_ipy"), (color, "value"))
wdict["smoothing_parameter"] = smoothing_parameter
wdict["smoothing_parameter_max"] = smoothing_parameter_max
wdict["color"] = color
wdict["close_button"] = close
wdict["apply_button"] = apply
box = ipywidgets.VBox([
labelme("Weight", smoothing_parameter),
labelme("Weight max", smoothing_parameter_max),
labelme("Color", color),
ipywidgets.HBox((apply, close))
])
def on_apply_clicked(b):
obj.apply()
link((obj, "index_in_array"), (index_in_array, "value"))
wd["index_in_array"] = index_in_array
if obj.navigate:
index = ipywidgets.IntSlider(min=0, max=obj.size - 1)
widgets.append(labelme("Index", index))
link((obj, "index"), (index, "value"))
wd["index"] = index
value = ipywidgets.FloatSlider(
min=obj.low_value,
max=obj.high_value,
)
wd["value"] = value
widgets.append(labelme("Value", value))
link((obj, "value"), (value, "value"))
link((obj, "high_value"), (value, "max"))
link((obj, "low_value"), (value, "min"))
link((obj, "scale"), (value, "step"))
units = ipywidgets.Text()
widgets.append(labelme("Units", units))
link((obj, "units"), (units, "value"))
wd["units"] = units
scale = ipywidgets.FloatText()
widgets.append(labelme("Scale", scale))
link((obj, "scale"), (scale, "value"))
wd["scale"] = scale
offset = ipywidgets.FloatText()
widgets.append(labelme("Offset", offset))
link((obj, "offset"), (offset, "value"))
thismin.observe(on_min_change, names='value')
thismax.observe(on_max_change, names='value')
# We store the link in the widget so that they are not deleted by the
# garbage collector
thismin._link = dlink((obj, "bmin"), (thismin, "value"))
thismax._link = dlink((obj, "bmax"), (thismax, "value"))
if index is not None: # value is tuple, expanding
def _interactive_tuple_update(value):
"""Callback function for the widgets, to update the value
"""
obj.value = obj.value[:index] + (value['new'],) +\
obj.value[index + 1:]
widget.observe(_interactive_tuple_update, names='value')
else:
link((obj, "value"), (widget, "value"))
container = HBox((thismin, widget, thismax))
wdict["value"] = widget
wdict["min"] = thismin
wdict["max"] = thismax
return {
"widget": container,
"wdict": wdict,
}
def get_eelscl_widget(obj, **kwargs):
"""Create ipywidgets for the EELSCLEDge component.
"""
wdict = {}
active = Checkbox(description='active', value=obj.active)
fine_structure = Checkbox(description='Fine structure',
value=obj.fine_structure_active)
fs_smoothing = FloatSlider(description='Fine structure smoothing',
min=0, max=1, step=0.001,
value=obj.fine_structure_smoothing)
link((obj, "active"), (active, "value"))
link((obj, "fine_structure_active"),
(fine_structure, "value"))
link((obj, "fine_structure_smoothing"),
(fs_smoothing, "value"))
container = VBox([active, fine_structure, fs_smoothing])
wdict["active"] = active
wdict["fine_structure"] = fine_structure
wdict["fs_smoothing"] = fs_smoothing
for parameter in [obj.intensity, obj.effective_angle,
obj.onset_energy]:
pdict = parameter.gui(
toolkit="ipywidgets", display=False)["ipywidgets"]
container.children += pdict["widget"],
wdict["parameter_{}".format(parameter.name)] = pdict["wdict"]
return {
"widget": container,
"wdict": wdict,
}
description="Close",
tooltip="Close widget and remove span selector from the signal figure.")
apply = ipywidgets.Button(
description="Apply",
tooltip="Perform the operation using the selected range.")
wdict["left"] = left
wdict["right"] = right
wdict["units"] = units
wdict["help"] = help
wdict["close_button"] = close
wdict["apply_button"] = apply
# Connect
link((obj, "ss_left_value"), (left, "value"))
link((obj, "ss_right_value"), (right, "value"))
link((axis, "units"), (units, "value"))
def on_apply_clicked(b):
obj = obj
if obj.ss_left_value != obj.ss_right_value:
obj.span_selector_switch(False)
for method, cls in obj.on_close:
method(cls, obj.ss_left_value, obj.ss_right_value)
obj.span_selector_switch(True)
apply.on_click(on_apply_clicked)
box = ipywidgets.VBox([
ipywidgets.HBox([left, units, ipywidgets.Label("-"), right, units]),
help,
ipywidgets.HBox((apply, close))
])
remove.on_click(on_remove_clicked)
labeled_spline_order = labelme("Spline order", spline_order)
def enable_interpolator_kind(change):
if change.new == "Spline":
for child in labeled_spline_order.children:
child.layout.display = ""
else:
for child in labeled_spline_order.children:
child.layout.display = "none"
interpolator_kind.observe(enable_interpolator_kind, "value")
link((obj, "interpolator_kind"),
(interpolator_kind, "value"))
link((obj, "threshold"), (threshold, "value"))
link((obj, "add_noise"), (add_noise, "value"))
link((obj, "default_spike_width"),
(default_spike_width, "value"))
link((obj, "spline_order"), (spline_order, "value"))
link((obj, "index"), (progress_bar, "value"))
# Trigger the function that controls the visibility as
# setting the default value doesn't trigger it.
class Dummy:
new = interpolator_kind.value
enable_interpolator_kind(change=Dummy())
advanced = ipywidgets.Accordion((
ipywidgets.VBox([
labelme("Add noise", add_noise),
labelme("Interpolator kind", interpolator_kind),
labelme("Default spike width", default_spike_width),
labelme("Spline order", spline_order), ]),))
def get_component_widget(obj, **kwargs):
"""Creates interactive notebook widgets for all component parameters,
if available.
"""
wdict = {}
active = Checkbox(description='active', value=obj.active)
wdict["active"] = active
link((obj, "active"), (active, "value"))
container = VBox([active])
for parameter in obj.parameters:
pardict = parameter.gui(
toolkit="ipywidgets", display=False)["ipywidgets"]
wdict["parameter_{}".format(parameter.name)] = pardict["wdict"]
container.children += pardict["widget"],
return {
"widget": container,
"wdict": wdict,
}
description="Close",
tooltip="Close widget and remove span selector from the signal figure.")
apply = ipywidgets.Button(
description="Apply",
tooltip="Perform the operation using the selected range.")
reset = ipywidgets.Button(
description="Reset",
tooltip="Reset the contrast to the previous value.")
wdict["left"] = left
wdict["right"] = right
wdict["close_button"] = close
wdict["apply_button"] = apply
wdict["reset_button"] = reset
# Connect
link((obj, "ss_left_value"), (left, "value"))
link((obj, "ss_right_value"), (right, "value"))
def on_apply_clicked(b):
obj.apply()
apply.on_click(on_apply_clicked)
def on_reset_clicked(b):
obj.reset()
reset.on_click(on_reset_clicked)
box = ipywidgets.VBox([
labelme("vmin", left),
labelme("vmax", right),
help,
ipywidgets.HBox((apply, reset, close))
])