rapids/1.0/datastreams/aware-csv/index.html

3082 lines
71 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://www.rapids.science/datastreams/aware-csv/">
<link rel="icon" href="../../img/logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.7+insiders-2.4.0">
<title>aware_csv - RAPIDS</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.ec3b3678.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.de2705de.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../stylesheets/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="blue">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<script>var palette=__get("__palette");if(null!==palette&&"object"==typeof palette.color)for(var key in palette.color)document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#aware_csv" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-component="outdated" hidden>
<aside class="md-banner md-banner--warning">
<div class="md-banner__inner md-grid md-typeset">
You're not viewing the latest stable version of RAPIDS.
<a href="https://www.rapids.science/">
<strong> Click here to go to latest. </strong>
</a>
</div>
<script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script>
</aside>
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="RAPIDS" class="md-header__button md-logo" aria-label="RAPIDS" data-md-component="logo">
<img src="../../img/logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
RAPIDS
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
aware_csv
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="blue" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue" data-md-color-accent="blue" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 10a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2 2 2 0 0 1 2-2m10-3a5 5 0 0 1 5 5 5 5 0 0 1-5 5H7a5 5 0 0 1-5-5 5 5 0 0 1 5-5h10M7 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3h10a3 3 0 0 0 3-3 3 3 0 0 0-3-3H7z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/carissalow/rapids/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
carissalow/rapids
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="RAPIDS" class="md-nav__button md-logo" aria-label="RAPIDS" data-md-component="logo">
<img src="../../img/logo.png" alt="logo">
</a>
RAPIDS
</label>
<div class="md-nav__source">
<a href="https://github.com/carissalow/rapids/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
carissalow/rapids
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
Setup
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Setup" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Setup
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../../workflow-examples/minimal/" class="md-nav__link">
Minimal Example
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/installation/" class="md-nav__link">
Installation
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/configuration/" class="md-nav__link">
Configuration
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/execution/" class="md-nav__link">
Execution
</a>
</li>
<li class="md-nav__item">
<a href="../../citation/" class="md-nav__link">
Citation
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3">
Data Streams
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Data Streams" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Data Streams
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../data-streams-introduction/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3_2" type="checkbox" id="__nav_3_2" checked>
<label class="md-nav__link" for="__nav_3_2">
Phone
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Phone" data-md-level="2">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Phone
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../aware-mysql/" class="md-nav__link">
aware_mysql
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
aware_csv
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
aware_csv
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#container" class="md-nav__link">
Container
</a>
</li>
<li class="md-nav__item">
<a href="#format" class="md-nav__link">
Format
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../aware-influxdb/" class="md-nav__link">
aware_influxdb (beta)
</a>
</li>
<li class="md-nav__item">
<a href="../mandatory-phone-format/" class="md-nav__link">
Mandatory Phone Format
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3_3" type="checkbox" id="__nav_3_3" >
<label class="md-nav__link" for="__nav_3_3">
Fitbit
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Fitbit" data-md-level="2">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Fitbit
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../fitbitjson-mysql/" class="md-nav__link">
fitbitjson_mysql
</a>
</li>
<li class="md-nav__item">
<a href="../fitbitjson-csv/" class="md-nav__link">
fitbitjson_csv
</a>
</li>
<li class="md-nav__item">
<a href="../fitbitparsed-mysql/" class="md-nav__link">
fitbitparsed_mysql
</a>
</li>
<li class="md-nav__item">
<a href="../fitbitparsed-csv/" class="md-nav__link">
fitbitparsed_csv
</a>
</li>
<li class="md-nav__item">
<a href="../mandatory-fitbit-format/" class="md-nav__link">
Mandatory Fitbit Format
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3_4" type="checkbox" id="__nav_3_4" >
<label class="md-nav__link" for="__nav_3_4">
Empatica
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Empatica" data-md-level="2">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
Empatica
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../empatica-zip/" class="md-nav__link">
empatica_zip
</a>
</li>
<li class="md-nav__item">
<a href="../mandatory-empatica-format/" class="md-nav__link">
Mandatory Empatica Format
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../add-new-data-streams/" class="md-nav__link">
Add New Data Streams
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Behavioral Features
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Behavioral Features" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Behavioral Features
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../features/feature-introduction/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_2" type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_2">
Phone
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Phone" data-md-level="2">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Phone
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../features/phone-accelerometer/" class="md-nav__link">
Phone Accelerometer
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-activity-recognition/" class="md-nav__link">
Phone Activity Recognition
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-applications-crashes/" class="md-nav__link">
Phone Applications Crashes
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-applications-foreground/" class="md-nav__link">
Phone Applications Foreground
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-applications-notifications/" class="md-nav__link">
Phone Applications Notifications
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-battery/" class="md-nav__link">
Phone Battery
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-bluetooth/" class="md-nav__link">
Phone Bluetooth
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-calls/" class="md-nav__link">
Phone Calls
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-conversation/" class="md-nav__link">
Phone Conversation
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-data-yield/" class="md-nav__link">
Phone Data Yield
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-keyboard/" class="md-nav__link">
Phone Keyboard
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-light/" class="md-nav__link">
Phone Light
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-locations/" class="md-nav__link">
Phone Locations
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-log/" class="md-nav__link">
Phone Log
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-messages/" class="md-nav__link">
Phone Messages
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-screen/" class="md-nav__link">
Phone Screen
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-wifi-connected/" class="md-nav__link">
Phone WiFI Connected
</a>
</li>
<li class="md-nav__item">
<a href="../../features/phone-wifi-visible/" class="md-nav__link">
Phone WiFI Visible
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3">
Fitbit
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Fitbit" data-md-level="2">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Fitbit
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../features/fitbit-data-yield/" class="md-nav__link">
Fitbit Data Yield
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-heartrate-summary/" class="md-nav__link">
Fitbit Heart Rate Summary
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-heartrate-intraday/" class="md-nav__link">
Fitbit Heart Rate Intraday
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-sleep-summary/" class="md-nav__link">
Fitbit Sleep Summary
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-sleep-intraday/" class="md-nav__link">
Fitbit Sleep Intraday
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-steps-summary/" class="md-nav__link">
Fitbit Steps Summary
</a>
</li>
<li class="md-nav__item">
<a href="../../features/fitbit-steps-intraday/" class="md-nav__link">
Fitbit Steps Intraday
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_4" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_4">
Empatica
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Empatica" data-md-level="2">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Empatica
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../features/empatica-accelerometer/" class="md-nav__link">
Empatica Accelerometer
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-heartrate/" class="md-nav__link">
Empatica Heart Rate
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-temperature/" class="md-nav__link">
Empatica Temperature
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-electrodermal-activity/" class="md-nav__link">
Empatica Electrodermal Activity
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-blood-volume-pulse/" class="md-nav__link">
Empatica Blood Volume Pulse
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-inter-beat-interval/" class="md-nav__link">
Empatica Inter Beat Interval
</a>
</li>
<li class="md-nav__item">
<a href="../../features/empatica-tags/" class="md-nav__link">
Empatica Tags
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../features/add-new-features/" class="md-nav__link">
Add New Features
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5">
Visualizations
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Visualizations" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Visualizations
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../visualizations/data-quality-visualizations/" class="md-nav__link">
Data Quality
</a>
</li>
<li class="md-nav__item">
<a href="../../visualizations/feature-visualizations/" class="md-nav__link">
Features
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6">
Analysis Workflows
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Analysis Workflows" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Analysis Workflows
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../workflow-examples/analysis/" class="md-nav__link">
Complete Example
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7">
Developers
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Developers" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Developers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../developers/git-flow/" class="md-nav__link">
Git Flow
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/remote-support/" class="md-nav__link">
Remote Support
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/virtual-environments/" class="md-nav__link">
Virtual Environments
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/documentation/" class="md-nav__link">
Documentation
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/testing/" class="md-nav__link">
Testing
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/test-cases/" class="md-nav__link">
Test cases
</a>
</li>
<li class="md-nav__item">
<a href="../../developers/validation-schema-config/" class="md-nav__link">
Validation schema of config.yaml
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_8" type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8">
Others
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Others" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Others
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../migrating-from-old-versions/" class="md-nav__link">
Migrating from an old version
</a>
</li>
<li class="md-nav__item">
<a href="../../code_of_conduct/" class="md-nav__link">
Code of Conduct
</a>
</li>
<li class="md-nav__item">
<a href="../../common-errors/" class="md-nav__link">
Common Errors
</a>
</li>
<li class="md-nav__item">
<a href="../../team/" class="md-nav__link">
Team
</a>
</li>
<li class="md-nav__item">
<a href="../../change-log/" class="md-nav__link">
Change Log
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#container" class="md-nav__link">
Container
</a>
</li>
<li class="md-nav__item">
<a href="#format" class="md-nav__link">
Format
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/carissalow/rapids/edit/master/docs/datastreams/aware-csv.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="aware_csv"><code>aware_csv</code><a class="headerlink" href="#aware_csv" title="Permanent link">&para;</a></h1>
<p>This <a href="../../datastreams/data-streams-introduction">data stream</a> handles iOS and Android sensor data collected with the <a href="https://awareframework.com/">AWARE Framework</a> and stored in CSV files.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The CSV files have to use <code>,</code> as separator, <code>\</code> as escape character (do not escape <code>"</code> with <code>""</code>), and wrap any string columns with <code>"</code>.</p>
<p>See examples in the CSV files inside <a href="https://osf.io/wbg23/">rapids_example_csv.zip</a></p>
<details class="example"><summary>Example of a valid CSV file</summary><div class="highlight"><pre><span></span><code>&quot;_id&quot;,&quot;timestamp&quot;,&quot;device_id&quot;,&quot;activities&quot;,&quot;confidence&quot;,&quot;stationary&quot;,&quot;walking&quot;,&quot;running&quot;,&quot;automotive&quot;,&quot;cycling&quot;,&quot;unknown&quot;,&quot;label&quot;
1,1587528000000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;&quot;
2,1587528060000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
3,1587528120000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
4,1587528180000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
5,1587528240000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
6,1587528300000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
7,1587528360000,&quot;13dbc8a3-dae3-4834-823a-4bc96a7d459d&quot;,&quot;[\&quot;stationary\&quot;]&quot;,2,1,0,0,0,0,0,&quot;supplement&quot;
</code></pre></div>
</details>
</div>
<h2 id="container">Container<a class="headerlink" href="#container" title="Permanent link">&para;</a></h2>
<p>A CSV file per sensor, each containing the data for all participants. </p>
<p>The script to connect and download data from this container is at:
<div class="highlight"><pre><span></span><code>src/data/streams/aware_csv/container.R
</code></pre></div></p>
<h2 id="format">Format<a class="headerlink" href="#format" title="Permanent link">&para;</a></h2>
<p>If you collected sensor data with the vanilla (original) AWARE mobile clients, you shouldn&rsquo;t need to modify this format (described below). </p>
<p>Remember that a format maps and transforms columns in your raw data stream to the <a href="../mandatory-phone-format">mandatory columns RAPIDS needs</a>.</p>
<p>The yaml file that describes the format of this data stream is at:
<div class="highlight"><pre><span></span><code>src/data/streams/aware_csv/format.yaml
</code></pre></div></p>
<p>For some sensors, we need to transform iOS data into Android format; you can refer to <a href="../../datastreams/add-new-data-streams/#os-complex-mapping">OS complex mapping</a> for learn how this works.</p>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>The mappings in this stream (RAPIDS/Stream) are the same names because AWARE data was the first stream RAPIDS supported, meaning that it considers AWARE column names the default.</p>
</div>
<details class="info"><summary>PHONE_ACCELEROMETER</summary><div class="tabbed-set" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><label for="__tabbed_1_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>DOUBLE_VALUES_0</td>
<td>double_values_0</td>
</tr>
<tr>
<td>DOUBLE_VALUES_1</td>
<td>double_values_1</td>
</tr>
<tr>
<td>DOUBLE_VALUES_2</td>
<td>double_values_2</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><label for="__tabbed_1_2">IOS</label><div class="tabbed-content">
<p>Same as ANDROID</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_ACTIVITY_RECOGNITION</summary><div class="tabbed-set" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><label for="__tabbed_2_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>ACTIVITY_NAME</td>
<td>activity_name</td>
</tr>
<tr>
<td>ACTIVITY_TYPE</td>
<td>activity_type</td>
</tr>
<tr>
<td>CONFIDENCE</td>
<td>confidence</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><label for="__tabbed_2_2">IOS</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>ACTIVITY_NAME</td>
<td>FLAG_TO_MUTATE</td>
</tr>
<tr>
<td>ACTIVITY_TYPE</td>
<td>FLAG_TO_MUTATE</td>
</tr>
<tr>
<td>CONFIDENCE</td>
<td>FLAG_TO_MUTATE</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong></li>
</ul>
<table>
<thead>
<tr>
<th>Script column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>ACTIVITIES</td>
<td>activities</td>
</tr>
<tr>
<td>CONFIDENCE</td>
<td>confidence</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>SCRIPTS</strong></li>
</ul>
<div class="highlight"><pre><span></span><code>src/data/streams/mutations/phone/aware/activity_recogniton_ios_unification.R
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For RAPIDS columns of <code>ACTIVITY_NAME</code> and <code>ACTIVITY_TYPE</code>:</p>
<ul>
<li>if stream&rsquo;s <code>activities</code> field is automotive, set <code>ACTIVITY_NAME</code> = in_vehicle and <code>ACTIVITY_TYPE</code> = 0</li>
<li>if stream&rsquo;s <code>activities</code> field is cycling, set <code>ACTIVITY_NAME</code> = on_bicycle and <code>ACTIVITY_TYPE</code> = 1</li>
<li>if stream&rsquo;s <code>activities</code> field is walking, set <code>ACTIVITY_NAME</code> = walking and <code>ACTIVITY_TYPE</code> = 7</li>
<li>if stream&rsquo;s <code>activities</code> field is running, set <code>ACTIVITY_NAME</code> = running and <code>ACTIVITY_TYPE</code> = 8</li>
<li>if stream&rsquo;s <code>activities</code> field is stationary, set <code>ACTIVITY_NAME</code> = still and <code>ACTIVITY_TYPE</code> = 3</li>
<li>if stream&rsquo;s <code>activities</code> field is unknown, set <code>ACTIVITY_NAME</code> = unknown and <code>ACTIVITY_TYPE</code> = 4</li>
</ul>
<p>For RAPIDS <code>CONFIDENCE</code> column:</p>
<ul>
<li>if stream&rsquo;s <code>confidence</code> field is 0, set <code>CONFIDENCE</code> = 0</li>
<li>if stream&rsquo;s <code>confidence</code> field is 1, set <code>CONFIDENCE</code> = 50</li>
<li>if stream&rsquo;s <code>confidence</code> field is 2, set <code>CONFIDENCE</code> = 100</li>
</ul>
</div>
</div>
</div>
</details>
<details class="info"><summary>PHONE_APPLICATIONS_CRASHES</summary><div class="tabbed-set" data-tabs="3:2"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><label for="__tabbed_3_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>PACKAGE_NAME</td>
<td>package_name</td>
</tr>
<tr>
<td>APPLICATION_NAME</td>
<td>application_name</td>
</tr>
<tr>
<td>APPLICATION_VERSION</td>
<td>application_version</td>
</tr>
<tr>
<td>ERROR_SHORT</td>
<td>error_short</td>
</tr>
<tr>
<td>ERROR_LONG</td>
<td>error_long</td>
</tr>
<tr>
<td>ERROR_CONDITION</td>
<td>error_condition</td>
</tr>
<tr>
<td>IS_SYSTEM_APP</td>
<td>is_system_app</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><label for="__tabbed_3_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_APPLICATIONS_FOREGROUND</summary><div class="tabbed-set" data-tabs="4:2"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><label for="__tabbed_4_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>PACKAGE_NAME</td>
<td>package_name</td>
</tr>
<tr>
<td>APPLICATION_NAME</td>
<td>application_name</td>
</tr>
<tr>
<td>IS_SYSTEM_APP</td>
<td>is_system_app</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><label for="__tabbed_4_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_APPLICATIONS_NOTIFICATIONS</summary><div class="tabbed-set" data-tabs="5:2"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><label for="__tabbed_5_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>PACKAGE_NAME</td>
<td>package_name</td>
</tr>
<tr>
<td>APPLICATION_NAME</td>
<td>application_name</td>
</tr>
<tr>
<td>TEXT</td>
<td>text</td>
</tr>
<tr>
<td>SOUND</td>
<td>sound</td>
</tr>
<tr>
<td>VIBRATE</td>
<td>vibrate</td>
</tr>
<tr>
<td>DEFAULTS</td>
<td>defaults</td>
</tr>
<tr>
<td>FLAGS</td>
<td>flags</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><label for="__tabbed_5_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_BATTERY</summary><div class="tabbed-set" data-tabs="6:3"><input checked="checked" id="__tabbed_6_1" name="__tabbed_6" type="radio" /><label for="__tabbed_6_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>BATTERY_STATUS</td>
<td>battery_status</td>
</tr>
<tr>
<td>BATTERY_LEVEL</td>
<td>battery_level</td>
</tr>
<tr>
<td>BATTERY_SCALE</td>
<td>battery_scale</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_6_2" name="__tabbed_6" type="radio" /><label for="__tabbed_6_2">IOS Client V1</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>BATTERY_STATUS</td>
<td>FLAG_TO_MUTATE</td>
</tr>
<tr>
<td>BATTERY_LEVEL</td>
<td>battery_level</td>
</tr>
<tr>
<td>BATTERY_SCALE</td>
<td>battery_scale</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong></li>
</ul>
<table>
<thead>
<tr>
<th>Script column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>BATTERY_STATUS</td>
<td>battery_status</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>SCRIPTS</strong></li>
</ul>
<div class="highlight"><pre><span></span><code>src/data/streams/mutations/phone/aware/battery_ios_unification.R
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For RAPIDS <code>BATTERY_STATUS</code> column:</p>
<ul>
<li>if stream&rsquo;s <code>battery_status</code> field is 3, set <code>BATTERY_STATUS</code> = 5 (full status)</li>
<li>if stream&rsquo;s <code>battery_status</code> field is 1, set <code>BATTERY_STATUS</code> = 3 (discharge)</li>
</ul>
</div>
</div>
<input id="__tabbed_6_3" name="__tabbed_6" type="radio" /><label for="__tabbed_6_3">IOS Client V2</label><div class="tabbed-content">
<p>Same as ANDROID</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_BLUETOOTH</summary><div class="tabbed-set" data-tabs="7:2"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><label for="__tabbed_7_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>BT_ADDRESS</td>
<td>bt_address</td>
</tr>
<tr>
<td>BT_NAME</td>
<td>bt_name</td>
</tr>
<tr>
<td>BT_RSSI</td>
<td>bt_rssi</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><label for="__tabbed_7_2">IOS</label><div class="tabbed-content">
<p>Only old iOS versions supported this sensor (same mapping as Android).</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_CALLS</summary><div class="tabbed-set" data-tabs="8:2"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><label for="__tabbed_8_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>CALL_TYPE</td>
<td>call_type</td>
</tr>
<tr>
<td>CALL_DURATION</td>
<td>call_duration</td>
</tr>
<tr>
<td>TRACE</td>
<td>trace</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><label for="__tabbed_8_2">IOS</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>CALL_TYPE</td>
<td>FLAG_TO_MUTATE</td>
</tr>
<tr>
<td>CALL_DURATION</td>
<td>call_duration</td>
</tr>
<tr>
<td>TRACE</td>
<td>trace</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong></li>
</ul>
<table>
<thead>
<tr>
<th>Script column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>CALL_TYPE</td>
<td>call_type</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>SCRIPTS</strong></li>
</ul>
<div class="highlight"><pre><span></span><code>src/data/streams/mutations/phone/aware/calls_ios_unification.R
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>We transform iOS call logs into Android&rsquo;s format. iOS stores call status: 1=incoming, 2=connected, 3=dialing, 4=disconnected, as opposed to Android&rsquo;s events: 1=incoming, 2=outgoing, 3=missed. </p>
<p>We follow this algorithm to convert iOS call data (there are some inaccuracies in the way we handle sequences, see new rules below):</p>
<ul>
<li>Search for the disconnected (4) status as it is common to all calls</li>
<li>Group all events that preceded every status 4</li>
<li>We convert every 1,2,4 (or 2,1,4) sequence to an incoming call</li>
<li>We convert every 3,2,4 (or 2,3,4) sequence to an outgoing call</li>
<li>We convert every 1,4 or 3,4 sequence to a missed call (either incoming or outgoing)</li>
<li>We set the duration of the call to be the sum of every status (dialing/ringing to hangup) as opposed to the duration of the last status (pick up to hang up)</li>
</ul>
<p><strong>Tested with an Android (OnePlus 7T) and an iPhone XR</strong></p>
<table>
<thead>
<tr>
<th>Call type</th>
<th>Android (duration)</th>
<th>iOS (duration)</th>
<th>New Rule</th>
</tr>
</thead>
<tbody>
<tr>
<td>Outgoing missed ended by me</td>
<td>2 (0)</td>
<td>3,4 (0,X)</td>
<td>3,4 is converted to 2 with duration 0</td>
</tr>
<tr>
<td>Outgoing missed ended by them</td>
<td>2(0)</td>
<td>3,2,4 (0,X,X2)</td>
<td>3,2,4 is converted to 2 with duration X2*</td>
</tr>
<tr>
<td>Incoming missed ended by me</td>
<td>NA**</td>
<td>1,4 (0,X)</td>
<td>1,4 is converted to 3 with duration 0</td>
</tr>
<tr>
<td>Incoming missed ended by them</td>
<td>3(0)</td>
<td>1,4 (0,X)</td>
<td>1,4 is converted to 3 with duration 0</td>
</tr>
<tr>
<td>Outgoing answered</td>
<td>2(X excluding dialing time)</td>
<td>3,2,4 (0,X,X2)</td>
<td>3,2,4 is converted to 2 with duration X2</td>
</tr>
<tr>
<td>Incoming answered</td>
<td>1(X excluding dialing time)</td>
<td>1,2,4 (0,X,X2)</td>
<td>1,2,4 is converted to 1 with duration X2</td>
</tr>
</tbody>
</table>
<p>.* There is no way to differentiate an outgoing missed call ended by them from an outgoing answered call because the phone goes directly to voice mail and it counts as call time (essentially the voice mail answered).</p>
<p>.** Android does not record incoming missed calls ended by the participant, just those ended by the person calling or ignored by the participant.</p>
</div>
</div>
</div>
</details>
<details class="info"><summary>PHONE_CONVERSATION</summary><div class="tabbed-set" data-tabs="9:2"><input checked="checked" id="__tabbed_9_1" name="__tabbed_9" type="radio" /><label for="__tabbed_9_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>DOUBLE_ENERGY</td>
<td>double_energy</td>
</tr>
<tr>
<td>INFERENCE</td>
<td>inference</td>
</tr>
<tr>
<td>DOUBLE_CONVO_START</td>
<td>double_convo_start</td>
</tr>
<tr>
<td>DOUBLE_CONVO_END</td>
<td>double_convo_end</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_9_2" name="__tabbed_9" type="radio" /><label for="__tabbed_9_2">IOS</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>DOUBLE_ENERGY</td>
<td>double_energy</td>
</tr>
<tr>
<td>INFERENCE</td>
<td>inference</td>
</tr>
<tr>
<td>DOUBLE_CONVO_START</td>
<td>FLAG_TO_MUTATE</td>
</tr>
<tr>
<td>DOUBLE_CONVO_END</td>
<td>FLAG_TO_MUTATE</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong></li>
</ul>
<table>
<thead>
<tr>
<th>Script column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>DOUBLE_CONVO_START</td>
<td>double_convo_start</td>
</tr>
<tr>
<td>DOUBLE_CONVO_END</td>
<td>double_convo_end</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>SCRIPTS</strong></li>
</ul>
<div class="highlight"><pre><span></span><code>src/data/streams/mutations/phone/aware/conversation_ios_timestamp.R
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For RAPIDS columns of <code>DOUBLE_CONVO_START</code> and <code>DOUBLE_CONVO_END</code>:</p>
<ul>
<li>if stream&rsquo;s <code>double_convo_start</code> field is smaller than 9999999999, it is in seconds instead of milliseconds. Set <code>DOUBLE_CONVO_START</code> = 1000 * <code>double_convo_start</code>.</li>
<li>if stream&rsquo;s <code>double_convo_end</code> field is smaller than 9999999999, it is in seconds instead of milliseconds. Set <code>DOUBLE_CONVO_END</code> = 1000 * <code>double_convo_end</code>.</li>
</ul>
</div>
</div>
</div>
</details>
<details class="info"><summary>PHONE_KEYBOARD</summary><div class="tabbed-set" data-tabs="10:2"><input checked="checked" id="__tabbed_10_1" name="__tabbed_10" type="radio" /><label for="__tabbed_10_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>PACKAGE_NAME</td>
<td>package_name</td>
</tr>
<tr>
<td>BEFORE_TEXT</td>
<td>before_text</td>
</tr>
<tr>
<td>CURRENT_TEXT</td>
<td>current_text</td>
</tr>
<tr>
<td>IS_PASSWORD</td>
<td>is_password</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_10_2" name="__tabbed_10" type="radio" /><label for="__tabbed_10_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_LIGHT</summary><div class="tabbed-set" data-tabs="11:2"><input checked="checked" id="__tabbed_11_1" name="__tabbed_11" type="radio" /><label for="__tabbed_11_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>DOUBLE_LIGHT_LUX</td>
<td>double_light_lux</td>
</tr>
<tr>
<td>ACCURACY</td>
<td>accuracy</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_11_2" name="__tabbed_11" type="radio" /><label for="__tabbed_11_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_LOCATIONS</summary><div class="tabbed-set" data-tabs="12:2"><input checked="checked" id="__tabbed_12_1" name="__tabbed_12" type="radio" /><label for="__tabbed_12_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>DOUBLE_LATITUDE</td>
<td>double_latitude</td>
</tr>
<tr>
<td>DOUBLE_LONGITUDE</td>
<td>double_longitude</td>
</tr>
<tr>
<td>DOUBLE_BEARING</td>
<td>double_bearing</td>
</tr>
<tr>
<td>DOUBLE_SPEED</td>
<td>double_speed</td>
</tr>
<tr>
<td>DOUBLE_ALTITUDE</td>
<td>double_altitude</td>
</tr>
<tr>
<td>PROVIDER</td>
<td>provider</td>
</tr>
<tr>
<td>ACCURACY</td>
<td>accuracy</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_12_2" name="__tabbed_12" type="radio" /><label for="__tabbed_12_2">IOS</label><div class="tabbed-content">
<p>Same as ANDROID</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_LOG</summary><div class="tabbed-set" data-tabs="13:2"><input checked="checked" id="__tabbed_13_1" name="__tabbed_13" type="radio" /><label for="__tabbed_13_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>LOG_MESSAGE</td>
<td>log_message</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_13_2" name="__tabbed_13" type="radio" /><label for="__tabbed_13_2">IOS</label><div class="tabbed-content">
<p>Same as ANDROID</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_MESSAGES</summary><div class="tabbed-set" data-tabs="14:2"><input checked="checked" id="__tabbed_14_1" name="__tabbed_14" type="radio" /><label for="__tabbed_14_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>MESSAGE_TYPE</td>
<td>message_type</td>
</tr>
<tr>
<td>TRACE</td>
<td>trace</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_14_2" name="__tabbed_14" type="radio" /><label for="__tabbed_14_2">IOS</label><div class="tabbed-content">
<p>This sensor is not supported by iOS devices.</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_SCREEN</summary><div class="tabbed-set" data-tabs="15:2"><input checked="checked" id="__tabbed_15_1" name="__tabbed_15" type="radio" /><label for="__tabbed_15_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>SCREEN_STATUS</td>
<td>screen_status</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_15_2" name="__tabbed_15" type="radio" /><label for="__tabbed_15_2">IOS</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>SCREEN_STATUS</td>
<td>FLAG_TO_MUTATE</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong></li>
</ul>
<table>
<thead>
<tr>
<th>Script column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>SCREEN_STATUS</td>
<td>screen_status</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>SCRIPTS</strong></li>
</ul>
<div class="highlight"><pre><span></span><code>src/data/streams/mutations/phone/aware/screen_ios_unification.R
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For <code>SCREEN_STATUS</code> RAPIDS column:</p>
<ul>
<li>if stream&rsquo;s <code>screen_status</code> field is 2 (lock episode), set <code>SCREEN_STATUS</code> = 0 (off episode).</li>
</ul>
</div>
</div>
</div>
</details>
<details class="info"><summary>PHONE_WIFI_CONNECTED</summary><div class="tabbed-set" data-tabs="16:2"><input checked="checked" id="__tabbed_16_1" name="__tabbed_16" type="radio" /><label for="__tabbed_16_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>MAC_ADDRESS</td>
<td>mac_address</td>
</tr>
<tr>
<td>SSID</td>
<td>ssid</td>
</tr>
<tr>
<td>BSSID</td>
<td>bssid</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_16_2" name="__tabbed_16" type="radio" /><label for="__tabbed_16_2">IOS</label><div class="tabbed-content">
<p>Same as ANDROID</p>
</div>
</div>
</details>
<details class="info"><summary>PHONE_WIFI_VISIBLE</summary><div class="tabbed-set" data-tabs="17:2"><input checked="checked" id="__tabbed_17_1" name="__tabbed_17" type="radio" /><label for="__tabbed_17_1">ANDROID</label><div class="tabbed-content">
<p><strong>RAPIDS_COLUMN_MAPPINGS</strong></p>
<table>
<thead>
<tr>
<th>RAPIDS column</th>
<th>Stream column</th>
</tr>
</thead>
<tbody>
<tr>
<td>TIMESTAMP</td>
<td>timestamp</td>
</tr>
<tr>
<td>DEVICE_ID</td>
<td>device_id</td>
</tr>
<tr>
<td>SSID</td>
<td>ssid</td>
</tr>
<tr>
<td>BSSID</td>
<td>bssid</td>
</tr>
<tr>
<td>SECURITY</td>
<td>security</td>
</tr>
<tr>
<td>FREQUENCY</td>
<td>frequency</td>
</tr>
<tr>
<td>RSSI</td>
<td>rssi</td>
</tr>
</tbody>
</table>
<p><strong>MUTATION</strong></p>
<ul>
<li><strong>COLUMN_MAPPINGS</strong> (None)</li>
<li><strong>SCRIPTS</strong> (None)</li>
</ul>
</div>
<input id="__tabbed_17_2" name="__tabbed_17" type="radio" /><label for="__tabbed_17_2">IOS</label><div class="tabbed-content">
<p>Only old iOS versions supported this sensor (same mapping as Android).</p>
</div>
</div>
</details>
<!-- Add custom comment system integration here -->
<!-- Utterances integration -->
<h2 id="__comments">Comments</h2>
<script type="text/javascript">
var rapids_utterances_theme = false
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
// wait for utterances to load and send it's first message.
addEventListener('message', event => {
if (event.origin !== 'https://utteranc.es' || rapids_utterances_theme == true) {
return;
}
rapids_utterances_theme = true
if(document.body.getAttribute("data-md-color-scheme") == "default")
document.querySelector("iframe.utterances-frame").contentWindow.postMessage({ type: "set-theme", theme: "github-light" },"https://utteranc.es/")
else
document.querySelector("iframe.utterances-frame").contentWindow.postMessage({ type: "set-theme", theme: "photon-dark" },"https://utteranc.es/")
});
document.getElementById('__palette_1').onclick = function(){
document.querySelector("iframe.utterances-frame").contentWindow.postMessage({ type: "set-theme", theme: "github-light" },"https://utteranc.es/")
}
document.getElementById('__palette_2').onclick = function(){
document.querySelector("iframe.utterances-frame").contentWindow.postMessage({ type: "set-theme", theme: "photon-dark" },"https://utteranc.es/")
}
}
}
</script>
<script src="https://utteranc.es/client.js"
repo="carissalow/rapids"
issue-term="pathname"
label="docs comments"
theme="github-light"
crossorigin="anonymous"
async>
</script>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../aware-mysql/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
aware_mysql
</div>
</div>
</a>
<a href="../aware-influxdb/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
aware_influxdb (beta)
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Released under AGPL
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs Insiders
</a>
</div>
<div class="md-footer-social">
<a href="https://twitter.com/julio_ui" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "search.suggest", "search.highlight"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.d10a1f1d.min.js", "version": {"provider": "mike"}}</script>
<script src="../../assets/javascripts/bundle.9aafa2c6.min.js"></script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</body>
</html>