<commit_before><?php 
$title = 'Probability and Statistics - Mathematics Playground';

require_once('header.php');
?>

		<div class="container-fluid">
			<?php require_once('menu.html'); ?>
			<div class="span9">
				<div class="hero-unit">
					<h1>Probability and Statistics</h1>
				</div>
				<div class="dropdown clearfix" style='float: right; margin-left: 1em; margin-bottom: 2em;'>
					<ul class="dropdown-menu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
						<li><a href="#uniform">Uniform Distribution</a></li>
						<li><a href="#normal">Normal Distribution</a></li>
						<li><a href="#binomial">Binomial Distribution</a></li>
						<li><a href="#poisson">Poisson Distribution</a></li>
					</ul>
				</div>

				<script type='text/javascript'>
					function toggleShowing() {
						$("#unishowmean").is(':checked') ? unimean.showElement() : unimean.hideElement();
						$("#unishowmedian").is(':checked') ? unimedian.showElement() : unimedian.hideElement();
						$("#unishowmode").is(':checked') ? unimode.showElement() : unimode.hideElement();
						$("#unishowrange").is(':checked') ? unirange.showElement() : unirange.hideElement();
						$("#normshowmean").is(':checked') ? normmean.showElement() : normmean.hideElement();
						$("#normshowmedian").is(':checked') ? normmedian.showElement() : normmedian.hideElement();
						$("#normshowmode").is(':checked') ? normmode.showElement() : normmode.hideElement();
						$("#normshowrange").is(':checked') ? normrange.showElement() : normrange.hideElement();
						$("#bnshowmean").is(':checked') ? bnmean.showElement() : bnmean.hideElement();
						$("#bnshowmedian").is(':checked') ? bnmedian.showElement() : bnmedian.hideElement();
						$("#bnshowmode").is(':checked') ? bnmode.showElement() : bnmode.hideElement();
						$("#bnshowrange").is(':checked') ? bnrange.showElement() : bnrange.hideElement();
						$("#psshowmean").is(':checked') ? psmean.showElement() : psmean.hideElement();
						$("#psshowmedian").is(':checked') ? psmedian.showElement() : psmedian.hideElement();
						$("#psshowmode").is(':checked') ? psmode.showElement() : psmode.hideElement();
						$("#psshowrange").is(':checked') ? psrange.showElement() : psrange.hideElement();
						uniplot.series[1].show = $("#unishowmean").is(':checked');
						uniplot.series[1].pointLabels.show = $("#unishowmean").is(':checked');
						uniplot.series[2].show = $("#unishowmedian").is(':checked');
						uniplot.series[2].pointLabels.show = $("#unishowmedian").is(':checked');
						uniplot.series[3].show = $("#unishowmode").is(':checked');
						uniplot.series[3].pointLabels.show = $("#unishowmode").is(':checked');
						uniplot.replot();
						unijsx.update();
						normjsx.update();
						bnjsx.update();
						psjsx.update();
					}

					$(document).ready(function() {
						// JSXGraph can't be initialised correctly if not displayed
						// so all tabs are marked active and then 2D tabs are hidden
						// once all initialisation is complete.
						$("#unitab2d").removeClass("active");
					});
				</script>

				<div>
					<h2 id='uniform'>Uniform Distribution</h2>

					<br />

					<p>The graph below shows a random population of integers with a uniform distribution. Use the slider at the top to control the sample size. Select the tools on the left to display different properties of this population.</p>

					<br /><br />

					<div style='float: left; margin-left: 1em; margin-top: 5em;'>
						<input type='checkbox' id='unishowmean' name='unishowmean' onclick='toggleShowing();' /><label for='unishowmean'>Show mean</label><br />
						<input type='checkbox' id='unishowmedian' name='unishowmedian' onclick='toggleShowing();' /><label for='unishowmedian'>Show median</label><br />
						<input type='checkbox' id='unishowmode' name='unishowmode' onclick='toggleShowing();' /><label for='unishowmode'>Show mode</label><br />
						<input type='checkbox' id='unishowrange' name='unishowrange' onclick='toggleShowing();' /><label for='unishowrange'>Show range</label><br />
					</div>

					<div class="tabbable" style='float: left; padding-left: 1em;'>
						<ul class="nav nav-tabs" style='margin-bottom: 0; margin-left: 10px;'>
							<li class="active"><a href="#unitab1d" data-toggle="tab">1 Dimensional</a></li>
							<li><a href="#unitab2d" data-toggle="tab">2 Dimensional</a></li>
						</ul>
						<div class="tab-content" style='overflow: visible; height: 525px;'>
							<div id="unitab1d" class="tab-pane active">
								<center><div style='margin-top: 5px; margin-bottom: 5px;'>Sample: <span id='uni1dsample'>0</span></div><div id='uni1dslider'></div><div id="uniplot" class="medgraph"></div></center>
							</div>
							<div id="unitab2d" class="tab-pane active">
								<center><br /><div id='unigraph' class='jxgbox medgraph'></div></center>
								<div class='graphcontrols' style='margin-left: 7px;'><button onclick="JXG.JSXGraph.freeBoard(unijsx); initUni2D();">Reset</button> <span class='mousepos' id='unimousepos'></span></div>
							</div>
						</div>
					</div>

					<script type='text/javascript'>
						function initUni2D() {
							unijsx = JXG.JSXGraph.initBoard('unigraph', {boundingbox: [-10, 10, 10, -10], grid: true, pan: true, zoom: true, showcopyright: false, axis: true, pan: {needShift: false}});

							var unisample = unijsx.createElement('slider', [[-9.25, 9], [5.5 ,9], [0, 0, 200]], {name: 'Sample', snapWidth: 1});

							var points = [];

							unimean = unijsx.createElement('point', [function() {
								return mean(getXArray(points));
							}, function() {
								return mean(getYArray(points));
							}], {fixed: true, name: 'Mean', strokeColor: '#c44', fillColor: '#c44', visible: false});

							unimedian = unijsx.createElement('point', [function() {
								return median(getXArray(points));
							}, function() {
								return median(getYArray(points));
							}], {fixed: true, name: 'Median', strokeColor: '#4c4', fillColor: '#4c4', visible: false});

							unimode = unijsx.createElement('point', [function() {
								if(points.length == 0) {
									return null;
								} else {
									return mode(getXArray(points))[0];
								}
							}, function() {
								if(points.length == 0) {
									return null;
								} else {
									return mode(getYArray(points))[0];
								}
							}], {fixed: true, name: 'Mode', strokeColor: '#44c', fillColor: '#44c', visible: false});

							var unirp1 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp2 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp3 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp4 = unijsx.create('point', [0, 0], {visible: false, fixed: true});

							unirange = unijsx.createElement('polygon', [unirp1, unirp2, unirp3, unirp4], {fixed: true, strokeColor: '#44c', fillColor: '#44c', visible: false});

							unijsx.on('update', function() {
								if (unisample.Value() > points.length) {
									for(var i = points.length; i<unisample.Value(); i++) {
										points[i] = unijsx.createElement('point', [Math.round(Math.random() * 16) - 8, Math.round(Math.random() * 16) - 8], {fixed: true, withLabel: false, strokeColor: 'black', fillColor: 'black', size: 1});
									}
								} else if (unisample.Value() < points.length) {
									for(var i = points.length - 1; i>=unisample.Value(); i--) {
										points.pop().remove();
									}
								}

								if(points.length > 1) {
									var xa = getXArray(points);
									var xmin = Math.min.apply(Math, xa);
									var xmax = Math.max.apply(Math, xa);
									var ya = getYArray(points);
									var ymin = Math.min.apply(Math, ya);
									var ymax = Math.max.apply(Math, ya);
									unirp1.setPosition(JXG.COORDS_BY_USER, [xmin, ymin]);
									unirp2.setPosition(JXG.COORDS_BY_USER, [xmin, ymax]);
									unirp3.setPosition(JXG.COORDS_BY_USER, [xmax, ymax]);
									unirp4.setPosition(JXG.COORDS_BY_USER, [xmax, ymin]);
								} else {
									unirp1.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp2.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp3.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp4.setPosition(JXG.COORDS_BY_USER, [0, 0]);
								}

							});

							unijsx.on('mousemove', function(e) {
								var mPos = unijsx.getUsrCoordsOfMouse(e);
								$('#unimousepos').text(mPos[0].toFixed(2) + ', ' + mPos[1].toFixed(2));
							});

							unijsx.update();
						}

						initUni2D();

						function initUni1D() {
							var points = [];
							$( "#uni1dslider" ).slider({
								range: "min",
								min: 0,
								max: 200,
								value: 0,
								slide: function( event, ui ) {
									$( "#uni1dsample" ).text(ui.value);
									if (ui.value > points.length) {
										for(var i = points.length; i<ui.value; i++) {
											points[i] = Math.round(Math.random() * 10);
										}
									} else if (ui.value < points.length) {
										for(var i = points.length - 1; i>=ui.value; i--) {
											points.pop();
										}
									}
									uniplot.series[0].data = _.zip([0,1,2,3,4,5,6,7,8,9,10], uniRenderer()[0]);
									if(points.length > 0) {
										pointsCopy = points.slice(0); // Use a copy of points to avoid them getting sorted during averaging
										uniplot.series[1].data = _.zip([mean(pointsCopy), mean(pointsCopy)], [33, "mean"]);
										uniplot.series[2].data = _.zip([median(pointsCopy), median(pointsCopy)], [39, "median"]);
										uniplot.series[3].data = _.zip([mode(pointsCopy)[0], mode(pointsCopy)[0]], [45, "mode"]);
									} else {
										uniplot.series[1].data = _.zip([0], [33]);
										uniplot.series[2].data = _.zip([0], [39]);
										uniplot.series[3].data = _.zip([0], [45]);
									}
									uniplot.replot();
								}
							});

							var uniRenderer = function() {
								var data = [[0,0,0,0,0,0,0,0,0,0,0], [33], [39], [45]];
								for (var i=0; i<points.length; i++) {
									data[0][points[i]] = data[0][points[i]] + 1;
								}
								return data;
							};

							uniplot = $.jqplot('uniplot',[],{
								dataRenderer: uniRenderer,
								series: [
									{
										renderer: $.jqplot.BarRenderer,
										rendererOptions: {
											barWidth: 25
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['mean'],
											location: 's',
											ypadding: 3
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['median'],
											location: 's',
											ypadding: 3
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['mode'],
											location: 's',
											ypadding: 3
										}
									}
								],
								axes: {
									xaxis: {
										renderer: $.jqplot.CategoryAxisRenderer,
										min: -1,
										max: 11,
										numberTicks: 13
									},
									yaxis: {
										min: 0,
										max: 100
									}
								},
							});
						}

						initUni1D();
					</script>

					<br /><br />
				</div>

				<div style='clear: both;'>
					<h2 id='normal'>Normal Distribution</h2>

					<br />

					<p>The graph below shows a random population of integers with a normal distribution. Use the slider at the top to control the sample size. Select the tools on the left to display different properties of this population.</p><commit_msg>Add range to 1D graphs<commit_after><?php 
$title = 'Probability and Statistics - Mathematics Playground';

require_once('header.php');
?>

		<div class="container-fluid">
			<?php require_once('menu.html'); ?>
			<div class="span9">
				<div class="hero-unit">
					<h1>Probability and Statistics</h1>
				</div>
				<div class="dropdown clearfix" style='float: right; margin-left: 1em; margin-bottom: 2em;'>
					<ul class="dropdown-menu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
						<li><a href="#uniform">Uniform Distribution</a></li>
						<li><a href="#normal">Normal Distribution</a></li>
						<li><a href="#binomial">Binomial Distribution</a></li>
						<li><a href="#poisson">Poisson Distribution</a></li>
					</ul>
				</div>

				<script type='text/javascript'>
					function toggleShowing() {
						$("#unishowmean").is(':checked') ? unimean.showElement() : unimean.hideElement();
						$("#unishowmedian").is(':checked') ? unimedian.showElement() : unimedian.hideElement();
						$("#unishowmode").is(':checked') ? unimode.showElement() : unimode.hideElement();
						$("#unishowrange").is(':checked') ? unirange.showElement() : unirange.hideElement();
						$("#normshowmean").is(':checked') ? normmean.showElement() : normmean.hideElement();
						$("#normshowmedian").is(':checked') ? normmedian.showElement() : normmedian.hideElement();
						$("#normshowmode").is(':checked') ? normmode.showElement() : normmode.hideElement();
						$("#normshowrange").is(':checked') ? normrange.showElement() : normrange.hideElement();
						$("#bnshowmean").is(':checked') ? bnmean.showElement() : bnmean.hideElement();
						$("#bnshowmedian").is(':checked') ? bnmedian.showElement() : bnmedian.hideElement();
						$("#bnshowmode").is(':checked') ? bnmode.showElement() : bnmode.hideElement();
						$("#bnshowrange").is(':checked') ? bnrange.showElement() : bnrange.hideElement();
						$("#psshowmean").is(':checked') ? psmean.showElement() : psmean.hideElement();
						$("#psshowmedian").is(':checked') ? psmedian.showElement() : psmedian.hideElement();
						$("#psshowmode").is(':checked') ? psmode.showElement() : psmode.hideElement();
						$("#psshowrange").is(':checked') ? psrange.showElement() : psrange.hideElement();
						uniplot.series[1].show = $("#unishowmean").is(':checked');
						uniplot.series[1].pointLabels.show = $("#unishowmean").is(':checked');
						uniplot.series[2].show = $("#unishowmedian").is(':checked');
						uniplot.series[2].pointLabels.show = $("#unishowmedian").is(':checked');
						uniplot.series[3].show = $("#unishowmode").is(':checked');
						uniplot.series[3].pointLabels.show = $("#unishowmode").is(':checked');
						uniplot.series[4].show = $("#unishowrange").is(':checked');
						uniplot.series[4].pointLabels.show = $("#unishowrange").is(':checked');
						uniplot.replot();
						unijsx.update();
						normjsx.update();
						bnjsx.update();
						psjsx.update();
					}

					$(document).ready(function() {
						// JSXGraph can't be initialised correctly if not displayed
						// so all tabs are marked active and then 2D tabs are hidden
						// once all initialisation is complete.
						$("#unitab2d").removeClass("active");
					});
				</script>

				<div>
					<h2 id='uniform'>Uniform Distribution</h2>

					<br />

					<p>The graph below shows a random population of integers with a uniform distribution. Use the slider at the top to control the sample size. Select the tools on the left to display different properties of this population.</p>

					<br /><br />

					<div style='float: left; margin-left: 1em; margin-top: 5em;'>
						<input type='checkbox' id='unishowmean' name='unishowmean' onclick='toggleShowing();' /><label for='unishowmean'>Show mean</label><br />
						<input type='checkbox' id='unishowmedian' name='unishowmedian' onclick='toggleShowing();' /><label for='unishowmedian'>Show median</label><br />
						<input type='checkbox' id='unishowmode' name='unishowmode' onclick='toggleShowing();' /><label for='unishowmode'>Show mode</label><br />
						<input type='checkbox' id='unishowrange' name='unishowrange' onclick='toggleShowing();' /><label for='unishowrange'>Show range</label><br />
					</div>

					<div class="tabbable" style='float: left; padding-left: 1em;'>
						<ul class="nav nav-tabs" style='margin-bottom: 0; margin-left: 10px;'>
							<li class="active"><a href="#unitab1d" data-toggle="tab">1 Dimensional</a></li>
							<li><a href="#unitab2d" data-toggle="tab">2 Dimensional</a></li>
						</ul>
						<div class="tab-content" style='overflow: visible; height: 525px;'>
							<div id="unitab1d" class="tab-pane active">
								<center><div style='margin-top: 5px; margin-bottom: 5px;'>Sample: <span id='uni1dsample'>0</span></div><div id='uni1dslider'></div><div id="uniplot" class="medgraph"></div></center>
							</div>
							<div id="unitab2d" class="tab-pane active">
								<center><br /><div id='unigraph' class='jxgbox medgraph'></div></center>
								<div class='graphcontrols' style='margin-left: 7px;'><button onclick="JXG.JSXGraph.freeBoard(unijsx); initUni2D();">Reset</button> <span class='mousepos' id='unimousepos'></span></div>
							</div>
						</div>
					</div>

					<script type='text/javascript'>
						function initUni2D() {
							unijsx = JXG.JSXGraph.initBoard('unigraph', {boundingbox: [-10, 10, 10, -10], grid: true, pan: true, zoom: true, showcopyright: false, axis: true, pan: {needShift: false}});

							var unisample = unijsx.createElement('slider', [[-9.25, 9], [5.5 ,9], [0, 0, 200]], {name: 'Sample', snapWidth: 1});

							var points = [];

							unimean = unijsx.createElement('point', [function() {
								return mean(getXArray(points));
							}, function() {
								return mean(getYArray(points));
							}], {fixed: true, name: 'Mean', strokeColor: '#c44', fillColor: '#c44', visible: false});

							unimedian = unijsx.createElement('point', [function() {
								return median(getXArray(points));
							}, function() {
								return median(getYArray(points));
							}], {fixed: true, name: 'Median', strokeColor: '#4c4', fillColor: '#4c4', visible: false});

							unimode = unijsx.createElement('point', [function() {
								if(points.length == 0) {
									return null;
								} else {
									return mode(getXArray(points))[0];
								}
							}, function() {
								if(points.length == 0) {
									return null;
								} else {
									return mode(getYArray(points))[0];
								}
							}], {fixed: true, name: 'Mode', strokeColor: '#44c', fillColor: '#44c', visible: false});

							var unirp1 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp2 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp3 = unijsx.create('point', [0, 0], {visible: false, fixed: true});
							var unirp4 = unijsx.create('point', [0, 0], {visible: false, fixed: true});

							unirange = unijsx.createElement('polygon', [unirp1, unirp2, unirp3, unirp4], {fixed: true, strokeColor: '#44c', fillColor: '#44c', visible: false});

							unijsx.on('update', function() {
								if (unisample.Value() > points.length) {
									for(var i = points.length; i<unisample.Value(); i++) {
										points[i] = unijsx.createElement('point', [Math.round(Math.random() * 16) - 8, Math.round(Math.random() * 16) - 8], {fixed: true, withLabel: false, strokeColor: 'black', fillColor: 'black', size: 1});
									}
								} else if (unisample.Value() < points.length) {
									for(var i = points.length - 1; i>=unisample.Value(); i--) {
										points.pop().remove();
									}
								}

								if(points.length > 1) {
									var xa = getXArray(points);
									var xmin = Math.min.apply(Math, xa);
									var xmax = Math.max.apply(Math, xa);
									var ya = getYArray(points);
									var ymin = Math.min.apply(Math, ya);
									var ymax = Math.max.apply(Math, ya);
									unirp1.setPosition(JXG.COORDS_BY_USER, [xmin, ymin]);
									unirp2.setPosition(JXG.COORDS_BY_USER, [xmin, ymax]);
									unirp3.setPosition(JXG.COORDS_BY_USER, [xmax, ymax]);
									unirp4.setPosition(JXG.COORDS_BY_USER, [xmax, ymin]);
								} else {
									unirp1.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp2.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp3.setPosition(JXG.COORDS_BY_USER, [0, 0]);
									unirp4.setPosition(JXG.COORDS_BY_USER, [0, 0]);
								}

							});

							unijsx.on('mousemove', function(e) {
								var mPos = unijsx.getUsrCoordsOfMouse(e);
								$('#unimousepos').text(mPos[0].toFixed(2) + ', ' + mPos[1].toFixed(2));
							});

							unijsx.update();
						}

						initUni2D();

						function initUni1D() {
							var points = [];
							$( "#uni1dslider" ).slider({
								range: "min",
								min: 0,
								max: 200,
								value: 0,
								slide: function( event, ui ) {
									$( "#uni1dsample" ).text(ui.value);
									if (ui.value > points.length) {
										for(var i = points.length; i<ui.value; i++) {
											points[i] = Math.round(Math.random() * 10);
										}
									} else if (ui.value < points.length) {
										for(var i = points.length - 1; i>=ui.value; i--) {
											points.pop();
										}
									}
									uniplot.series[0].data = _.zip([0,1,2,3,4,5,6,7,8,9,10], uniRenderer()[0]);
									if(points.length > 0) {
										pointsCopy = points.slice(0); // Use a copy of points to avoid them getting sorted during averaging
										var min =  Math.min.apply(Math, pointsCopy);
										var max =  Math.max.apply(Math, pointsCopy);
										uniplot.series[1].data = _.zip([mean(pointsCopy), mean(pointsCopy)], [33, "mean"]);
										uniplot.series[2].data = _.zip([median(pointsCopy), median(pointsCopy)], [39, "median"]);
										uniplot.series[3].data = _.zip([mode(pointsCopy)[0], mode(pointsCopy)[0]], [45, "mode"]);
										uniplot.series[4].data = _.zip([min, max, max], [51, "range", 51]);
									} else {
										uniplot.series[1].data = _.zip([0], [33]);
										uniplot.series[2].data = _.zip([0], [39]);
										uniplot.series[3].data = _.zip([0], [45]);
										uniplot.series[4].data = _.zip([0,0], [51,51]);
									}
									uniplot.replot();
								}
							});

							var uniRenderer = function() {
								var data = [[0,0,0,0,0,0,0,0,0,0,0], [33], [39], [45], [51,51]];
								for (var i=0; i<points.length; i++) {
									data[0][points[i]] = data[0][points[i]] + 1;
								}
								return data;
							};

							uniplot = $.jqplot('uniplot',[],{
								dataRenderer: uniRenderer,
								series: [
									{
										renderer: $.jqplot.BarRenderer,
										rendererOptions: {
											barWidth: 25
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['mean'],
											location: 's',
											ypadding: 3
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['median'],
											location: 's',
											ypadding: 3
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['mode'],
											location: 's',
											ypadding: 3
										}
									},
									{
										renderer: $.jqplot.LineRenderer,
										showMarker: true,
										show: false,
										pointLabels: {
											show: true,
											labels: ['range'],
											location: 's',
											ypadding: 3
										}
									}
								],
								axes: {
									xaxis: {
										renderer: $.jqplot.CategoryAxisRenderer,
										min: -1,
										max: 11,
										numberTicks: 13
									},
									yaxis: {
										min: 0,
										max: 100
									}
								},
							});
						}

						initUni1D();
					</script>

					<br /><br />
				</div>

				<div style='clear: both;'>
					<h2 id='normal'>Normal Distribution</h2>

					<br />

					<p>The graph below shows a random population of integers with a normal distribution. Use the slider at the top to control the sample size. Select the tools on the left to display different properties of this population.</p>
{'fraction_non_alphanumeric': 0.18360181743081372, 'fraction_numerical': 0.01875258157786039, 'mean_word_length': 2.627659574468085, 'pattern_counts': {'":': 0, '<': 225, '<?xml version=': 0, '>': 227, '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': '2461629', 'n_tokens_mistral': 11634, 'n_tokens_neox': 7935, 'n_words': 1591}