# Subtypes of layer

Layer had four facet slots: layer_transfer associates inputs to state; layer_out associates state to output; layer_alloc allocates patterns for input/state/output; layer_mem manages memory, controlling, e.g., whether input, state and output differ, (relates to if layer_transfer or layer_out are missing, and whether prior state is relevant) and what effects resets have, and ensuring there's memory for all inputs

The naming convention for layer_mem is layer_mem_X_Y_t, where X is the number of inputs and Y is 1 if input/state/output are the same and 3 if they are all different. The nr suffix indicates that a reset_at_time event is ignored. Thus, it is meaningful for layers using layer_mem_1_1_t to lack a layer_out and/or a layer_transfer (implies a no-op). bias_layer_impl is also a layer_mem.

The layer_alloc facets are simple, allocating a pattern of a particular type with the representation currently applying to the layer. The naming convention is transparent: layer_alloc_X allocates an X_pattern.

accumulator_layer = {integrate_transfer,layer_mem_1_3_t,clip_out,layer_alloc_strength}

bias_layer = {bias_layer_impl}

binary_layer = {layer_mem_1_1_t,layer_alloc_localist}

fire_layer = {latch_transfer,layer_mem_1_3_t,fire_out,layer_alloc_strength}

iac_layer_extended = {iac_layer_extended_impl,copy_out,layer_mem_2_3_t,layer_alloc_strength}

iac_layer = {iac_layer_impl,clip_out,layer_mem_1_3_t,layer_alloc_strength}

noise_layer = {noise_layer_impl,layer_mem_1_1_t,layer_alloc_strength}

scm_layer = {scm_layer_impl,clip_out,layer_mem_3_3_t_nr,layer_alloc_strength}

spatial_layer = {layer_mem_1_1_t,layer_alloc_spatial}

strength_layer = {layer_mem_1_1_t,layer_alloc_strength}

string_layer = {layer_mem_1_1_t,layer_alloc_string}

wtstring_layer = {layer_mem_1_1_t,layer_alloc_wtstring}