Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Private variables #592

Merged
merged 16 commits into from
Jun 7, 2019
Merged

Private variables #592

merged 16 commits into from
Jun 7, 2019

Conversation

dkfellows
Copy link
Member

This PR is about making sPyNNaker's internal fields of objects be actually private, as much as possible. (I've not done anything about SpiNNFrontEndCommon, and I don't plan to do so either.) There will soon be a matching PR for sPyNNaker8.


A field or method is private when its name starts with __ (double underscore) but doesn't end with more than one _ (i.e., single underscore). Python implements “private” by rewriting the name to have the class name prepended. For example, in this class:

class Foo(object):
    __slots__ = ["__bar"]

    def __init__(self):
        self.__bar = "grill"

The name of the field in instances of Foo is actually _Foo__bar but you're supposed to ignore that and pretend that the variable is truly private. (There's only one place in our codebase where we really need to take advantage of that knowledge.)


The main awkward bit is that some fields have to remain with a single leading underscore (which is protected by convention) because they're used by subclasses, for equality checks, or for our unit test code. Can't be helped really, I guess…

@coveralls
Copy link

coveralls commented Feb 5, 2019

Pull Request Test Coverage Report for Build 4872

  • 473 of 1707 (27.71%) changed or added relevant lines in 109 files are covered.
  • 53 unchanged lines in 26 files lost coverage.
  • Overall coverage increased (+0.1%) to 52.011%

Changes Missing Coverage Covered Lines Changed/Added Lines %
spynnaker/pyNN/models/neural_projections/connectors/one_to_one_connector.py 2 3 66.67%
spynnaker/pyNN/models/neural_projections/synapse_information.py 12 13 92.31%
spynnaker/pyNN/models/neural_properties/neural_parameter.py 31 32 96.88%
spynnaker/pyNN/models/neuron/implementations/abstract_standard_neuron_component.py 4 5 80.0%
spynnaker/pyNN/models/neuron/implementations/struct.py 2 3 66.67%
spynnaker/pyNN/protocols/munich_io_spinnaker_link_protocol.py 12 13 92.31%
spynnaker/pyNN/external_devices_models/threshold_type_multicast_device_control.py 1 3 33.33%
spynnaker/pyNN/models/neural_projections/connectors/all_to_all_connector.py 4 6 66.67%
spynnaker/pyNN/models/neural_projections/delayed_machine_edge.py 0 2 0.0%
spynnaker/pyNN/models/neural_projections/projection_application_edge.py 8 10 80.0%
Files with Coverage Reduction New Missed Lines %
spynnaker/pyNN/models/neuron/synapse_dynamics/synapse_dynamics_structural_static.py 1 36.84%
spynnaker/pyNN/utilities/running_stats.py 1 27.78%
spynnaker/pyNN/external_devices_models/external_device_lif_control_vertex.py 1 53.33%
spynnaker/pyNN/external_devices_models/push_bot/push_bot_ethernet/push_bot_wifi_connection.py 1 31.17%
spynnaker/pyNN/models/neural_projections/connectors/from_list_connector.py 1 72.61%
spynnaker/pyNN/models/neuron/synapse_types/synapse_type_alpha.py 1 45.57%
spynnaker/pyNN/connections/ethernet_control_connection.py 1 35.29%
spynnaker/pyNN/spynnaker_external_device_plugin_manager.py 1 38.1%
spynnaker/pyNN/models/neuron/implementations/neuron_impl_standard.py 1 51.58%
spynnaker/pyNN/models/neuron/synapse_dynamics/synapse_dynamics_static.py 1 68.75%
Totals Coverage Status
Change from base Build 4854: 0.1%
Covered Lines: 5135
Relevant Lines: 9873

💛 - Coveralls

Conflicts:
	spynnaker/pyNN/abstract_spinnaker_common.py
	spynnaker/pyNN/connections/spynnaker_poisson_control_connection.py
	spynnaker/pyNN/external_devices_models/push_bot/push_bot_ethernet/push_bot_ethernet_device.py
	spynnaker/pyNN/external_devices_models/threshold_type_multicast_device_control.py
	spynnaker/pyNN/models/common/multi_spike_recorder.py
	spynnaker/pyNN/models/common/neuron_recorder.py
	spynnaker/pyNN/models/neural_projections/connectors/abstract_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/abstract_generate_connector_on_machine.py
	spynnaker/pyNN/models/neural_projections/connectors/array_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/csa_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/distance_dependent_probability_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/fixed_number_post_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/fixed_number_pre_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/from_file_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/from_list_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/index_based_probability_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/multapse_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/one_to_one_connector.py
	spynnaker/pyNN/models/neural_projections/connectors/small_world_connector.py
	spynnaker/pyNN/models/neural_projections/projection_machine_edge.py
	spynnaker/pyNN/models/neural_projections/synapse_information.py
	spynnaker/pyNN/models/neuron/abstract_population_vertex.py
	spynnaker/pyNN/models/neuron/connection_holder.py
	spynnaker/pyNN/models/neuron/generator_data.py
	spynnaker/pyNN/models/neuron/plasticity/stdp/timing_dependence/timing_dependence_spike_nearest_pair.py
	spynnaker/pyNN/models/neuron/plasticity/stdp/weight_dependence/abstract_has_a_plus_a_minus.py
	spynnaker/pyNN/models/neuron/population_machine_vertex.py
	spynnaker/pyNN/models/neuron/synapse_types/synapse_type_alpha.py
	spynnaker/pyNN/models/pynn_population_common.py
	spynnaker/pyNN/models/pynn_projection_common.py
	spynnaker/pyNN/models/spike_source/spike_source_array.py
	spynnaker/pyNN/models/spike_source/spike_source_array_vertex.py
	spynnaker/pyNN/models/spike_source/spike_source_poisson.py
	spynnaker/pyNN/models/spike_source/spike_source_poisson_machine_vertex.py
	spynnaker/pyNN/models/spike_source/spike_source_poisson_vertex.py
	spynnaker/pyNN/models/utility_models/delay_extension_vertex.py
	spynnaker/pyNN/models/utility_models/delay_generator_data.py
	spynnaker/pyNN/models/utility_models/spike_injector_vertex.py
Conflicts:
	spynnaker/pyNN/models/neural_projections/connectors/from_list_connector.py
@rowleya rowleya merged commit 3f33889 into master Jun 7, 2019
@rowleya rowleya deleted the private-variables branch June 7, 2019 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants