function signatures( idtypes, odtypes ) {
	var pairs;
	var out;
	var ch1;
	var ch2;
	var t1;
	var t2;
	var N;
	var s;
	var i;

	pairs = cartesianProduct( idtypes, odtypes );
	N = pairs.length;

	// Generate the list of signatures:
	out = [];
	for ( i = 0; i < N; i++ ) {
		t1 = pairs[ i ][ 0 ];
		t2 = pairs[ i ][ 1 ];

		// Resolve single-letter dtype abbreviation:
		ch1 = dtypeChar( t1 );
		ch2 = dtypeChar( t2 );

		// Generate the input/output array signature:
		s = ch1+'_'+ch2; // e.g., d_i
		out.push( s );
	}
	// Append any special loops:
	for ( i = 0; i < SPECIAL_LOOPS.length; i++ ) {
		out.push( SPECIAL_LOOPS[ i ] );
	}
	return out.sort();
}
Generates a list of loop signatures from a list of data types.

@private
@param {StringArray} idtypes - list of input data types
@param {StringArray} odtypes - list of output data types
@returns {StringArray} list of loop signatures