<commit_before>import PropTypes from 'prop-types';
import MomentPropTypes from 'react-moment-proptypes';

export const FuzzyTimePropType = PropTypes.shape({
  hour: PropTypes.number,
  minute: PropTypes.number,
  second: PropTypes.number,
});

export const TimeblockPropType = PropTypes.shape({
  label: PropTypes.string.isRequired,
  start: FuzzyTimePropType.isRequired,
  finish: FuzzyTimePropType.isRequired,
});

export const TimeblockOmissionPropType = PropTypes.shape({
  label: PropTypes.string.isRequired,
  date: PropTypes.string.isRequired,
});

export const TimeblockPreferencePropType = PropTypes.shape({
  start: MomentPropTypes.momentObj.isRequired,
  finish: MomentPropTypes.momentObj.isRequired,
  label: PropTypes.string.isRequired,
  ordinality: PropTypes.string.isRequired,
});

export const TimeblockPreferenceAPIRepresentationPropType = PropTypes.shape({
  start: PropTypes.string.isRequired,
  finish: PropTypes.string.isRequired,
  label: PropTypes.string.isRequired,
  ordinality: PropTypes.string.isRequired,
});

export default {
  preferencesMatch(a, b) {
    return a.start.isSame(b.start) && a.finish.isSame(b.finish);<commit_msg>Is this really deduplication?<commit_after>import PropTypes from 'prop-types';
import MomentPropTypes from 'react-moment-proptypes';

export const FuzzyTimePropType = PropTypes.shape({
  hour: PropTypes.number,
  minute: PropTypes.number,
  second: PropTypes.number,
});

export const TimeblockPropType = PropTypes.shape({
  label: PropTypes.string.isRequired,
  start: FuzzyTimePropType.isRequired,
  finish: FuzzyTimePropType.isRequired,
});

export const TimeblockOmissionPropType = PropTypes.shape({
  label: PropTypes.string.isRequired,
  date: PropTypes.string.isRequired,
});

const timeblockPreferenceCommonProps = {
  label: PropTypes.string.isRequired,
  ordinality: PropTypes.string.isRequired,
};

export const TimeblockPreferencePropType = PropTypes.shape({
  start: MomentPropTypes.momentObj.isRequired,
  finish: MomentPropTypes.momentObj.isRequired,
  ...timeblockPreferenceCommonProps,
});

export const TimeblockPreferenceAPIRepresentationPropType = PropTypes.shape({
  start: PropTypes.string.isRequired,
  finish: PropTypes.string.isRequired,
  ...timeblockPreferenceCommonProps,
});

export default {
  preferencesMatch(a, b) {
    return a.start.isSame(b.start) && a.finish.isSame(b.finish);
{'fraction_non_alphanumeric': 0.1066610455311973, 'fraction_numerical': 0.0, 'mean_word_length': 6.020710059171598, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1682379', 'n_tokens_mistral': 706, 'n_tokens_neox': 732, 'n_words': 136}