<commit_before>//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Tree Map
//------------------------------------------------------------------------------
d3plus.visualization.tree_map = function(vars) {

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Group the data by each depth defined by the .id() method.
  //----------------------------------------------------------------------------
  var grouped_data = d3.nest()

  vars.id.nesting.forEach(function(n,i){

    if (i < vars.depth.value) {

      grouped_data.key(function(d){

        return d3plus.variable.value(vars,d.d3plus,n)

      })

    }

  })

  var strippedData = []
  vars.data.app.forEach(function(d){
    strippedData.push({
      "d3plus" : d,
      "value"  : d3plus.variable.value(vars,d,vars.size.value)
    })
  })

  grouped_data = grouped_data.entries(strippedData)

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Pass data through the D3js .treemap() layout.
  //----------------------------------------------------------------------------
  var data = d3.layout.treemap()
    .mode(vars.type.mode.value)
    .round(true)
    .size([ vars.width.viz , vars.height.viz ])
    .children(function(d) {

      return d.values

    })
    .padding(1)
    .sort(function(a, b) {

      return a.value - b.value

    })
    .nodes({
      "name":"root",
      "values": grouped_data
    })
    .filter(function(d) {

      return !d.values && d.area

    })

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // If the "data" array has entries...
  //----------------------------------------------------------------------------
  if (data.length) {

    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    // Create the "root" node to use when calculating share percentage.
    //--------------------------------------------------------------------------<commit_msg>tree_map now sorts by ID if squares are the same size<commit_after>//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Tree Map
//------------------------------------------------------------------------------
d3plus.visualization.tree_map = function(vars) {

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Group the data by each depth defined by the .id() method.
  //----------------------------------------------------------------------------
  var grouped_data = d3.nest()

  vars.id.nesting.forEach(function(n,i){

    if (i < vars.depth.value) {

      grouped_data.key(function(d){

        return d3plus.variable.value(vars,d.d3plus,n)

      })

    }

  })

  var strippedData = []
  vars.data.app.forEach(function(d){
    strippedData.push({
      "d3plus" : d,
      "id"     : d[vars.id.value],
      "value"  : d3plus.variable.value(vars,d,vars.size.value)
    })
  })

  grouped_data = grouped_data.entries(strippedData)

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Pass data through the D3js .treemap() layout.
  //----------------------------------------------------------------------------
  var data = d3.layout.treemap()
    .mode(vars.type.mode.value)
    .round(true)
    .size([ vars.width.viz , vars.height.viz ])
    .children(function(d) {

      return d.values

    })
    .padding(1)
    .sort(function(a, b) {

      var sizeDiff = a.value - b.value
      return sizeDiff === 0 ? a.id < b.id : sizeDiff

    })
    .nodes({
      "name":"root",
      "values": grouped_data
    })
    .filter(function(d) {

      return !d.values && d.area

    })

  //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // If the "data" array has entries...
  //----------------------------------------------------------------------------
  if (data.length) {

    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    // Create the "root" node to use when calculating share percentage.
    //--------------------------------------------------------------------------
{'fraction_non_alphanumeric': 0.4663623258049015, 'fraction_numerical': 0.004565112926477655, 'mean_word_length': 1.5793060718711276, 'pattern_counts': {'":': 4, '<': 6, '<?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': '3484075', 'n_tokens_mistral': 1205, 'n_tokens_neox': 1152, 'n_words': 191}