Copy disabled (too large)
Download .txt
Showing preview only (12,542K chars total). Download the full file to get everything.
Repository: microsoft/data-formulator
Branch: main
Commit: 676e7225c060
Files: 273
Total size: 11.9 MB
Directory structure:
gitextract_rufwyicb/
├── .devcontainer/
│ └── devcontainer.json
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── python-build.yml
├── .gitignore
├── .python-version
├── .vscode/
│ ├── launch.json
│ └── tasks.json
├── CODESPACES.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DEVELOPMENT.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── SECURITY.md
├── SUPPORT.md
├── embed/
│ ├── README.md
│ ├── dynamic.html
│ ├── index.html
│ └── postMessageTest.html
├── eslint.config.js
├── index.html
├── local_server.bat
├── local_server.sh
├── package.json
├── public/
│ ├── df_gas_prices.json
│ ├── df_global_energy.json
│ ├── df_movies.json
│ ├── df_stock_prices_live.json
│ ├── df_unemployment.json
│ ├── manifest.json
│ └── robots.txt
├── py-src/
│ └── data_formulator/
│ ├── __init__.py
│ ├── __main__.py
│ ├── agent_routes.py
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── agent_chart_insight.py
│ │ ├── agent_code_explanation.py
│ │ ├── agent_data_clean_stream.py
│ │ ├── agent_data_load.py
│ │ ├── agent_data_rec.py
│ │ ├── agent_data_transform.py
│ │ ├── agent_interactive_explore.py
│ │ ├── agent_report_gen.py
│ │ ├── agent_sort_data.py
│ │ ├── agent_utils.py
│ │ ├── agent_utils_sql.py
│ │ ├── client_utils.py
│ │ ├── data_agent.py
│ │ ├── semantic_types.py
│ │ └── web_utils.py
│ ├── app.py
│ ├── auth.py
│ ├── code_signing.py
│ ├── data_loader/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── athena_data_loader.py
│ │ ├── azure_blob_data_loader.py
│ │ ├── bigquery_data_loader.py
│ │ ├── external_data_loader.py
│ │ ├── kusto_data_loader.py
│ │ ├── mongodb_data_loader.py
│ │ ├── mssql_data_loader.py
│ │ ├── mysql_data_loader.py
│ │ ├── postgresql_data_loader.py
│ │ └── s3_data_loader.py
│ ├── datalake/
│ │ ├── __init__.py
│ │ ├── azure_blob_workspace.py
│ │ ├── cache_manager.py
│ │ ├── cached_azure_blob_workspace.py
│ │ ├── file_manager.py
│ │ ├── metadata.py
│ │ ├── parquet_utils.py
│ │ └── workspace.py
│ ├── demo_stream_routes.py
│ ├── example_datasets_config.py
│ ├── sandbox/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── docker_sandbox.py
│ │ ├── local_sandbox.py
│ │ └── not_a_sandbox.py
│ ├── session_routes.py
│ ├── tables_routes.py
│ ├── workflows/
│ │ ├── __init__.py
│ │ ├── chart_semantics.py
│ │ └── create_vl_plots.py
│ └── workspace_factory.py
├── pyproject.toml
├── requirements.txt
├── src/
│ ├── app/
│ │ ├── App.tsx
│ │ ├── chartCache.ts
│ │ ├── chartRecommendation.ts
│ │ ├── dfSlice.tsx
│ │ ├── identity.ts
│ │ ├── store.ts
│ │ ├── tableThunks.ts
│ │ ├── tokens.ts
│ │ ├── useDataRefresh.tsx
│ │ ├── useFormulateData.ts
│ │ └── utils.tsx
│ ├── assets/
│ │ └── icon-design.md
│ ├── components/
│ │ ├── ChartTemplates.tsx
│ │ ├── ComponentType.tsx
│ │ ├── FunComponents.tsx
│ │ ├── RotatingTextBlock.tsx
│ │ └── chartUtils.ts
│ ├── data/
│ │ ├── column.ts
│ │ ├── table.ts
│ │ ├── types.ts
│ │ └── utils.ts
│ ├── icons.tsx
│ ├── index.css
│ ├── index.tsx
│ ├── lib/
│ │ └── agents-chart/
│ │ ├── README.md
│ │ ├── chartjs/
│ │ │ ├── README.md
│ │ │ ├── assemble.ts
│ │ │ ├── index.ts
│ │ │ ├── instantiate-spec.ts
│ │ │ ├── recommendation.ts
│ │ │ └── templates/
│ │ │ ├── area.ts
│ │ │ ├── bar.ts
│ │ │ ├── histogram.ts
│ │ │ ├── index.ts
│ │ │ ├── line.ts
│ │ │ ├── pie.ts
│ │ │ ├── radar.ts
│ │ │ ├── rose.ts
│ │ │ ├── scatter.ts
│ │ │ └── utils.ts
│ │ ├── core/
│ │ │ ├── compute-layout.ts
│ │ │ ├── decisions.ts
│ │ │ ├── field-semantics.ts
│ │ │ ├── filter-overflow.ts
│ │ │ ├── index.ts
│ │ │ ├── recommendation.ts
│ │ │ ├── resolve-semantics.ts
│ │ │ ├── semantic-types.ts
│ │ │ ├── type-registry.ts
│ │ │ └── types.ts
│ │ ├── docs/
│ │ │ ├── README.md
│ │ │ ├── design-semantics.md
│ │ │ ├── design-stretch-model.md
│ │ │ └── test_plan.md
│ │ ├── echarts/
│ │ │ ├── README.md
│ │ │ ├── assemble.ts
│ │ │ ├── facet.ts
│ │ │ ├── index.ts
│ │ │ ├── instantiate-spec.ts
│ │ │ ├── recommendation.ts
│ │ │ └── templates/
│ │ │ ├── area.ts
│ │ │ ├── bar.ts
│ │ │ ├── boxplot.ts
│ │ │ ├── candlestick.ts
│ │ │ ├── density.ts
│ │ │ ├── funnel.ts
│ │ │ ├── gauge.ts
│ │ │ ├── heatmap.ts
│ │ │ ├── histogram.ts
│ │ │ ├── index.ts
│ │ │ ├── jitter.ts
│ │ │ ├── line.ts
│ │ │ ├── lollipop.ts
│ │ │ ├── pie.ts
│ │ │ ├── pyramid.ts
│ │ │ ├── radar.ts
│ │ │ ├── ranged-dot.ts
│ │ │ ├── rose.ts
│ │ │ ├── sankey.ts
│ │ │ ├── scatter.ts
│ │ │ ├── streamgraph.ts
│ │ │ ├── sunburst.ts
│ │ │ ├── treemap.ts
│ │ │ ├── utils.ts
│ │ │ └── waterfall.ts
│ │ ├── gofish/
│ │ │ ├── README.md
│ │ │ ├── assemble.ts
│ │ │ ├── index.ts
│ │ │ ├── recommendation.ts
│ │ │ └── templates/
│ │ │ ├── area.ts
│ │ │ ├── bar.ts
│ │ │ ├── index.ts
│ │ │ ├── line.ts
│ │ │ ├── pie.ts
│ │ │ ├── scatter.ts
│ │ │ ├── scatterpie.ts
│ │ │ └── utils.ts
│ │ ├── index.ts
│ │ ├── test-data/
│ │ │ ├── area-tests.ts
│ │ │ ├── bar-tests.ts
│ │ │ ├── chartjs-tests.ts
│ │ │ ├── date-tests.ts
│ │ │ ├── debug-tests.ts
│ │ │ ├── discrete-axis-tests.ts
│ │ │ ├── distribution-tests.ts
│ │ │ ├── echarts-tests.ts
│ │ │ ├── facet-tests.ts
│ │ │ ├── gas-pressure-tests.ts
│ │ │ ├── generators.ts
│ │ │ ├── gofish-tests.ts
│ │ │ ├── index.ts
│ │ │ ├── line-area-stretch-tests.ts
│ │ │ ├── line-area-tests.ts
│ │ │ ├── line-tests.ts
│ │ │ ├── scatter-tests.ts
│ │ │ ├── semantic-tests.ts
│ │ │ ├── specialized-tests.ts
│ │ │ ├── stress-tests.ts
│ │ │ └── types.ts
│ │ └── vegalite/
│ │ ├── README.md
│ │ ├── assemble.ts
│ │ ├── index.ts
│ │ ├── instantiate-spec.ts
│ │ ├── recommendation.ts
│ │ └── templates/
│ │ ├── area.ts
│ │ ├── bar.ts
│ │ ├── bump.ts
│ │ ├── candlestick.ts
│ │ ├── custom.ts
│ │ ├── density.ts
│ │ ├── index.ts
│ │ ├── jitter.ts
│ │ ├── line.ts
│ │ ├── lollipop.ts
│ │ ├── map.ts
│ │ ├── pie.ts
│ │ ├── radar.ts
│ │ ├── rose.ts
│ │ ├── scatter.ts
│ │ ├── utils.ts
│ │ └── waterfall.ts
│ ├── scss/
│ │ ├── App.scss
│ │ ├── DataView.scss
│ │ ├── DraggableCard.scss
│ │ ├── EncodingShelf.scss
│ │ └── VisualizationView.scss
│ ├── types.d.ts
│ └── views/
│ ├── About.tsx
│ ├── AgentRulesDialog.tsx
│ ├── ChartGallery.tsx
│ ├── ChartRecBox.tsx
│ ├── ChartRenderService.tsx
│ ├── ChartifactDialog.tsx
│ ├── ChatDialog.tsx
│ ├── ChatThreadView.tsx
│ ├── DBTableManager.tsx
│ ├── DataFormulator.tsx
│ ├── DataLoadingChat.tsx
│ ├── DataLoadingThread.tsx
│ ├── DataThread.tsx
│ ├── DataThreadCards.tsx
│ ├── DataView.tsx
│ ├── EncodingBox.tsx
│ ├── EncodingShelfCard.tsx
│ ├── EncodingShelfThread.tsx
│ ├── ExampleSessions.tsx
│ ├── ExplComponents.tsx
│ ├── MessageSnackbar.tsx
│ ├── ModelSelectionDialog.tsx
│ ├── MultiTablePreview.tsx
│ ├── OperatorCard.tsx
│ ├── ReactTable.tsx
│ ├── RefreshDataDialog.tsx
│ ├── ReportView.tsx
│ ├── SelectableDataGrid.tsx
│ ├── SimpleChartRecBox.tsx
│ ├── TableSelectionView.tsx
│ ├── TestPanel.tsx
│ ├── UnifiedDataUploadDialog.tsx
│ ├── ViewUtils.tsx
│ ├── VisualizationView.tsx
│ └── useFormulateData.ts
├── tsconfig.json
└── vite.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/python
{
"name": "Data Formulator Dev",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye",
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "18"
},
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/astral-sh/uv:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [5000, 5173],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "cd /workspaces/data-formulator && npm install && npm run build && uv sync && uv run data_formulator"
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for more information:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
# https://containers.dev/guide/dependabot
version: 2
updates:
- package-ecosystem: "devcontainers"
directory: "/"
schedule:
interval: weekly
================================================
FILE: .github/workflows/python-build.yml
================================================
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
name: build
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Global permissions required for OIDC authentication
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- name: Set up uv
uses: astral-sh/setup-uv@v4
with:
python-version: 3.12
- name: Install node dependencies
run: yarn install
- name: Build frontend
run: yarn build
- name: Build python artifact
run: uv build
- name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: release-dist
path: dist
pypi-publish:
runs-on: ubuntu-latest
needs:
- build
if: github.event_name == 'push' && contains(github.event.head_commit.message, '[deploy]')
environment:
name: pypi
url: https://pypi.org/p/data-formulator
permissions:
id-token: write
steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v4
with:
name: release-dist
path: dist/
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
================================================
FILE: .gitignore
================================================
*env
.venv/
.env
**/*.ipynb_checkpoints/
.DS_Store
build/
dist/
experiment_data/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
venv
\.\NUL
NUL
================================================
FILE: .python-version
================================================
3.11
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"name": "Flask",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/py-src/data_formulator/app.py",
"args": ["run", "--no-debugger", "--no-reload"],
"env": {
"FLASK_APP": "app.py",
"FLASK_ENV": "development",
"FLASK_RUN_PORT": "5000",
"FLASK_RUN_HOST": "0.0.0.0"
},
"preLaunchTask": "Activate Virtual Environment",
}
]
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"label": "Activate Virtual Environment",
"type": "shell",
"command": "source /workspaces/data-formulator/venv/bin/activate",
"problemMatcher": [],
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "new"
}
}
]
}
================================================
FILE: CODESPACES.md
================================================
# Set up Data Formulator on Codespaces
Use a preconfigured Codespace to get Data Formulator up and running quickly.
## Prerequisites
You will need a GitHub account and to be logged in to use Codespaces.
### Step 1: Create a Codespace (~5 minutes)
[](https://codespaces.new/microsoft/data-formulator?quickstart=1)
<kbd>
<img width="400" alt="image" src="https://github.com/user-attachments/assets/868d104f-c6e8-4b17-9963-f0d3e9270ea6">
</kbd>
### Step 2: Run the app
The codespace is a VSCode development environment in the cloud. Once the Codespace is created, start Data Formuator with the following steps:
* A toast about port forwarding will appear, click the **Open in Browser** button.
* You will see the Data Formulator app!
<kbd>
<img width="528" alt="image" src="https://github.com/user-attachments/assets/cb9e2123-4a42-4926-8b59-5bafb9be25fa">
</kbd>
### Usage
See the [Usage section on the README.md page](README.md#usage).
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Microsoft Open Source Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
Resources:
- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
This project welcomes contributions and suggestions. Most contributions require you to
agree to a Contributor License Agreement (CLA) declaring that you have the right to,
and actually do, grant us the rights to use your contribution. For details, visit
https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need
to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the
instructions provided by the bot. You will only need to do this once across all repositories using our CLA.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
================================================
FILE: DEVELOPMENT.md
================================================
# Set up a local Data Formulator development environment
How to set up your local machine.
## Prerequisites
* Python >= 3.11
* Node.js
* Yarn
* [uv](https://docs.astral.sh/uv/) (recommended) or pip
## Backend (Python)
### Option 1: With uv (recommended)
uv is faster and provides reproducible builds via lockfile.
```bash
uv sync # Creates .venv and installs all dependencies
uv run data_formulator # Run app (opens browser automatically)
uv run data_formulator --dev # Run backend only (for frontend development)
```
**Which command to use:**
- **End users / testing the full app**: `uv run data_formulator` - starts server and opens browser to http://localhost:5567
- **Frontend development**: `uv run data_formulator --dev` - starts backend server only, then run `yarn start` separately for the Vite dev server on http://localhost:5173
### Option 2: With pip (fallback)
- **Create a Virtual Environment**
```bash
python -m venv venv
source venv/bin/activate # Unix
# or .\venv\Scripts\activate # Windows
```
- **Install Dependencies**
```bash
pip install -r requirements.txt
```
- **Configure environment variables (optional)**
- copy `.env.template` to `.env` and fill in your values:
- **API keys**: set `{PROVIDER}_ENABLED=true`, `{PROVIDER}_API_KEY=...`, and `{PROVIDER}_MODELS=...` for each LLM provider you want to use. See the [LiteLLM setup](https://docs.litellm.ai/docs#litellm-python-sdk) guide for provider-specific fields.
- **Server settings**: `DISABLE_DISPLAY_KEYS`, `SANDBOX`, etc.
- **Azure Blob workspace** (optional): see [Azure Blob Storage Workspace](#azure-blob-storage-workspace) below.
- this lets Data Formulator automatically load API keys at startup so you don't need to enter them in the UI.
- **Run the app**
```bash
# Unix
./local_server.sh
# Windows
.\local_server.bat
# Or directly
data_formulator # Opens browser automatically
data_formulator --dev # Backend only (for frontend development)
```
## Frontend (TypeScript)
- **Install NPM packages**
```bash
yarn
```
- **Development mode**
First, start the backend server (in a separate terminal):
```bash
uv run data_formulator --dev # or ./local_server.sh
```
Then, run the frontend in development mode with hot reloading:
```bash
yarn start
```
Open [http://localhost:5173](http://localhost:5173) to view it in the browser.
The page will reload if you make edits. You will also see any lint errors in the console.
## Build for Production
- **Build the frontend and then the backend**
Compile the TypeScript files and bundle the project:
```bash
yarn build
```
This builds the app for production to the `py-src/data_formulator/dist` folder.
Then, build python package:
```bash
# With uv
uv build
# Or with pip
pip install build
python -m build
```
This will create a python wheel in the `dist/` folder. The name would be `data_formulator-<version>-py3-none-any.whl`
- **Test the artifact**
You can then install the build result wheel (testing in a virtual environment is recommended):
```bash
# replace <version> with the actual build version.
pip install dist/data_formulator-<version>-py3-none-any.whl
```
Once installed, you can run Data Formulator with:
```bash
data_formulator
```
or
```bash
python -m data_formulator
```
Open [http://localhost:5567](http://localhost:5567) to view it in the browser.
## Sandbox
AI-generated Python code runs inside a **sandbox** to isolate it from the main server process. Two backends are available:
| Backend | Flag | How it works | Overhead |
|---------|------|--------------|----------|
| **local** (default) | `--sandbox local` | Persistent warm subprocess with pre-imported pandas/numpy/duckdb. Audit hooks block file writes and dangerous operations (subprocess, shutil, etc.). | ~1 ms |
| **docker** | `--sandbox docker` | Each execution runs in a disposable `docker run --rm` container. Workspace is mounted read-only; output is returned via a bind-mounted parquet file. Memory/CPU/PID limits enforced. | ~700 ms |
```bash
# Use the default local sandbox
python -m data_formulator
# Use Docker sandbox (requires Docker daemon)
python -m data_formulator --sandbox docker
```
The Docker sandbox image is built from `py-src/data_formulator/sandbox/Dockerfile.sandbox`:
```bash
docker build -t data-formulator-sandbox -f py-src/data_formulator/sandbox/Dockerfile.sandbox .
```
Source: [`py-src/data_formulator/sandbox/`](py-src/data_formulator/sandbox/)
## Azure Blob Storage Workspace
By default, workspace data (uploaded files, parquet tables, metadata) is stored on the **local filesystem** under `~/.data_formulator/workspaces/`. For cloud deployments you can switch to **Azure Blob Storage** so all workspace data lives in a blob container instead.
### Quick start (local dev with connection string)
1. **Install extra dependencies:**
```bash
pip install azure-storage-blob
# or with uv:
uv pip install azure-storage-blob
```
2. **Create a storage account & container** (one-time setup):
```bash
az storage account create -n <account> -g <resource-group> -l eastus --sku Standard_LRS
az storage container create -n data-formulator --account-name <account>
```
3. **Get the connection string:**
```bash
az storage account show-connection-string -n <account> -g <resource-group> -o tsv
```
4. **Add to `.env`:**
```env
WORKSPACE_BACKEND=azure_blob
AZURE_BLOB_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
# AZURE_BLOB_CONTAINER=data-formulator # default, change if needed
```
5. **Run normally:**
```bash
uv run data_formulator --dev
```
Or pass as CLI flags:
```bash
data_formulator --workspace-backend azure_blob \
--azure-blob-connection-string "DefaultEndpointsProtocol=https;AccountName=..."
```
### Production setup with Entra ID (no secrets)
In production (Azure App Service, AKS, etc.) you can authenticate the app to blob storage via **Managed Identity** instead of a connection string. This eliminates secrets entirely.
1. **Install extra dependencies:**
```bash
pip install azure-storage-blob azure-identity
```
2. **Assign a role to the app's Managed Identity:**
```bash
# Get the App Service's principal ID
PRINCIPAL_ID=$(az webapp identity show -n <app-name> -g <rg> --query principalId -o tsv)
# Grant it "Storage Blob Data Contributor" on the storage account
az role assignment create \
--assignee "$PRINCIPAL_ID" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<account>"
```
3. **Set environment variables** (no secrets needed):
```env
WORKSPACE_BACKEND=azure_blob
AZURE_BLOB_ACCOUNT_URL=https://<account>.blob.core.windows.net
# AZURE_BLOB_CONTAINER=data-formulator
```
The app uses [`DefaultAzureCredential`](https://learn.microsoft.com/python/api/azure-identity/azure.identity.defaultazurecredential), which automatically picks up the Managed Identity.
4. **For local development** with the same Entra ID path, log in with the Azure CLI:
```bash
az login
# Grant your user the same "Storage Blob Data Contributor" role
az role assignment create \
--assignee "<your-email@example.com>" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<account>"
```
Then set:
```env
WORKSPACE_BACKEND=azure_blob
AZURE_BLOB_ACCOUNT_URL=https://<account>.blob.core.windows.net
```
`DefaultAzureCredential` will use your `az login` session.
### Authentication methods summary
| Method | Env var | When to use |
|--------|---------|-------------|
| **Connection string** | `AZURE_BLOB_CONNECTION_STRING` | Local dev, quick tests |
| **Entra ID (Managed Identity)** | `AZURE_BLOB_ACCOUNT_URL` | Azure App Service, AKS — no secrets |
| **Entra ID (az login)** | `AZURE_BLOB_ACCOUNT_URL` | Local dev without secrets |
| **Entra ID (service principal)** | `AZURE_BLOB_ACCOUNT_URL` + `AZURE_CLIENT_ID` / `AZURE_TENANT_ID` / `AZURE_CLIENT_SECRET` | CI/CD pipelines |
If both `AZURE_BLOB_CONNECTION_STRING` and `AZURE_BLOB_ACCOUNT_URL` are set, the connection string takes precedence.
### Blob layout
All workspace data is stored under `<datalake_root>/<sanitized_identity_id>/` inside the container:
```
data-formulator/ ← container
workspaces/ ← datalake_root (default)
browser_550e8400.../ ← anonymous user workspace
workspace.yaml
sales_data.parquet
user_alice_example_com/ ← authenticated user workspace
workspace.yaml
quarterly_report.parquet
```
### CLI flags reference
| Flag | Env var | Default | Description |
|------|---------|---------|-------------|
| `--workspace-backend` | `WORKSPACE_BACKEND` | `local` | `local` or `azure_blob` |
| `--azure-blob-connection-string` | `AZURE_BLOB_CONNECTION_STRING` | — | Shared-key connection string |
| `--azure-blob-account-url` | `AZURE_BLOB_ACCOUNT_URL` | — | Account URL for Entra ID auth |
| `--azure-blob-container` | `AZURE_BLOB_CONTAINER` | `data-formulator` | Blob container name |
## Security Considerations for Production Deployment
⚠️ **IMPORTANT SECURITY WARNING FOR PRODUCTION DEPLOYMENT**
When deploying Data Formulator to production, please be aware of the following security considerations:
### Database and Data Storage Security
1. **Workspace and table data**: Table data is stored in per-identity workspaces (e.g. parquet files). DuckDB is used only in-memory per request when needed (e.g. for SQL mode); no persistent DuckDB database files are created by the app.
2. **Identity Management**:
- Each user's data is isolated by a namespaced identity key (e.g., `user:alice@example.com` or `browser:550e8400-...`)
- Anonymous users get a browser-based UUID stored in localStorage
- Authenticated users get their verified user ID from the auth provider
3. **Data persistence**: User data may be written to workspace storage (e.g. parquet) on the server. In multi-tenant deployments, ensure workspace directories are isolated and access-controlled.
### Recommended Security Measures
For production deployment, consider:
1. **Use `--disable-database` flag** to disable table-connector routes when you do not need external or uploaded table support
2. **Implement proper authentication, authorization, and other security measures** as needed for your specific use case, for example:
- User authentication (OAuth, JWT tokens, etc.)
- Role-based access control
- API rate limiting
- HTTPS/TLS encryption
- Input validation and sanitization
### Configuration for Production
```bash
# For stateless deployment (recommended for public hosting)
python -m data_formulator.app --disable-database
```
## Authentication Architecture
Data Formulator supports a **hybrid identity system** that supports both anonymous and authenticated users.
### Identity Flow Overview
```
┌─────────────────────────────────────────────────────────────────────┐
│ Frontend Request │
├─────────────────────────────────────────────────────────────────────┤
│ Headers: │
│ X-Identity-Id: "browser:550e8400-..." (namespace sent by client) │
│ Authorization: Bearer <jwt> (if custom auth implemented) │
│ (Azure also adds X-MS-CLIENT-PRINCIPAL-ID automatically) │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Backend Identity Resolution │
│ (auth.py: get_identity_id) │
├─────────────────────────────────────────────────────────────────────┤
│ Priority 1: Azure X-MS-CLIENT-PRINCIPAL-ID → "user:<azure_id>" │
│ Priority 2: JWT Bearer token (if implemented) → "user:<jwt_sub>" │
│ Priority 3: X-Identity-Id header → ALWAYS "browser:<id>" │
│ (client-provided namespace is IGNORED for security) │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Storage Isolation │
├─────────────────────────────────────────────────────────────────────┤
│ "user:alice@example.com" → alice's DuckDB file (ONLY via auth) │
│ "browser:550e8400-..." → anonymous user's DuckDB file │
└─────────────────────────────────────────────────────────────────────┘
```
### Security Model
**Critical Security Rule:** The backend NEVER trusts the namespace prefix from the client-provided `X-Identity-Id` header. Even if a client sends `X-Identity-Id: "user:alice@..."`, the backend strips the prefix and forces `browser:alice@...`. Only verified authentication (Azure headers or JWT) can result in a `user:` prefixed identity.
The key security principle is **namespaced isolation with forced prefixing**:
| Scenario | X-Identity-Id Sent | Backend Resolution | Storage Key |
|----------|-------------------|-------------------|-------------|
| Anonymous user | `browser:550e8400-...` | Strips prefix, forces `browser:` | `browser:550e8400-...` |
| Azure logged-in user | `browser:550e8400-...` | Uses Azure header (priority 1) | `user:alice@...` |
| Attacker spoofing | `user:alice@...` (forged) | No valid auth, strips & forces `browser:` | `browser:alice@...` |
**Why this is secure:** An attacker sending `X-Identity-Id: user:alice@...` gets `browser:alice@...` as their storage key, which is completely separate from the real `user:alice@...` that only authenticated Alice can access.
### Implementing Custom Authentication
To add JWT-based authentication:
1. **Backend** (`tables_routes.py`): Uncomment and configure the JWT verification code in `get_identity_id()`
2. **Frontend** (`utils.tsx`): Implement `getAuthToken()` to retrieve the JWT from your auth context
3. **Add JWT secret** to Flask config: `current_app.config['JWT_SECRET']`
### Azure App Service Authentication
When deployed to Azure with EasyAuth enabled:
- Azure automatically adds `X-MS-CLIENT-PRINCIPAL-ID` header to authenticated requests
- The backend reads this header first (highest priority)
- No frontend changes needed - Azure handles the auth flow
### Frontend Identity Management
The frontend (`src/app/identity.ts`) manages identity as follows:
```typescript
// Identity is always initialized with browser ID
identity: { type: 'browser', id: getBrowserId() }
// If user logs in (e.g., via Azure), it's updated to:
identity: { type: 'user', id: userInfo.userId }
// All API requests send namespaced identity:
// X-Identity-Id: "browser:550e8400-..." or "user:alice@..."
```
This ensures:
1. **Anonymous users**: Work immediately with localStorage-based browser ID
2. **Logged-in users**: Get their verified user ID from the auth provider
3. **Cross-tab consistency**: Browser ID is shared via localStorage across all tabs
## Usage
See the [Usage section on the README.md page](README.md#usage).
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) Microsoft Corporation.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
================================================
FILE: MANIFEST.in
================================================
include py-src/data_formulator/dist/*
include py-src/data_formulator/dist/assets/*
global-exclude .DS_Store
exclude py-src/examples
================================================
FILE: README.md
================================================
<h1 align="center">
<img src="./public/favicon.ico" alt="Data Formulator icon" width="28">
Data Formulator: AI-powered Data Visualization
</h1>
<p align="center">
🪄 Explore data with visualizations, powered by AI agents.
</p>
<p align="center">
<a href="https://data-formulator.ai"><img src="https://img.shields.io/badge/🚀_Try_Online_Demo-data--formulator.ai-F59E0B?style=for-the-badge" alt="Try Online Demo"></a>
<a href="#get-started"><img src="https://img.shields.io/badge/💻_Install_Locally-uvx_|_pip-3776AB?style=for-the-badge" alt="Install Locally"></a>
</p>
<p align="center">
<a href="https://arxiv.org/abs/2408.16119"><img src="https://img.shields.io/badge/Paper-arXiv:2408.16119-b31b1b.svg" alt="arXiv"></a> 
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a> 
<a href="https://www.youtube.com/watch?v=GfTE2FLyMrs"><img src="https://img.shields.io/badge/YouTube-white?logo=youtube&logoColor=%23FF0000" alt="YouTube"></a> 
<a href="https://github.com/microsoft/data-formulator/actions/workflows/python-build.yml"><img src="https://github.com/microsoft/data-formulator/actions/workflows/python-build.yml/badge.svg" alt="build"></a> 
<a href="https://discord.gg/mYCZMQKYZb"><img src="https://img.shields.io/badge/discord-chat-green?logo=discord" alt="Discord"></a>
</p>
<!-- [](https://codespaces.new/microsoft/data-formulator?quickstart=1) -->
<!--
https://github.com/user-attachments/assets/8ca57b68-4d7a-42cb-bcce-43f8b1681ce2 -->
<kbd>
<img src="https://github.com/user-attachments/assets/3ffb15aa-93ce-42b8-92cf-aaf321f9a06a">
</kbd>
## News 🔥🔥🔥
[03-02-2026] **Data Formulator 0.7 (alpha)** — More charts, new experience, enterprise-ready
- 📊 **30 chart types** with a new semantic chart engine (area, streamgraph, candlestick, pie, radar, maps, and more).
- 💬 **Hybrid chat + data thread** — chat woven into the exploration timeline with lineage, previews, and reasoning.
- 🤖 **Unified `DataAgent`** replacing four separate agents, plus new recommendation and insight agents.
- 🏗️ **Workspace / Data Lake** — persistent, identity-based data management with local and Azure Blob backends.
- 🔒 **Security hardening** — code signing, sandboxed execution, authentication, and rate limiting.
- 📦 **UV-first build** — reproducible builds via `uv.lock`; `uv sync` + `uv run data_formulator`.
- 📝 Detailed writeup on the new architecture coming soon — stay tuned!
## Previous Updates
Here are milestones that lead to the current design:
- **v0.6** ([Demo](https://github.com/microsoft/data-formulator/releases/tag/0.6)): Real-time insights from live data — connect to URLs and databases with automatic refresh
- **uv support**: Faster installation with [uv](https://docs.astral.sh/uv/) — `uvx data_formulator` or `uv pip install data_formulator`
- **v0.5.1** ([Demo](https://github.com/microsoft/data-formulator/pull/200#issue-3635408217)): Community data loaders, US Map & Pie Chart, editable reports, snappier UI
- **v0.5**: Vibe with your data, in control — agent mode, data extraction, reports
- **v0.2.2** ([Demo](https://github.com/microsoft/data-formulator/pull/176)): Goal-driven exploration with agent recommendations and performance improvements
- **v0.2.1.3/4** ([Readme](https://github.com/microsoft/data-formulator/tree/main/py-src/data_formulator/data_loader) | [Demo](https://github.com/microsoft/data-formulator/pull/155)): External data loaders (MySQL, PostgreSQL, MSSQL, Azure Data Explorer, S3, Azure Blob)
- **v0.2** ([Demos](https://github.com/microsoft/data-formulator/releases/tag/0.2)): Large data support with DuckDB integration
- **v0.1.7** ([Demos](https://github.com/microsoft/data-formulator/releases/tag/0.1.7)): Dataset anchoring for cleaner workflows
- **v0.1.6** ([Demo](https://github.com/microsoft/data-formulator/releases/tag/0.1.6)): Multi-table support with automatic joins
- **Model Support**: OpenAI, Azure, Ollama, Anthropic via [LiteLLM](https://github.com/BerriAI/litellm) ([feedback](https://github.com/microsoft/data-formulator/issues/49))
- **Python Package**: Easy local installation ([try it](#get-started))
- **Visualization Challenges**: Test your skills ([challenges](https://github.com/microsoft/data-formulator/issues/53))
- **Data Extraction**: Parse data from images and text ([demo](https://github.com/microsoft/data-formulator/pull/31#issuecomment-2403652717))
- **Initial Release**: [Blog](https://www.microsoft.com/en-us/research/blog/data-formulator-exploring-how-ai-can-help-analysts-create-rich-data-visualizations/) | [Video](https://youtu.be/3ndlwt0Wi3c)
<details>
<summary><b>View detailed update history</b></summary>
- [07-10-2025] Data Formulator 0.2.2: Start with an analysis goal
- Some key frontend performance updates.
- You can start your exploration with a goal, or, tab and see if the agent can recommend some good exploration ideas for you. [Demo](https://github.com/microsoft/data-formulator/pull/176)
- [05-13-2025] Data Formulator 0.2.1.3/4: External Data Loader
- We introduced external data loader class to make import data easier. [Readme](https://github.com/microsoft/data-formulator/tree/main/py-src/data_formulator/data_loader) and [Demo](https://github.com/microsoft/data-formulator/pull/155)
- Current data loaders: MySQL, Azure Data Explorer (Kusto), Azure Blob and Amazon S3 (json, parquet, csv).
- [07-01-2025] Updated with: Postgresql, mssql.
- Call for action [link](https://github.com/microsoft/data-formulator/issues/156):
- Users: let us know which data source you'd like to load data from.
- Developers: let's build more data loaders.
- [04-23-2025] Data Formulator 0.2: working with *large* data 📦📦📦
- Explore large data by:
1. Upload large data file to the local database (powered by [DuckDB](https://github.com/duckdb/duckdb)).
2. Use drag-and-drop to specify charts, and Data Formulator dynamically fetches data from the database to create visualizations (with ⚡️⚡️⚡️ speeds).
3. Work with AI agents: they generate SQL queries to transform the data to create rich visualizations!
4. Anchor the result / follow up / create a new branch / join tables; let's dive deeper.
- Checkout the demos at [[https://github.com/microsoft/data-formulator/releases/tag/0.2]](https://github.com/microsoft/data-formulator/releases/tag/0.2)
- Improved overall system performance, and enjoy the updated derive concept functionality.
- [03-20-2025] Data Formulator 0.1.7: Anchoring ⚓︎
- Anchor an intermediate dataset, so that followup data analysis are built on top of the anchored data, not the original one.
- Clean a data and work with only the cleaned data; create a subset from the original data or join multiple data, and then go from there. AI agents will be less likely to get confused and work faster. ⚡️⚡️
- Check out the demos at [[https://github.com/microsoft/data-formulator/releases/tag/0.1.7]](https://github.com/microsoft/data-formulator/releases/tag/0.1.7)
- Don't forget to update Data Formulator to test it out!
- [02-20-2025] Data Formulator 0.1.6 released!
- Now supports working with multiple datasets at once! Tell Data Formulator which data tables you would like to use in the encoding shelf, and it will figure out how to join the tables to create a visualization to answer your question. 🪄
- Checkout the demo at [[https://github.com/microsoft/data-formulator/releases/tag/0.1.6]](https://github.com/microsoft/data-formulator/releases/tag/0.1.6).
- Update your Data Formulator to the latest version to play with the new features.
- [02-12-2025] More models supported now!
- Now supports OpenAI, Azure, Ollama, and Anthropic models (and more powered by [LiteLLM](https://github.com/BerriAI/litellm));
- Models with strong code generation and instruction following capabilities are recommended (gpt-4o, claude-3-5-sonnet etc.);
- You can store API keys in `.env` to avoid typing them every time (copy `.env.template` to `.env` and fill in your keys).
- Let us know which models you have good/bad experiences with, and what models you would like to see supported! [[comment here]](https://github.com/microsoft/data-formulator/issues/49)
- [11-07-2024] Minor fun update: data visualization challenges!
- We added a few visualization challenges with the sample datasets. Can you complete them all? [[try them out!]](https://github.com/microsoft/data-formulator/issues/53#issue-2641841252)
- Comment in the issue when you did, or share your results/questions with others! [[comment here]](https://github.com/microsoft/data-formulator/issues/53)
- [10-11-2024] Data Formulator python package released!
- You can now install Data Formulator using Python and run it locally, easily. [[check it out]](#get-started).
- Our Codespaces configuration is also updated for fast start up ⚡️. [[try it now!]](https://codespaces.new/microsoft/data-formulator?quickstart=1)
- New experimental feature: load an image or a messy text, and ask AI to parse and clean it for you(!). [[demo]](https://github.com/microsoft/data-formulator/pull/31#issuecomment-2403652717)
- [10-01-2024] Initial release of Data Formulator, check out our [[blog]](https://www.microsoft.com/en-us/research/blog/data-formulator-exploring-how-ai-can-help-analysts-create-rich-data-visualizations/) and [[video]](https://youtu.be/3ndlwt0Wi3c)!
</details>
## Overview
**Data Formulator** is a Microsoft Research prototype for data exploration with visualizations powered by AI agents.
Data Formulator enables analysts to iteratively explore and visualize data. Started with data in any format (screenshot, text, csv, or database), users can work with AI agents with a novel blended interface that combines *user interface interactions (UI)* and *natural language (NL) inputs* to communicate their intents, control branching exploration directions, and create reports to share their insights.
## Get Started
Play with Data Formulator with one of the following options:
- **Option 1: Install via uv (recommended)**
[uv](https://docs.astral.sh/uv/) is an extremely fast Python package manager. If you have uv installed, you can run Data Formulator directly without any setup:
```bash
# Run data formulator directly (no install needed)
uvx data_formulator
```
Or install it in a project/virtual environment:
```bash
# Install data_formulator
uv pip install data_formulator
# Run data formulator
python -m data_formulator
```
Data Formulator will be automatically opened in the browser at [http://localhost:5567](http://localhost:5567).
- **Option 2: Install via pip**
Use pip for installation (recommend: install it in a virtual environment).
```bash
# install data_formulator
pip install data_formulator
# Run data formulator with this command
python -m data_formulator
```
Data Formulator will be automatically opened in the browser at [http://localhost:5567](http://localhost:5567).
*you can specify the port number (e.g., 8080) by `python -m data_formulator --port 8080` if the default port is occupied.*
- **Option 3: Codespaces (5 minutes)**
You can also run Data Formulator in Codespaces; we have everything pre-configured. For more details, see [CODESPACES.md](CODESPACES.md).
[](https://codespaces.new/microsoft/data-formulator?quickstart=1)
- **Option 4: Working in the developer mode**
You can build Data Formulator locally if you prefer full control over your development environment and develop your own version on top. For detailed instructions, refer to [DEVELOPMENT.md](DEVELOPMENT.md).
## Using Data Formulator
### Load Data
Besides uploading csv, tsv or xlsx files that contain structured data, you can ask Data Formulator to extract data from screenshots, text blocks or websites, or load data from databases use connectors. Then you are ready to explore.
<img width="1920" alt="image" src="https://github.com/user-attachments/assets/e23cdb47-984c-4ce4-a014-8f36e025e393" />
### Explore Data
There are four levels to explore data based depending on whether you want more vibe or more control:
- Level 1 (most control): Create charts with UI via drag-and-drop, if all fields to be visualized are already in the data.
- Level 2: Specify chart designs with natural language + NL. Describe how new fields should be visualized in your chart, AI will automatically transform data to realize the design.
- Level 3: Get recommendations: Ask AI agents to recommend charts directly from NL descriptions, or even directly ask for exploration ideas.
- Level 4 (most vibe): In agent mode, provide a high-level goal and let AI agents automatically plan and explore data in multiple turns. Exploration threads will be created automatically.
https://github.com/user-attachments/assets/164aff58-9f93-4792-b8ed-9944578fbb72
- Level 5: In practice, leverage all of them to keep up with both vibe and control!
### Create Reports
Use the report builder to compose a report of the style you like, based on selected charts. Then share the reports to others!
<!--
### The basics of data visualization
* Set up model provider, for agentic experience, model with reasoning and strong code generation ablity is recommended.
* Describe the exploration
https://github.com/user-attachments/assets/0fbea012-1d2d-46c3-a923-b1fc5eb5e5b8
### Create visualization beyond the initial dataset (powered by 🤖)
* You can type names of **fields that do not exist in current data** in the encoding shelf:
- this tells Data Formulator that you want to create visualizations that require computation or transformation from existing data,
- you can optionally provide a natural language prompt to explain and clarify your intent (not necessary when field names are self-explanatory).
* Click the **Formulate** button.
- Data Formulator will transform data and instantiate the visualization based on the encoding and prompt.
* Inspect the data, chart and code.
* To create a new chart based on existing ones, follow up in natural language:
- provide a follow up prompt (e.g., *``show only top 5!''*),
- you may also update visual encodings for the new chart.
https://github.com/user-attachments/assets/160c69d2-f42d-435c-9ff3-b1229b5bddba
https://github.com/user-attachments/assets/c93b3e84-8ca8-49ae-80ea-f91ceef34acb
Repeat this process as needed to explore and understand your data. Your explorations are trackable in the **Data Threads** panel. -->
## Developers' Guide
Follow the [developers' instructions](DEVELOPMENT.md) to build your new data analysis tools on top of Data Formulator.
Help wanted:
* Add more database connectors (https://github.com/microsoft/data-formulator/issues/156)
* Scaling up messy data extractor: more document types and larger files.
* Adding more chart templates (e.g., maps).
* other ideas?
## Research Papers
* [Data Formulator 2: Iteratively Creating Rich Visualizations with AI](https://arxiv.org/abs/2408.16119)
```
@article{wang2024dataformulator2iteratively,
title={Data Formulator 2: Iteratively Creating Rich Visualizations with AI},
author={Chenglong Wang and Bongshin Lee and Steven Drucker and Dan Marshall and Jianfeng Gao},
year={2024},
booktitle={ArXiv preprint arXiv:2408.16119},
}
```
* [Data Formulator: AI-powered Concept-driven Visualization Authoring](https://arxiv.org/abs/2309.10094)
```
@article{wang2023data,
title={Data Formulator: AI-powered Concept-driven Visualization Authoring},
author={Wang, Chenglong and Thompson, John and Lee, Bongshin},
journal={IEEE Transactions on Visualization and Computer Graphics},
year={2023},
publisher={IEEE}
}
```
## Contributing
This project welcomes contributions and suggestions. Most contributions require you to
agree to a Contributor License Agreement (CLA) declaring that you have the right to,
and actually do, grant us the rights to use your contribution. For details, visit
https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need
to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the
instructions provided by the bot. You will only need to do this once across all repositories using our CLA.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
## Trademarks
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
trademarks or logos is subject to and must follow
[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
Any use of third-party trademarks or logos are subject to those third-party's policies.
================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->
## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
* Full paths of source file(s) related to the manifestation of the issue
* The location of the affected source code (tag/branch/commit or direct URL)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit the issue
This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
## Preferred Languages
We prefer all communications to be in English.
## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->
================================================
FILE: SUPPORT.md
================================================
# Support
## How to file issues and get help
This project uses GitHub Issues to track bugs and feature requests. Please search the existing
issues before filing new issues to avoid duplicates. For new issues, file your bug or
feature request as a new Issue.
## Microsoft Support Policy
Support for this project is limited to the resources listed above.
================================================
FILE: embed/README.md
================================================
# Embed Data Formulator
First you'll need to build the bundle:
```
yarn build
```
This puts the complete js file in the `dist` folder.
## Test bundle
Next you can test to see the complete Data Formulator app by opening `/embed/index.html` in your browser. You can do this by double-clicking in your file explorer (this would use the `file://` protocol).
To test cross-frame messaging, launch `postMessageTest.html` which hosts the app in an iframe, and has buttons to send commands such as `load data`.
## Use in Fabric Notebook
You willl need to enable access to your `dist` from the cloud. There are 2 ways to do this:
* Publish the `dist` (e.g. pip, npm, or other)
* Create a tunnel to your localhost
### Tunnel to localhost
One way is to install [local-web-server](https://www.npmjs.com/package/local-web-server). This will serve a local folder as a website on http://localhost:8000. Next, you can set up a tunnel such as [ngrok](https://ngrok.com/download) which can provide a cloud-accesible url proxy to your local server.
Copy the python function in a notebook cell:
```py
def dfviz(df, tableName, serverUrl):
# df is a PySpark DataFrame
import json
from datetime import date, datetime
# Custom function to convert datetime objects to string
def json_serial(obj):
if isinstance(obj, (datetime, date)):
return obj.isoformat()
raise TypeError ("Type %s not serializable" % type(obj))
# Convert DataFrame rows to dictionaries and collect them into a list
data = [row.asDict() for row in df.collect()]
# Convert list of dictionaries to a single JSON array using the custom function
json_data = json.dumps(data, default=json_serial)
displayHTML(f"""<!DOCTYPE html>
<meta charset="utf-8">
<script>
const table = {json_data};
const embedPromise = new Promise((resolve, reject) => {{
const embedIframe = document.createElement('iframe');
embedIframe.style.height = '700px';
embedIframe.style.width = 'calc(100% - 4px)';
document.body.appendChild(embedIframe);
const closeScriptTag = '</'+'script>';
const htmlContent = `<!DOCTYPE html>
<html><body>
<div id="root"></div>
<script src="{serverUrl}/DataFormulator.js" defer onload="parent.frameLoaded()" onerror="parent.frameError()">${{closeScriptTag}}
</body></html>`;
// Define global functions for onload and onerror events of the script
window.frameLoaded = () => resolve(embedIframe);
window.frameError = () => reject(new Error('Script failed to load'));
// Write the HTML content to the iframe
embedIframe.contentWindow.document.open();
embedIframe.contentWindow.document.write(htmlContent);
embedIframe.contentWindow.document.close();
}});
embedPromise.then((embedIframe) => {{
embedIframe.contentWindow.postMessage({{ actionName: 'setConfig', actionParams: {{ serverUrl: '{serverUrl}', popupConfig: {{ allowPopup: true, jsUrl: '{serverUrl}/DataFormulator.js' }} }} }}, '*');
embedIframe.contentWindow.postMessage({{ actionName: 'loadData', actionParams: {{ tableName: '{tableName}', table }} }}, '*');
}});
</script>
"""
)
```
Get a dataframe and pass it to the `dfviz` function:
```py
df = spark.sql("SELECT * FROM Sample_lakehouse_475.publicholidays LIMIT 100")
display(df)
dfviz(df, 'Holidays', 'https://<your_tunnel_url>')
```
================================================
FILE: embed/dynamic.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data Formulator embedded dynamically</title>
</head>
<body>
<script>
const table = [
{
"manufacturer": "Toyota",
"model": "Corolla",
"year": 2019,
"price": 20000
},
{
"manufacturer": "Toyota",
"model": "Camry",
"year": 2019,
"price": 25000
},
{
"manufacturer": "Toyota",
"model": "RAV4",
"year": 2019,
"price": 30000
},
{
"manufacturer": "Toyota",
"model": "Highlander",
"year": 2019,
"price": 35000
},
{
"manufacturer": "Toyota",
"model": "4Runner",
"year": 2019,
"price": 40000
},
{
"manufacturer": "Ford",
"model": "Fusion",
"year": 2019,
"price": 20000
},
{
"manufacturer": "Ford",
"model": "Focus",
"year": 2019,
"price": 25000
},
{
"manufacturer": "Ford",
"model": "Escape",
"year": 2019,
"price": 30000
},
{
"manufacturer": "Ford",
"model": "Explorer",
"year": 2019,
"price": 35000
},
{
"manufacturer": "Ford",
"model": "Expedition",
"year": 2019,
"price": 40000
}
];
const embedPromise = new Promise((resolve, reject) => {
const embedIframe = document.createElement('iframe');
embedIframe.style.height = '700px';
embedIframe.style.width = 'calc(100% - 4px)';
document.body.appendChild(embedIframe);
// Prepare the HTML content with the script tag.
const closeScriptTag = '</'+'script>';
const htmlContent = `
<!DOCTYPE html>
<html>
<body>
<div id="root"></div>
<script src="../dist/DataFormulator.js" defer onload="console.log('my loc'+document.location);parent.frameLoaded()" onerror="parent.frameError()">${closeScriptTag}
</body>
</html>
`;
// Define global functions for onload and onerror events of the script
window.frameLoaded = () => resolve(embedIframe);
window.frameError = () => reject(new Error('Script failed to load'));
// Write the HTML content to the iframe
embedIframe.contentWindow.document.open();
embedIframe.contentWindow.document.write(htmlContent);
embedIframe.contentWindow.document.close();
});
embedPromise.then((embedIframe) => {
embedIframe.contentWindow.postMessage({ actionName: 'setConfig', actionParams: { serverUrl: 'http://localhost:5567' } }, '*');
embedIframe.contentWindow.postMessage({ actionName: 'loadData', actionParams: { tableName: 'FabricTable', table } }, '*');
});
</script>
</body>
</html>
================================================
FILE: embed/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data Formulator embedded</title>
</head>
<body>
<div id="root"></div>
<script src="../dist/DataFormulator.js"></script>
</body>
</html>
================================================
FILE: embed/postMessageTest.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data Formulator embedded iframe</title>
</head>
<body>
<iframe id="df" src="./index.html" style="width:1500px;height:1000px"></iframe>
<div>
<button onclick="postMessageToIframe()">Post Load Data message to iframe</button>
</div>
<script>
function postMessageToIframe() {
var iframe = document.getElementById('df');
//create 10 rows of fake data objects like cars dataset. make sure not every manufacturer od Toyota
const data = [
{
"manufacturer": "Toyota",
"model": "Corolla",
"year": 2019,
"price": 20000
},
{
"manufacturer": "Toyota",
"model": "Camry",
"year": 2019,
"price": 25000
},
{
"manufacturer": "Toyota",
"model": "RAV4",
"year": 2019,
"price": 30000
},
{
"manufacturer": "Toyota",
"model": "Highlander",
"year": 2019,
"price": 35000
},
{
"manufacturer": "Toyota",
"model": "4Runner",
"year": 2019,
"price": 40000
},
{
"manufacturer": "Ford",
"model": "Fusion",
"year": 2019,
"price": 20000
},
{
"manufacturer": "Ford",
"model": "Focus",
"year": 2019,
"price": 25000
},
{
"manufacturer": "Ford",
"model": "Escape",
"year": 2019,
"price": 30000
},
{
"manufacturer": "Ford",
"model": "Explorer",
"year": 2019,
"price": 35000
},
{
"manufacturer": "Ford",
"model": "Expedition",
"year": 2019,
"price": 40000
}
];
//create a message object to send to the iframe
/* schema is:
interface LoadDataAction extends Action {
actionName: "loadData";
actionParams: {
tableName: string;
table: object[];
}
}
*/
const configMessage = {
actionName: 'setConfig',
actionParams: {
serverUrl: 'http://localhost:5567/',
}
};
iframe.contentWindow.postMessage(configMessage, '*');
const dataMessage = {
actionName: 'loadData',
actionParams: {
tableName: 'cars',
table: data,
}
};
iframe.contentWindow.postMessage(dataMessage, '*');
}
</script>
</body>
</html>
================================================
FILE: eslint.config.js
================================================
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReact from "eslint-plugin-react";
import jsxA11y from "eslint-plugin-jsx-a11y";
/** @type {import('eslint').Linter.Config[]} */
export default [
{
languageOptions: { globals: globals.browser },
settings: {
react: {
version: "detect", // Automatically detect the React version
},
},
},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
pluginReact.configs.flat.recommended,
{
plugins: {
'jsx-a11y': jsxA11y,
},
rules: {
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-non-null-asserted-optional-chain": "off",
"@typescript-eslint/no-empty-object-type": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unused-expressions": "off",
"@typescript-eslint/no-unused-vars": "off",
"no-empty-pattern": "off",
"no-empty": "off",
"no-unsafe-optional-chaining": "off",
"no-useless-escape": "off",
"prefer-const": "off",
"react/no-unescaped-entities": "off",
}
}
];
================================================
FILE: index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="Data Formulator"
content="Concept-driven Visualization Authoring"
/>
<!-- Preload critical images for faster initial load -->
<link rel="preload" as="image" href="/gas_prices-thumbnail.webp" type="image/webp" />
<link rel="preload" as="image" href="/global_energy-thumbnail.webp" type="image/webp" />
<link rel="preload" as="image" href="/movies-thumbnail.webp" type="image/webp" />
<link rel="preload" as="image" href="/unemployment-thumbnail.webp" type="image/webp" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Data Formulator</title>
</head>
<body>
<noscript>Run this app with javascript</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
================================================
FILE: local_server.bat
================================================
:: Copyright (c) Microsoft Corporation.
:: Licensed under the MIT License.
@echo off
:: Set HTTP proxy environment variables only (Flask doesn't support SOCKS5)
:: set http_proxy=http://127.0.0.1:7890
:: set https_proxy=http://127.0.0.1:7890
set FLASK_RUN_PORT=5567
:: Use uv if available, otherwise fall back to python
where uv >nul 2>nul
if %ERRORLEVEL% EQU 0 (
uv run data_formulator --port %FLASK_RUN_PORT% --dev
) else (
python -m data_formulator.app --port %FLASK_RUN_PORT% --dev
)
================================================
FILE: local_server.sh
================================================
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# Set HTTP proxy environment variables only (Flask doesn't support SOCKS5)
# export http_proxy=http://127.0.0.1:7890
# export https_proxy=http://127.0.0.1:7890
export FLASK_RUN_PORT=5567
# Use uv if available, otherwise fall back to python
if command -v uv &> /dev/null; then
uv run data_formulator --port ${FLASK_RUN_PORT} --dev
else
python -m data_formulator.app --port ${FLASK_RUN_PORT} --dev
fi
================================================
FILE: package.json
================================================
{
"name": "data-formulator",
"type": "module",
"version": "0.1.0",
"private": true,
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@fontsource/roboto": "^4.5.5",
"@mui/icons-material": "^7.1.1",
"@mui/lab": "^7.0.1-beta.18",
"@mui/material": "^7.1.1",
"@reduxjs/toolkit": "^1.8.6",
"@types/dompurify": "^3.0.5",
"@types/validator": "^13.12.2",
"allotment": "^1.20.4",
"canvas": "^3.2.1",
"chart.js": "^4.5.1",
"d3": "^7.3.0",
"dompurify": "^3.2.4",
"echarts": "^6.0.0",
"exceljs": "^4.4.0",
"gofish-graphics": "^0.0.22",
"html2canvas": "^1.4.1",
"js-yaml": "^4.1.1",
"katex": "^0.16.22",
"localforage": "^1.10.0",
"lodash": "^4.17.23",
"markdown-to-jsx": "^7.4.0",
"mui-markdown": "^2.0.3",
"prettier": "^2.8.3",
"prism-react-renderer": "^1.3.5",
"prismjs": "^1.30.0",
"prop-types": "^15.8.1",
"react": "^18.2.0",
"react-animate-height": "^3.0.4",
"react-animate-on-change": "^2.2.0",
"react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1",
"react-dom": "^18.2.0",
"react-katex": "^3.1.0",
"react-redux": "^8.0.4",
"react-router-dom": "^6.22.0",
"react-selectable-fast": "^3.4.0",
"react-simple-code-editor": "^0.13.1",
"react-vega": "^7.6.0",
"react-virtuoso": "^4.3.10",
"redux": "^4.2.0",
"redux-persist": "^6.0.0",
"typescript": "^4.9.5",
"validator": "^13.15.20",
"vega": "^6.2.0",
"vega-embed": "^6.21.0",
"vega-lite": "6.4.1",
"vm-browserify": "^1.1.2"
},
"scripts": {
"lint": "eslint -c eslint.config.js src/**/*.{ts,tsx} --fix",
"start": "vite",
"build": "vite build"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@types/d3": "^7.4.3",
"@types/lodash": "^4.17.7",
"@types/node": "^20.14.10",
"@types/prismjs": "^1.26.0",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@types/react-katex": "^3.0.4",
"@typescript-eslint/eslint-plugin": "^8.16.0",
"@typescript-eslint/parser": "^8.16.0",
"@vitejs/plugin-react-swc": "^3.7.0",
"eslint": "^9.15.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.2",
"globals": "^15.12.0",
"sass": "^1.77.6",
"typescript-eslint": "^8.16.0",
"vite": "^5.4.21"
}
}
================================================
FILE: public/df_gas_prices.json
================================================
{"tables":[{"id":"weekly_gas_prices","displayId":"gas-prices","names":["date","fuel","grade","formulation","price"],"metadata":{"date":{"type":"date","semanticType":"Date"},"fuel":{"type":"string","semanticType":"String"},"grade":{"type":"string","semanticType":"String","levels":["all","regular","midgrade","premium","low_sulfur","ultra_low_sulfur"]},"formulation":{"type":"string","semanticType":"String","levels":["all","conventional","reformulated","NA"]},"price":{"type":"number","semanticType":"Number"}},"rows":[{"date":"1990-08-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.191},{"date":"1990-08-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.191},{"date":"1990-08-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.245},{"date":"1990-08-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.245},{"date":"1990-09-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.242},{"date":"1990-09-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.242},{"date":"1990-09-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.252},{"date":"1990-09-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.252},{"date":"1990-09-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.266},{"date":"1990-09-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.266},{"date":"1990-09-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.272},{"date":"1990-09-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.272},{"date":"1990-10-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.321},{"date":"1990-10-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.321},{"date":"1990-10-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.333},{"date":"1990-10-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.333},{"date":"1990-10-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.339},{"date":"1990-10-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.339},{"date":"1990-10-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.345},{"date":"1990-10-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.345},{"date":"1990-10-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.339},{"date":"1990-10-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.339},{"date":"1990-11-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.334},{"date":"1990-11-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.334},{"date":"1990-11-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.328},{"date":"1990-11-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.328},{"date":"1990-11-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.323},{"date":"1990-11-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.323},{"date":"1990-11-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.311},{"date":"1990-11-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.311},{"date":"1990-12-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.341},{"date":"1990-12-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.341},{"date":"1991-01-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.192},{"date":"1991-01-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.192},{"date":"1991-01-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.168},{"date":"1991-01-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.168},{"date":"1991-02-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.139},{"date":"1991-02-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.139},{"date":"1991-02-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.106},{"date":"1991-02-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1991-02-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.078},{"date":"1991-02-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.078},{"date":"1991-02-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.054},{"date":"1991-02-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.054},{"date":"1991-03-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.025},{"date":"1991-03-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.025},{"date":"1991-03-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.045},{"date":"1991-03-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.045},{"date":"1991-03-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.043},{"date":"1991-03-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.043},{"date":"1991-03-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.047},{"date":"1991-03-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.047},{"date":"1991-04-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.052},{"date":"1991-04-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.052},{"date":"1991-04-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.066},{"date":"1991-04-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.066},{"date":"1991-04-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.069},{"date":"1991-04-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.069},{"date":"1991-04-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.09},{"date":"1991-04-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.09},{"date":"1991-04-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.104},{"date":"1991-04-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.104},{"date":"1991-05-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.113},{"date":"1991-05-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.113},{"date":"1991-05-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.121},{"date":"1991-05-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.121},{"date":"1991-05-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.129},{"date":"1991-05-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.129},{"date":"1991-05-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.14},{"date":"1991-05-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.14},{"date":"1991-06-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.138},{"date":"1991-06-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.138},{"date":"1991-06-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.135},{"date":"1991-06-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.135},{"date":"1991-06-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.126},{"date":"1991-06-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.126},{"date":"1991-06-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.114},{"date":"1991-06-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.114},{"date":"1991-07-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.104},{"date":"1991-07-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.104},{"date":"1991-07-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.098},{"date":"1991-07-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.098},{"date":"1991-07-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.094},{"date":"1991-07-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.094},{"date":"1991-07-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.091},{"date":"1991-07-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.091},{"date":"1991-07-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.091},{"date":"1991-07-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.091},{"date":"1991-08-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.099},{"date":"1991-08-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.099},{"date":"1991-08-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.112},{"date":"1991-08-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.112},{"date":"1991-08-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.124},{"date":"1991-08-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.124},{"date":"1991-08-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.124},{"date":"1991-08-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.124},{"date":"1991-09-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.127},{"date":"1991-09-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.127},{"date":"1991-09-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.12},{"date":"1991-09-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.12},{"date":"1991-09-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.11},{"date":"1991-09-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.11},{"date":"1991-09-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.097},{"date":"1991-09-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.097},{"date":"1991-09-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.092},{"date":"1991-09-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.092},{"date":"1991-10-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.089},{"date":"1991-10-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.089},{"date":"1991-10-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.084},{"date":"1991-10-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.084},{"date":"1991-10-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.088},{"date":"1991-10-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.088},{"date":"1991-10-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.091},{"date":"1991-10-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.091},{"date":"1991-11-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.091},{"date":"1991-11-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.091},{"date":"1991-11-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.102},{"date":"1991-11-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.102},{"date":"1991-11-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.104},{"date":"1991-11-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.104},{"date":"1991-11-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.099},{"date":"1991-11-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.099},{"date":"1991-12-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.099},{"date":"1991-12-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.099},{"date":"1991-12-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.091},{"date":"1991-12-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.091},{"date":"1991-12-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.075},{"date":"1991-12-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.075},{"date":"1991-12-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.063},{"date":"1991-12-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.063},{"date":"1991-12-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.053},{"date":"1991-12-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.053},{"date":"1992-01-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.042},{"date":"1992-01-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.042},{"date":"1992-01-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.026},{"date":"1992-01-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.026},{"date":"1992-01-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.014},{"date":"1992-01-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.014},{"date":"1992-01-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.006},{"date":"1992-01-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.006},{"date":"1992-02-03","fuel":"gasoline","grade":"regular","formulation":"all","price":0.995},{"date":"1992-02-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":0.995},{"date":"1992-02-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.004},{"date":"1992-02-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.004},{"date":"1992-02-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.011},{"date":"1992-02-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.011},{"date":"1992-02-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.014},{"date":"1992-02-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.014},{"date":"1992-03-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.012},{"date":"1992-03-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.012},{"date":"1992-03-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.013},{"date":"1992-03-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.013},{"date":"1992-03-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.01},{"date":"1992-03-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.01},{"date":"1992-03-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.015},{"date":"1992-03-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.015},{"date":"1992-03-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.013},{"date":"1992-03-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.013},{"date":"1992-04-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.026},{"date":"1992-04-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.026},{"date":"1992-04-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.051},{"date":"1992-04-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.051},{"date":"1992-04-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.058},{"date":"1992-04-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.058},{"date":"1992-04-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.072},{"date":"1992-04-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.072},{"date":"1992-05-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.089},{"date":"1992-05-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.089},{"date":"1992-05-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.102},{"date":"1992-05-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.102},{"date":"1992-05-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.118},{"date":"1992-05-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.118},{"date":"1992-05-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.12},{"date":"1992-05-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.12},{"date":"1992-06-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.128},{"date":"1992-06-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.128},{"date":"1992-06-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.143},{"date":"1992-06-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.143},{"date":"1992-06-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.151},{"date":"1992-06-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.151},{"date":"1992-06-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.153},{"date":"1992-06-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.153},{"date":"1992-06-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.149},{"date":"1992-06-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.149},{"date":"1992-07-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.147},{"date":"1992-07-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.147},{"date":"1992-07-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.139},{"date":"1992-07-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.139},{"date":"1992-07-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.132},{"date":"1992-07-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.132},{"date":"1992-07-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.128},{"date":"1992-07-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.128},{"date":"1992-08-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.126},{"date":"1992-08-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.126},{"date":"1992-08-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.123},{"date":"1992-08-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.123},{"date":"1992-08-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.116},{"date":"1992-08-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.116},{"date":"1992-08-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.123},{"date":"1992-08-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.123},{"date":"1992-08-31","fuel":"gasoline","grade":"regular","formulation":"all","price":1.121},{"date":"1992-08-31","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.121},{"date":"1992-09-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.121},{"date":"1992-09-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.121},{"date":"1992-09-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.124},{"date":"1992-09-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.124},{"date":"1992-09-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.123},{"date":"1992-09-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.123},{"date":"1992-09-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.118},{"date":"1992-09-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.118},{"date":"1992-10-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.115},{"date":"1992-10-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.115},{"date":"1992-10-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.115},{"date":"1992-10-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.115},{"date":"1992-10-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.113},{"date":"1992-10-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.113},{"date":"1992-10-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.113},{"date":"1992-10-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.113},{"date":"1992-11-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.12},{"date":"1992-11-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.12},{"date":"1992-11-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.12},{"date":"1992-11-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.12},{"date":"1992-11-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.112},{"date":"1992-11-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.112},{"date":"1992-11-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.106},{"date":"1992-11-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1992-11-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.098},{"date":"1992-11-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.098},{"date":"1992-12-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.089},{"date":"1992-12-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.089},{"date":"1992-12-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.078},{"date":"1992-12-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.078},{"date":"1992-12-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.074},{"date":"1992-12-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.074},{"date":"1992-12-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.069},{"date":"1992-12-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.069},{"date":"1993-01-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.065},{"date":"1993-01-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.065},{"date":"1993-01-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.066},{"date":"1993-01-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.066},{"date":"1993-01-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.061},{"date":"1993-01-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.061},{"date":"1993-01-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.055},{"date":"1993-01-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.055},{"date":"1993-02-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.055},{"date":"1993-02-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.055},{"date":"1993-02-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.062},{"date":"1993-02-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1993-02-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.053},{"date":"1993-02-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.053},{"date":"1993-02-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.047},{"date":"1993-02-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.047},{"date":"1993-03-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.042},{"date":"1993-03-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.042},{"date":"1993-03-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.048},{"date":"1993-03-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.048},{"date":"1993-03-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.058},{"date":"1993-03-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.058},{"date":"1993-03-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.056},{"date":"1993-03-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.056},{"date":"1993-03-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.057},{"date":"1993-03-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.057},{"date":"1993-04-05","fuel":"gasoline","grade":"all","formulation":"all","price":1.068},{"date":"1993-04-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.068},{"date":"1993-04-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.068},{"date":"1993-04-12","fuel":"gasoline","grade":"all","formulation":"all","price":1.079},{"date":"1993-04-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.079},{"date":"1993-04-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.079},{"date":"1993-04-19","fuel":"gasoline","grade":"all","formulation":"all","price":1.079},{"date":"1993-04-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.079},{"date":"1993-04-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.079},{"date":"1993-04-26","fuel":"gasoline","grade":"all","formulation":"all","price":1.086},{"date":"1993-04-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.086},{"date":"1993-04-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.086},{"date":"1993-05-03","fuel":"gasoline","grade":"all","formulation":"all","price":1.086},{"date":"1993-05-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.086},{"date":"1993-05-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.086},{"date":"1993-05-10","fuel":"gasoline","grade":"all","formulation":"all","price":1.097},{"date":"1993-05-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.097},{"date":"1993-05-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.097},{"date":"1993-05-17","fuel":"gasoline","grade":"all","formulation":"all","price":1.106},{"date":"1993-05-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.106},{"date":"1993-05-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1993-05-24","fuel":"gasoline","grade":"all","formulation":"all","price":1.106},{"date":"1993-05-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.106},{"date":"1993-05-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1993-05-31","fuel":"gasoline","grade":"all","formulation":"all","price":1.107},{"date":"1993-05-31","fuel":"gasoline","grade":"regular","formulation":"all","price":1.107},{"date":"1993-05-31","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.107},{"date":"1993-06-07","fuel":"gasoline","grade":"all","formulation":"all","price":1.104},{"date":"1993-06-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.104},{"date":"1993-06-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.104},{"date":"1993-06-14","fuel":"gasoline","grade":"all","formulation":"all","price":1.101},{"date":"1993-06-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.101},{"date":"1993-06-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.101},{"date":"1993-06-21","fuel":"gasoline","grade":"all","formulation":"all","price":1.095},{"date":"1993-06-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.095},{"date":"1993-06-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.095},{"date":"1993-06-28","fuel":"gasoline","grade":"all","formulation":"all","price":1.089},{"date":"1993-06-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.089},{"date":"1993-06-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.089},{"date":"1993-07-05","fuel":"gasoline","grade":"all","formulation":"all","price":1.086},{"date":"1993-07-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.086},{"date":"1993-07-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.086},{"date":"1993-07-12","fuel":"gasoline","grade":"all","formulation":"all","price":1.081},{"date":"1993-07-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.081},{"date":"1993-07-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.081},{"date":"1993-07-19","fuel":"gasoline","grade":"all","formulation":"all","price":1.075},{"date":"1993-07-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.075},{"date":"1993-07-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.075},{"date":"1993-07-26","fuel":"gasoline","grade":"all","formulation":"all","price":1.069},{"date":"1993-07-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.069},{"date":"1993-07-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.069},{"date":"1993-08-02","fuel":"gasoline","grade":"all","formulation":"all","price":1.062},{"date":"1993-08-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.062},{"date":"1993-08-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1993-08-09","fuel":"gasoline","grade":"all","formulation":"all","price":1.06},{"date":"1993-08-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.06},{"date":"1993-08-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.06},{"date":"1993-08-16","fuel":"gasoline","grade":"all","formulation":"all","price":1.059},{"date":"1993-08-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.059},{"date":"1993-08-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.059},{"date":"1993-08-23","fuel":"gasoline","grade":"all","formulation":"all","price":1.065},{"date":"1993-08-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.065},{"date":"1993-08-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.065},{"date":"1993-08-30","fuel":"gasoline","grade":"all","formulation":"all","price":1.062},{"date":"1993-08-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.062},{"date":"1993-08-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1993-09-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.055},{"date":"1993-09-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.055},{"date":"1993-09-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.055},{"date":"1993-09-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.051},{"date":"1993-09-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.051},{"date":"1993-09-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.051},{"date":"1993-09-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.045},{"date":"1993-09-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.045},{"date":"1993-09-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.045},{"date":"1993-09-27","fuel":"gasoline","grade":"all","formulation":"all","price":1.047},{"date":"1993-09-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.047},{"date":"1993-09-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.047},{"date":"1993-10-04","fuel":"gasoline","grade":"all","formulation":"all","price":1.092},{"date":"1993-10-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.092},{"date":"1993-10-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.092},{"date":"1993-10-11","fuel":"gasoline","grade":"all","formulation":"all","price":1.09},{"date":"1993-10-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.09},{"date":"1993-10-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.09},{"date":"1993-10-18","fuel":"gasoline","grade":"all","formulation":"all","price":1.093},{"date":"1993-10-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.093},{"date":"1993-10-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.093},{"date":"1993-10-25","fuel":"gasoline","grade":"all","formulation":"all","price":1.092},{"date":"1993-10-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.092},{"date":"1993-10-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.092},{"date":"1993-11-01","fuel":"gasoline","grade":"all","formulation":"all","price":1.084},{"date":"1993-11-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.084},{"date":"1993-11-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.084},{"date":"1993-11-08","fuel":"gasoline","grade":"all","formulation":"all","price":1.075},{"date":"1993-11-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.075},{"date":"1993-11-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.075},{"date":"1993-11-15","fuel":"gasoline","grade":"all","formulation":"all","price":1.064},{"date":"1993-11-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.064},{"date":"1993-11-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.064},{"date":"1993-11-22","fuel":"gasoline","grade":"all","formulation":"all","price":1.058},{"date":"1993-11-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.058},{"date":"1993-11-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.058},{"date":"1993-11-29","fuel":"gasoline","grade":"all","formulation":"all","price":1.051},{"date":"1993-11-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.051},{"date":"1993-11-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.051},{"date":"1993-12-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.036},{"date":"1993-12-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.036},{"date":"1993-12-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.036},{"date":"1993-12-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.018},{"date":"1993-12-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.018},{"date":"1993-12-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.018},{"date":"1993-12-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.003},{"date":"1993-12-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.003},{"date":"1993-12-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.003},{"date":"1993-12-27","fuel":"gasoline","grade":"all","formulation":"all","price":0.999},{"date":"1993-12-27","fuel":"gasoline","grade":"regular","formulation":"all","price":0.999},{"date":"1993-12-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":0.999},{"date":"1994-01-03","fuel":"gasoline","grade":"all","formulation":"all","price":0.992},{"date":"1994-01-03","fuel":"gasoline","grade":"regular","formulation":"all","price":0.992},{"date":"1994-01-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":0.992},{"date":"1994-01-10","fuel":"gasoline","grade":"all","formulation":"all","price":0.995},{"date":"1994-01-10","fuel":"gasoline","grade":"regular","formulation":"all","price":0.995},{"date":"1994-01-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":0.995},{"date":"1994-01-17","fuel":"gasoline","grade":"all","formulation":"all","price":1.001},{"date":"1994-01-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.001},{"date":"1994-01-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.001},{"date":"1994-01-24","fuel":"gasoline","grade":"all","formulation":"all","price":0.999},{"date":"1994-01-24","fuel":"gasoline","grade":"regular","formulation":"all","price":0.999},{"date":"1994-01-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":0.999},{"date":"1994-01-31","fuel":"gasoline","grade":"all","formulation":"all","price":1.005},{"date":"1994-01-31","fuel":"gasoline","grade":"regular","formulation":"all","price":1.005},{"date":"1994-01-31","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.005},{"date":"1994-02-07","fuel":"gasoline","grade":"all","formulation":"all","price":1.007},{"date":"1994-02-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.007},{"date":"1994-02-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.007},{"date":"1994-02-14","fuel":"gasoline","grade":"all","formulation":"all","price":1.016},{"date":"1994-02-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.016},{"date":"1994-02-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.016},{"date":"1994-02-21","fuel":"gasoline","grade":"all","formulation":"all","price":1.009},{"date":"1994-02-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.009},{"date":"1994-02-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.009},{"date":"1994-02-28","fuel":"gasoline","grade":"all","formulation":"all","price":1.004},{"date":"1994-02-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.004},{"date":"1994-02-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.004},{"date":"1994-03-07","fuel":"gasoline","grade":"all","formulation":"all","price":1.007},{"date":"1994-03-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.007},{"date":"1994-03-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.007},{"date":"1994-03-14","fuel":"gasoline","grade":"all","formulation":"all","price":1.005},{"date":"1994-03-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.005},{"date":"1994-03-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.005},{"date":"1994-03-21","fuel":"gasoline","grade":"all","formulation":"all","price":1.007},{"date":"1994-03-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.007},{"date":"1994-03-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.007},{"date":"1994-03-21","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1994-03-28","fuel":"gasoline","grade":"all","formulation":"all","price":1.012},{"date":"1994-03-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.012},{"date":"1994-03-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.012},{"date":"1994-03-28","fuel":"diesel","grade":"all","formulation":"NA","price":1.107},{"date":"1994-04-04","fuel":"gasoline","grade":"all","formulation":"all","price":1.011},{"date":"1994-04-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.011},{"date":"1994-04-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.011},{"date":"1994-04-04","fuel":"diesel","grade":"all","formulation":"NA","price":1.109},{"date":"1994-04-11","fuel":"gasoline","grade":"all","formulation":"all","price":1.028},{"date":"1994-04-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.028},{"date":"1994-04-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.028},{"date":"1994-04-11","fuel":"diesel","grade":"all","formulation":"NA","price":1.108},{"date":"1994-04-18","fuel":"gasoline","grade":"all","formulation":"all","price":1.033},{"date":"1994-04-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.033},{"date":"1994-04-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.033},{"date":"1994-04-18","fuel":"diesel","grade":"all","formulation":"NA","price":1.105},{"date":"1994-04-25","fuel":"gasoline","grade":"all","formulation":"all","price":1.037},{"date":"1994-04-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.037},{"date":"1994-04-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.037},{"date":"1994-04-25","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1994-05-02","fuel":"gasoline","grade":"all","formulation":"all","price":1.04},{"date":"1994-05-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.04},{"date":"1994-05-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.04},{"date":"1994-05-02","fuel":"diesel","grade":"all","formulation":"NA","price":1.104},{"date":"1994-05-09","fuel":"gasoline","grade":"all","formulation":"all","price":1.045},{"date":"1994-05-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.045},{"date":"1994-05-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.045},{"date":"1994-05-09","fuel":"diesel","grade":"all","formulation":"NA","price":1.101},{"date":"1994-05-16","fuel":"gasoline","grade":"all","formulation":"all","price":1.046},{"date":"1994-05-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.046},{"date":"1994-05-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.046},{"date":"1994-05-16","fuel":"diesel","grade":"all","formulation":"NA","price":1.099},{"date":"1994-05-23","fuel":"gasoline","grade":"all","formulation":"all","price":1.05},{"date":"1994-05-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.05},{"date":"1994-05-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.05},{"date":"1994-05-23","fuel":"diesel","grade":"all","formulation":"NA","price":1.099},{"date":"1994-05-30","fuel":"gasoline","grade":"all","formulation":"all","price":1.056},{"date":"1994-05-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.056},{"date":"1994-05-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.056},{"date":"1994-05-30","fuel":"diesel","grade":"all","formulation":"NA","price":1.098},{"date":"1994-06-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.065},{"date":"1994-06-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.065},{"date":"1994-06-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.065},{"date":"1994-06-06","fuel":"diesel","grade":"all","formulation":"NA","price":1.101},{"date":"1994-06-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.073},{"date":"1994-06-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.073},{"date":"1994-06-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.073},{"date":"1994-06-13","fuel":"diesel","grade":"all","formulation":"NA","price":1.098},{"date":"1994-06-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.079},{"date":"1994-06-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.079},{"date":"1994-06-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.079},{"date":"1994-06-20","fuel":"diesel","grade":"all","formulation":"NA","price":1.103},{"date":"1994-06-27","fuel":"gasoline","grade":"all","formulation":"all","price":1.095},{"date":"1994-06-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.095},{"date":"1994-06-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.095},{"date":"1994-06-27","fuel":"diesel","grade":"all","formulation":"NA","price":1.108},{"date":"1994-07-04","fuel":"gasoline","grade":"all","formulation":"all","price":1.097},{"date":"1994-07-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.097},{"date":"1994-07-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.097},{"date":"1994-07-04","fuel":"diesel","grade":"all","formulation":"NA","price":1.109},{"date":"1994-07-11","fuel":"gasoline","grade":"all","formulation":"all","price":1.103},{"date":"1994-07-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.103},{"date":"1994-07-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.103},{"date":"1994-07-11","fuel":"diesel","grade":"all","formulation":"NA","price":1.11},{"date":"1994-07-18","fuel":"gasoline","grade":"all","formulation":"all","price":1.109},{"date":"1994-07-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.109},{"date":"1994-07-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.109},{"date":"1994-07-18","fuel":"diesel","grade":"all","formulation":"NA","price":1.111},{"date":"1994-07-25","fuel":"gasoline","grade":"all","formulation":"all","price":1.114},{"date":"1994-07-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.114},{"date":"1994-07-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.114},{"date":"1994-07-25","fuel":"diesel","grade":"all","formulation":"NA","price":1.111},{"date":"1994-08-01","fuel":"gasoline","grade":"all","formulation":"all","price":1.13},{"date":"1994-08-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.13},{"date":"1994-08-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.13},{"date":"1994-08-01","fuel":"diesel","grade":"all","formulation":"NA","price":1.116},{"date":"1994-08-08","fuel":"gasoline","grade":"all","formulation":"all","price":1.157},{"date":"1994-08-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.157},{"date":"1994-08-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.157},{"date":"1994-08-08","fuel":"diesel","grade":"all","formulation":"NA","price":1.127},{"date":"1994-08-15","fuel":"gasoline","grade":"all","formulation":"all","price":1.161},{"date":"1994-08-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.161},{"date":"1994-08-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.161},{"date":"1994-08-15","fuel":"diesel","grade":"all","formulation":"NA","price":1.127},{"date":"1994-08-22","fuel":"gasoline","grade":"all","formulation":"all","price":1.165},{"date":"1994-08-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.165},{"date":"1994-08-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.165},{"date":"1994-08-22","fuel":"diesel","grade":"all","formulation":"NA","price":1.124},{"date":"1994-08-29","fuel":"gasoline","grade":"all","formulation":"all","price":1.161},{"date":"1994-08-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.161},{"date":"1994-08-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.161},{"date":"1994-08-29","fuel":"diesel","grade":"all","formulation":"NA","price":1.122},{"date":"1994-09-05","fuel":"gasoline","grade":"all","formulation":"all","price":1.156},{"date":"1994-09-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.156},{"date":"1994-09-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.156},{"date":"1994-09-05","fuel":"diesel","grade":"all","formulation":"NA","price":1.126},{"date":"1994-09-12","fuel":"gasoline","grade":"all","formulation":"all","price":1.15},{"date":"1994-09-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.15},{"date":"1994-09-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.15},{"date":"1994-09-12","fuel":"diesel","grade":"all","formulation":"NA","price":1.128},{"date":"1994-09-19","fuel":"gasoline","grade":"all","formulation":"all","price":1.14},{"date":"1994-09-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.14},{"date":"1994-09-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.14},{"date":"1994-09-19","fuel":"diesel","grade":"all","formulation":"NA","price":1.126},{"date":"1994-09-26","fuel":"gasoline","grade":"all","formulation":"all","price":1.129},{"date":"1994-09-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.129},{"date":"1994-09-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.129},{"date":"1994-09-26","fuel":"diesel","grade":"all","formulation":"NA","price":1.12},{"date":"1994-10-03","fuel":"gasoline","grade":"all","formulation":"all","price":1.12},{"date":"1994-10-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.12},{"date":"1994-10-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.12},{"date":"1994-10-03","fuel":"diesel","grade":"all","formulation":"NA","price":1.118},{"date":"1994-10-10","fuel":"gasoline","grade":"all","formulation":"all","price":1.114},{"date":"1994-10-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.114},{"date":"1994-10-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.114},{"date":"1994-10-10","fuel":"diesel","grade":"all","formulation":"NA","price":1.117},{"date":"1994-10-17","fuel":"gasoline","grade":"all","formulation":"all","price":1.106},{"date":"1994-10-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.106},{"date":"1994-10-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1994-10-17","fuel":"diesel","grade":"all","formulation":"NA","price":1.119},{"date":"1994-10-24","fuel":"gasoline","grade":"all","formulation":"all","price":1.107},{"date":"1994-10-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.107},{"date":"1994-10-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.107},{"date":"1994-10-24","fuel":"diesel","grade":"all","formulation":"NA","price":1.122},{"date":"1994-10-31","fuel":"gasoline","grade":"all","formulation":"all","price":1.121},{"date":"1994-10-31","fuel":"gasoline","grade":"regular","formulation":"all","price":1.121},{"date":"1994-10-31","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.121},{"date":"1994-10-31","fuel":"diesel","grade":"all","formulation":"NA","price":1.133},{"date":"1994-11-07","fuel":"gasoline","grade":"all","formulation":"all","price":1.123},{"date":"1994-11-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.123},{"date":"1994-11-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.123},{"date":"1994-11-07","fuel":"diesel","grade":"all","formulation":"NA","price":1.133},{"date":"1994-11-14","fuel":"gasoline","grade":"all","formulation":"all","price":1.122},{"date":"1994-11-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.122},{"date":"1994-11-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.122},{"date":"1994-11-14","fuel":"diesel","grade":"all","formulation":"NA","price":1.135},{"date":"1994-11-21","fuel":"gasoline","grade":"all","formulation":"all","price":1.113},{"date":"1994-11-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.113},{"date":"1994-11-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.113},{"date":"1994-11-21","fuel":"diesel","grade":"all","formulation":"NA","price":1.13},{"date":"1994-11-28","fuel":"gasoline","grade":"all","formulation":"all","price":1.117},{"date":"1994-11-28","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.175},{"date":"1994-11-28","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.259},{"date":"1994-11-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.105},{"date":"1994-11-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.082},{"date":"1994-11-28","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.149},{"date":"1994-11-28","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.197},{"date":"1994-11-28","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.174},{"date":"1994-11-28","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.249},{"date":"1994-11-28","fuel":"gasoline","grade":"premium","formulation":"all","price":1.303},{"date":"1994-11-28","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.27},{"date":"1994-11-28","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.351},{"date":"1994-11-28","fuel":"diesel","grade":"all","formulation":"NA","price":1.126},{"date":"1994-12-05","fuel":"gasoline","grade":"all","formulation":"all","price":1.127},{"date":"1994-12-05","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.143},{"date":"1994-12-05","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.254},{"date":"1994-12-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.103},{"date":"1994-12-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.075},{"date":"1994-12-05","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.169},{"date":"1994-12-05","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.197},{"date":"1994-12-05","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.167},{"date":"1994-12-05","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.272},{"date":"1994-12-05","fuel":"gasoline","grade":"premium","formulation":"all","price":1.301},{"date":"1994-12-05","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.26},{"date":"1994-12-05","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.37},{"date":"1994-12-05","fuel":"diesel","grade":"all","formulation":"NA","price":1.123},{"date":"1994-12-12","fuel":"gasoline","grade":"all","formulation":"all","price":1.131},{"date":"1994-12-12","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.118},{"date":"1994-12-12","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.231},{"date":"1994-12-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.095},{"date":"1994-12-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.064},{"date":"1994-12-12","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.167},{"date":"1994-12-12","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.188},{"date":"1994-12-12","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.156},{"date":"1994-12-12","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.268},{"date":"1994-12-12","fuel":"gasoline","grade":"premium","formulation":"all","price":1.288},{"date":"1994-12-12","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.244},{"date":"1994-12-12","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.363},{"date":"1994-12-12","fuel":"diesel","grade":"all","formulation":"NA","price":1.114},{"date":"1994-12-19","fuel":"gasoline","grade":"all","formulation":"all","price":1.134},{"date":"1994-12-19","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.099},{"date":"1994-12-19","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.216},{"date":"1994-12-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.087},{"date":"1994-12-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.056},{"date":"1994-12-19","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.167},{"date":"1994-12-19","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.179},{"date":"1994-12-19","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.147},{"date":"1994-12-19","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.262},{"date":"1994-12-19","fuel":"gasoline","grade":"premium","formulation":"all","price":1.279},{"date":"1994-12-19","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.233},{"date":"1994-12-19","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.36},{"date":"1994-12-19","fuel":"diesel","grade":"all","formulation":"NA","price":1.109},{"date":"1994-12-26","fuel":"gasoline","grade":"all","formulation":"all","price":1.125},{"date":"1994-12-26","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.088},{"date":"1994-12-26","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.213},{"date":"1994-12-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.077},{"date":"1994-12-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.044},{"date":"1994-12-26","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.165},{"date":"1994-12-26","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.171},{"date":"1994-12-26","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.136},{"date":"1994-12-26","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.265},{"date":"1994-12-26","fuel":"gasoline","grade":"premium","formulation":"all","price":1.27},{"date":"1994-12-26","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.222},{"date":"1994-12-26","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.358},{"date":"1994-12-26","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1995-01-02","fuel":"gasoline","grade":"all","formulation":"all","price":1.127},{"date":"1995-01-02","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.104},{"date":"1995-01-02","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.231},{"date":"1995-01-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.079},{"date":"1995-01-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.063},{"date":"1995-01-02","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.167},{"date":"1995-01-02","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.17},{"date":"1995-01-02","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.159},{"date":"1995-01-02","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.298},{"date":"1995-01-02","fuel":"gasoline","grade":"premium","formulation":"all","price":1.272},{"date":"1995-01-02","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.25},{"date":"1995-01-02","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.386},{"date":"1995-01-02","fuel":"diesel","grade":"all","formulation":"NA","price":1.104},{"date":"1995-01-09","fuel":"gasoline","grade":"all","formulation":"all","price":1.134},{"date":"1995-01-09","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.111},{"date":"1995-01-09","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.232},{"date":"1995-01-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.086},{"date":"1995-01-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.07},{"date":"1995-01-09","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.169},{"date":"1995-01-09","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.177},{"date":"1995-01-09","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.164},{"date":"1995-01-09","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.3},{"date":"1995-01-09","fuel":"gasoline","grade":"premium","formulation":"all","price":1.279},{"date":"1995-01-09","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.256},{"date":"1995-01-09","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.387},{"date":"1995-01-09","fuel":"diesel","grade":"all","formulation":"NA","price":1.102},{"date":"1995-01-16","fuel":"gasoline","grade":"all","formulation":"all","price":1.126},{"date":"1995-01-16","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.102},{"date":"1995-01-16","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.231},{"date":"1995-01-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.078},{"date":"1995-01-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1995-01-16","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.169},{"date":"1995-01-16","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.168},{"date":"1995-01-16","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.155},{"date":"1995-01-16","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.299},{"date":"1995-01-16","fuel":"gasoline","grade":"premium","formulation":"all","price":1.271},{"date":"1995-01-16","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.249},{"date":"1995-01-16","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.385},{"date":"1995-01-16","fuel":"diesel","grade":"all","formulation":"NA","price":1.1},{"date":"1995-01-23","fuel":"gasoline","grade":"all","formulation":"all","price":1.132},{"date":"1995-01-23","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.11},{"date":"1995-01-23","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.226},{"date":"1995-01-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.083},{"date":"1995-01-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.068},{"date":"1995-01-23","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.165},{"date":"1995-01-23","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.177},{"date":"1995-01-23","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.165},{"date":"1995-01-23","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.296},{"date":"1995-01-23","fuel":"gasoline","grade":"premium","formulation":"all","price":1.277},{"date":"1995-01-23","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.256},{"date":"1995-01-23","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.378},{"date":"1995-01-23","fuel":"diesel","grade":"all","formulation":"NA","price":1.095},{"date":"1995-01-30","fuel":"gasoline","grade":"all","formulation":"all","price":1.131},{"date":"1995-01-30","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.109},{"date":"1995-01-30","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.221},{"date":"1995-01-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.083},{"date":"1995-01-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.068},{"date":"1995-01-30","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.162},{"date":"1995-01-30","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.176},{"date":"1995-01-30","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.163},{"date":"1995-01-30","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.291},{"date":"1995-01-30","fuel":"gasoline","grade":"premium","formulation":"all","price":1.275},{"date":"1995-01-30","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.255},{"date":"1995-01-30","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.37},{"date":"1995-01-30","fuel":"diesel","grade":"all","formulation":"NA","price":1.09},{"date":"1995-02-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.124},{"date":"1995-02-06","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.103},{"date":"1995-02-06","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.218},{"date":"1995-02-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.076},{"date":"1995-02-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1995-02-06","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.159},{"date":"1995-02-06","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.169},{"date":"1995-02-06","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.157},{"date":"1995-02-06","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.288},{"date":"1995-02-06","fuel":"gasoline","grade":"premium","formulation":"all","price":1.27},{"date":"1995-02-06","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.25},{"date":"1995-02-06","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.368},{"date":"1995-02-06","fuel":"diesel","grade":"all","formulation":"NA","price":1.086},{"date":"1995-02-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.121},{"date":"1995-02-13","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.099},{"date":"1995-02-13","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.218},{"date":"1995-02-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.074},{"date":"1995-02-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.058},{"date":"1995-02-13","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.158},{"date":"1995-02-13","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.166},{"date":"1995-02-13","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.153},{"date":"1995-02-13","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.285},{"date":"1995-02-13","fuel":"gasoline","grade":"premium","formulation":"all","price":1.265},{"date":"1995-02-13","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.243},{"date":"1995-02-13","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.367},{"date":"1995-02-13","fuel":"diesel","grade":"all","formulation":"NA","price":1.088},{"date":"1995-02-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.115},{"date":"1995-02-20","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.093},{"date":"1995-02-20","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.213},{"date":"1995-02-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.067},{"date":"1995-02-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.052},{"date":"1995-02-20","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.153},{"date":"1995-02-20","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.16},{"date":"1995-02-20","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.148},{"date":"1995-02-20","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.28},{"date":"1995-02-20","fuel":"gasoline","grade":"premium","formulation":"all","price":1.259},{"date":"1995-02-20","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.239},{"date":"1995-02-20","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.363},{"date":"1995-02-20","fuel":"diesel","grade":"all","formulation":"NA","price":1.088},{"date":"1995-02-27","fuel":"gasoline","grade":"all","formulation":"all","price":1.121},{"date":"1995-02-27","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.101},{"date":"1995-02-27","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.211},{"date":"1995-02-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.073},{"date":"1995-02-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.06},{"date":"1995-02-27","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.152},{"date":"1995-02-27","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.164},{"date":"1995-02-27","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.153},{"date":"1995-02-27","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.276},{"date":"1995-02-27","fuel":"gasoline","grade":"premium","formulation":"all","price":1.265},{"date":"1995-02-27","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.246},{"date":"1995-02-27","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.362},{"date":"1995-02-27","fuel":"diesel","grade":"all","formulation":"NA","price":1.089},{"date":"1995-03-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.123},{"date":"1995-03-06","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.103},{"date":"1995-03-06","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.209},{"date":"1995-03-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.076},{"date":"1995-03-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.063},{"date":"1995-03-06","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.149},{"date":"1995-03-06","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.167},{"date":"1995-03-06","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.157},{"date":"1995-03-06","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.275},{"date":"1995-03-06","fuel":"gasoline","grade":"premium","formulation":"all","price":1.263},{"date":"1995-03-06","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.244},{"date":"1995-03-06","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.358},{"date":"1995-03-06","fuel":"diesel","grade":"all","formulation":"NA","price":1.089},{"date":"1995-03-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.116},{"date":"1995-03-13","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.096},{"date":"1995-03-13","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.202},{"date":"1995-03-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.069},{"date":"1995-03-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.056},{"date":"1995-03-13","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.141},{"date":"1995-03-13","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.158},{"date":"1995-03-13","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.15},{"date":"1995-03-13","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.268},{"date":"1995-03-13","fuel":"gasoline","grade":"premium","formulation":"all","price":1.256},{"date":"1995-03-13","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.238},{"date":"1995-03-13","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.353},{"date":"1995-03-13","fuel":"diesel","grade":"all","formulation":"NA","price":1.088},{"date":"1995-03-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.114},{"date":"1995-03-20","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.095},{"date":"1995-03-20","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.201},{"date":"1995-03-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.068},{"date":"1995-03-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.055},{"date":"1995-03-20","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.14},{"date":"1995-03-20","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.158},{"date":"1995-03-20","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.149},{"date":"1995-03-20","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.267},{"date":"1995-03-20","fuel":"gasoline","grade":"premium","formulation":"all","price":1.254},{"date":"1995-03-20","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.236},{"date":"1995-03-20","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.351},{"date":"1995-03-20","fuel":"diesel","grade":"all","formulation":"NA","price":1.085},{"date":"1995-03-27","fuel":"gasoline","grade":"all","formulation":"all","price":1.121},{"date":"1995-03-27","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.102},{"date":"1995-03-27","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.198},{"date":"1995-03-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.075},{"date":"1995-03-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.063},{"date":"1995-03-27","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.138},{"date":"1995-03-27","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.162},{"date":"1995-03-27","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.153},{"date":"1995-03-27","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.265},{"date":"1995-03-27","fuel":"gasoline","grade":"premium","formulation":"all","price":1.259},{"date":"1995-03-27","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.241},{"date":"1995-03-27","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.349},{"date":"1995-03-27","fuel":"diesel","grade":"all","formulation":"NA","price":1.088},{"date":"1995-04-03","fuel":"gasoline","grade":"all","formulation":"all","price":1.133},{"date":"1995-04-03","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.116},{"date":"1995-04-03","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.198},{"date":"1995-04-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.087},{"date":"1995-04-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.077},{"date":"1995-04-03","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.14},{"date":"1995-04-03","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.174},{"date":"1995-04-03","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.167},{"date":"1995-04-03","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.266},{"date":"1995-04-03","fuel":"gasoline","grade":"premium","formulation":"all","price":1.27},{"date":"1995-04-03","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.255},{"date":"1995-04-03","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.35},{"date":"1995-04-03","fuel":"diesel","grade":"all","formulation":"NA","price":1.094},{"date":"1995-04-10","fuel":"gasoline","grade":"all","formulation":"all","price":1.149},{"date":"1995-04-10","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.134},{"date":"1995-04-10","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.207},{"date":"1995-04-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.103},{"date":"1995-04-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.094},{"date":"1995-04-10","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.149},{"date":"1995-04-10","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.19},{"date":"1995-04-10","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.186},{"date":"1995-04-10","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.273},{"date":"1995-04-10","fuel":"gasoline","grade":"premium","formulation":"all","price":1.286},{"date":"1995-04-10","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.273},{"date":"1995-04-10","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.357},{"date":"1995-04-10","fuel":"diesel","grade":"all","formulation":"NA","price":1.101},{"date":"1995-04-17","fuel":"gasoline","grade":"all","formulation":"all","price":1.163},{"date":"1995-04-17","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.149},{"date":"1995-04-17","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.215},{"date":"1995-04-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.117},{"date":"1995-04-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.11},{"date":"1995-04-17","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.16},{"date":"1995-04-17","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.205},{"date":"1995-04-17","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.201},{"date":"1995-04-17","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.278},{"date":"1995-04-17","fuel":"gasoline","grade":"premium","formulation":"all","price":1.3},{"date":"1995-04-17","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.29},{"date":"1995-04-17","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.361},{"date":"1995-04-17","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1995-04-24","fuel":"gasoline","grade":"all","formulation":"all","price":1.184},{"date":"1995-04-24","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.173},{"date":"1995-04-24","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.231},{"date":"1995-04-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.138},{"date":"1995-04-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.133},{"date":"1995-04-24","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.176},{"date":"1995-04-24","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.226},{"date":"1995-04-24","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.224},{"date":"1995-04-24","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.291},{"date":"1995-04-24","fuel":"gasoline","grade":"premium","formulation":"all","price":1.323},{"date":"1995-04-24","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.315},{"date":"1995-04-24","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.377},{"date":"1995-04-24","fuel":"diesel","grade":"all","formulation":"NA","price":1.115},{"date":"1995-05-01","fuel":"gasoline","grade":"all","formulation":"all","price":1.194},{"date":"1995-05-01","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.181},{"date":"1995-05-01","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.242},{"date":"1995-05-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.148},{"date":"1995-05-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.141},{"date":"1995-05-01","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.188},{"date":"1995-05-01","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.236},{"date":"1995-05-01","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.234},{"date":"1995-05-01","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.305},{"date":"1995-05-01","fuel":"gasoline","grade":"premium","formulation":"all","price":1.332},{"date":"1995-05-01","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.323},{"date":"1995-05-01","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.389},{"date":"1995-05-01","fuel":"diesel","grade":"all","formulation":"NA","price":1.119},{"date":"1995-05-08","fuel":"gasoline","grade":"all","formulation":"all","price":1.216},{"date":"1995-05-08","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.204},{"date":"1995-05-08","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.261},{"date":"1995-05-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.169},{"date":"1995-05-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.164},{"date":"1995-05-08","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.205},{"date":"1995-05-08","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.259},{"date":"1995-05-08","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.257},{"date":"1995-05-08","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.324},{"date":"1995-05-08","fuel":"gasoline","grade":"premium","formulation":"all","price":1.356},{"date":"1995-05-08","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.349},{"date":"1995-05-08","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.408},{"date":"1995-05-08","fuel":"diesel","grade":"all","formulation":"NA","price":1.126},{"date":"1995-05-15","fuel":"gasoline","grade":"all","formulation":"all","price":1.226},{"date":"1995-05-15","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.213},{"date":"1995-05-15","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.273},{"date":"1995-05-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.179},{"date":"1995-05-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.173},{"date":"1995-05-15","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.215},{"date":"1995-05-15","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.269},{"date":"1995-05-15","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.267},{"date":"1995-05-15","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.334},{"date":"1995-05-15","fuel":"gasoline","grade":"premium","formulation":"all","price":1.364},{"date":"1995-05-15","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.357},{"date":"1995-05-15","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.418},{"date":"1995-05-15","fuel":"diesel","grade":"all","formulation":"NA","price":1.126},{"date":"1995-05-22","fuel":"gasoline","grade":"all","formulation":"all","price":1.244},{"date":"1995-05-22","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.232},{"date":"1995-05-22","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.285},{"date":"1995-05-22","fuel":"gasoline","grade":"regular","formulation":"all","price":1.197},{"date":"1995-05-22","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.191},{"date":"1995-05-22","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.233},{"date":"1995-05-22","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.288},{"date":"1995-05-22","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.285},{"date":"1995-05-22","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.344},{"date":"1995-05-22","fuel":"gasoline","grade":"premium","formulation":"all","price":1.383},{"date":"1995-05-22","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.376},{"date":"1995-05-22","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.429},{"date":"1995-05-22","fuel":"diesel","grade":"all","formulation":"NA","price":1.124},{"date":"1995-05-29","fuel":"gasoline","grade":"all","formulation":"all","price":1.246},{"date":"1995-05-29","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.234},{"date":"1995-05-29","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.291},{"date":"1995-05-29","fuel":"gasoline","grade":"regular","formulation":"all","price":1.199},{"date":"1995-05-29","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.193},{"date":"1995-05-29","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.239},{"date":"1995-05-29","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.29},{"date":"1995-05-29","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.288},{"date":"1995-05-29","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.351},{"date":"1995-05-29","fuel":"gasoline","grade":"premium","formulation":"all","price":1.386},{"date":"1995-05-29","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.379},{"date":"1995-05-29","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.435},{"date":"1995-05-29","fuel":"diesel","grade":"all","formulation":"NA","price":1.13},{"date":"1995-06-05","fuel":"gasoline","grade":"all","formulation":"all","price":1.246},{"date":"1995-06-05","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.234},{"date":"1995-06-05","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.289},{"date":"1995-06-05","fuel":"gasoline","grade":"regular","formulation":"all","price":1.199},{"date":"1995-06-05","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.194},{"date":"1995-06-05","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.238},{"date":"1995-06-05","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.29},{"date":"1995-06-05","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.288},{"date":"1995-06-05","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.349},{"date":"1995-06-05","fuel":"gasoline","grade":"premium","formulation":"all","price":1.386},{"date":"1995-06-05","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.38},{"date":"1995-06-05","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.434},{"date":"1995-06-05","fuel":"diesel","grade":"all","formulation":"NA","price":1.124},{"date":"1995-06-12","fuel":"gasoline","grade":"all","formulation":"all","price":1.243},{"date":"1995-06-12","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.23},{"date":"1995-06-12","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.287},{"date":"1995-06-12","fuel":"gasoline","grade":"regular","formulation":"all","price":1.196},{"date":"1995-06-12","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.19},{"date":"1995-06-12","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.237},{"date":"1995-06-12","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.288},{"date":"1995-06-12","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.286},{"date":"1995-06-12","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.348},{"date":"1995-06-12","fuel":"gasoline","grade":"premium","formulation":"all","price":1.383},{"date":"1995-06-12","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.375},{"date":"1995-06-12","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.433},{"date":"1995-06-12","fuel":"diesel","grade":"all","formulation":"NA","price":1.122},{"date":"1995-06-19","fuel":"gasoline","grade":"all","formulation":"all","price":1.236},{"date":"1995-06-19","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.224},{"date":"1995-06-19","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.285},{"date":"1995-06-19","fuel":"gasoline","grade":"regular","formulation":"all","price":1.189},{"date":"1995-06-19","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.183},{"date":"1995-06-19","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.234},{"date":"1995-06-19","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.28},{"date":"1995-06-19","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.277},{"date":"1995-06-19","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.345},{"date":"1995-06-19","fuel":"gasoline","grade":"premium","formulation":"all","price":1.376},{"date":"1995-06-19","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.368},{"date":"1995-06-19","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.432},{"date":"1995-06-19","fuel":"diesel","grade":"all","formulation":"NA","price":1.117},{"date":"1995-06-26","fuel":"gasoline","grade":"all","formulation":"all","price":1.229},{"date":"1995-06-26","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.217},{"date":"1995-06-26","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.28},{"date":"1995-06-26","fuel":"gasoline","grade":"regular","formulation":"all","price":1.182},{"date":"1995-06-26","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.177},{"date":"1995-06-26","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.228},{"date":"1995-06-26","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.273},{"date":"1995-06-26","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.27},{"date":"1995-06-26","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.341},{"date":"1995-06-26","fuel":"gasoline","grade":"premium","formulation":"all","price":1.37},{"date":"1995-06-26","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.363},{"date":"1995-06-26","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.428},{"date":"1995-06-26","fuel":"diesel","grade":"all","formulation":"NA","price":1.112},{"date":"1995-07-03","fuel":"gasoline","grade":"all","formulation":"all","price":1.222},{"date":"1995-07-03","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.209},{"date":"1995-07-03","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.275},{"date":"1995-07-03","fuel":"gasoline","grade":"regular","formulation":"all","price":1.175},{"date":"1995-07-03","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.169},{"date":"1995-07-03","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.223},{"date":"1995-07-03","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.266},{"date":"1995-07-03","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.262},{"date":"1995-07-03","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.337},{"date":"1995-07-03","fuel":"gasoline","grade":"premium","formulation":"all","price":1.362},{"date":"1995-07-03","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.354},{"date":"1995-07-03","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.423},{"date":"1995-07-03","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1995-07-10","fuel":"gasoline","grade":"all","formulation":"all","price":1.212},{"date":"1995-07-10","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.2},{"date":"1995-07-10","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.269},{"date":"1995-07-10","fuel":"gasoline","grade":"regular","formulation":"all","price":1.165},{"date":"1995-07-10","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.159},{"date":"1995-07-10","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.216},{"date":"1995-07-10","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.255},{"date":"1995-07-10","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.252},{"date":"1995-07-10","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.333},{"date":"1995-07-10","fuel":"gasoline","grade":"premium","formulation":"all","price":1.352},{"date":"1995-07-10","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.344},{"date":"1995-07-10","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.416},{"date":"1995-07-10","fuel":"diesel","grade":"all","formulation":"NA","price":1.103},{"date":"1995-07-17","fuel":"gasoline","grade":"all","formulation":"all","price":1.2},{"date":"1995-07-17","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.189},{"date":"1995-07-17","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.26},{"date":"1995-07-17","fuel":"gasoline","grade":"regular","formulation":"all","price":1.153},{"date":"1995-07-17","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.148},{"date":"1995-07-17","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.207},{"date":"1995-07-17","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.244},{"date":"1995-07-17","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.243},{"date":"1995-07-17","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.325},{"date":"1995-07-17","fuel":"gasoline","grade":"premium","formulation":"all","price":1.342},{"date":"1995-07-17","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.335},{"date":"1995-07-17","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.409},{"date":"1995-07-17","fuel":"diesel","grade":"all","formulation":"NA","price":1.099},{"date":"1995-07-24","fuel":"gasoline","grade":"all","formulation":"all","price":1.191},{"date":"1995-07-24","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.179},{"date":"1995-07-24","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.248},{"date":"1995-07-24","fuel":"gasoline","grade":"regular","formulation":"all","price":1.144},{"date":"1995-07-24","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.138},{"date":"1995-07-24","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.196},{"date":"1995-07-24","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.236},{"date":"1995-07-24","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.234},{"date":"1995-07-24","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.314},{"date":"1995-07-24","fuel":"gasoline","grade":"premium","formulation":"all","price":1.333},{"date":"1995-07-24","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.325},{"date":"1995-07-24","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.397},{"date":"1995-07-24","fuel":"diesel","grade":"all","formulation":"NA","price":1.098},{"date":"1995-07-31","fuel":"gasoline","grade":"all","formulation":"all","price":1.179},{"date":"1995-07-31","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.166},{"date":"1995-07-31","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.237},{"date":"1995-07-31","fuel":"gasoline","grade":"regular","formulation":"all","price":1.132},{"date":"1995-07-31","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.126},{"date":"1995-07-31","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.183},{"date":"1995-07-31","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.222},{"date":"1995-07-31","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.22},{"date":"1995-07-31","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.304},{"date":"1995-07-31","fuel":"gasoline","grade":"premium","formulation":"all","price":1.319},{"date":"1995-07-31","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.311},{"date":"1995-07-31","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.387},{"date":"1995-07-31","fuel":"diesel","grade":"all","formulation":"NA","price":1.093},{"date":"1995-08-07","fuel":"gasoline","grade":"all","formulation":"all","price":1.174},{"date":"1995-08-07","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.164},{"date":"1995-08-07","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.229},{"date":"1995-08-07","fuel":"gasoline","grade":"regular","formulation":"all","price":1.127},{"date":"1995-08-07","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.124},{"date":"1995-08-07","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.174},{"date":"1995-08-07","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.217},{"date":"1995-08-07","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.216},{"date":"1995-08-07","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.296},{"date":"1995-08-07","fuel":"gasoline","grade":"premium","formulation":"all","price":1.316},{"date":"1995-08-07","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.309},{"date":"1995-08-07","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.379},{"date":"1995-08-07","fuel":"diesel","grade":"all","formulation":"NA","price":1.099},{"date":"1995-08-14","fuel":"gasoline","grade":"all","formulation":"all","price":1.172},{"date":"1995-08-14","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.162},{"date":"1995-08-14","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.221},{"date":"1995-08-14","fuel":"gasoline","grade":"regular","formulation":"all","price":1.125},{"date":"1995-08-14","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.121},{"date":"1995-08-14","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.166},{"date":"1995-08-14","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.215},{"date":"1995-08-14","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.214},{"date":"1995-08-14","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.288},{"date":"1995-08-14","fuel":"gasoline","grade":"premium","formulation":"all","price":1.312},{"date":"1995-08-14","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.306},{"date":"1995-08-14","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.372},{"date":"1995-08-14","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1995-08-21","fuel":"gasoline","grade":"all","formulation":"all","price":1.171},{"date":"1995-08-21","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.163},{"date":"1995-08-21","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.214},{"date":"1995-08-21","fuel":"gasoline","grade":"regular","formulation":"all","price":1.124},{"date":"1995-08-21","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.122},{"date":"1995-08-21","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.16},{"date":"1995-08-21","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.214},{"date":"1995-08-21","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.215},{"date":"1995-08-21","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.28},{"date":"1995-08-21","fuel":"gasoline","grade":"premium","formulation":"all","price":1.311},{"date":"1995-08-21","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.308},{"date":"1995-08-21","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.366},{"date":"1995-08-21","fuel":"diesel","grade":"all","formulation":"NA","price":1.106},{"date":"1995-08-28","fuel":"gasoline","grade":"all","formulation":"all","price":1.163},{"date":"1995-08-28","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.154},{"date":"1995-08-28","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.209},{"date":"1995-08-28","fuel":"gasoline","grade":"regular","formulation":"all","price":1.117},{"date":"1995-08-28","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.113},{"date":"1995-08-28","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.156},{"date":"1995-08-28","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.205},{"date":"1995-08-28","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.206},{"date":"1995-08-28","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.275},{"date":"1995-08-28","fuel":"gasoline","grade":"premium","formulation":"all","price":1.305},{"date":"1995-08-28","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.3},{"date":"1995-08-28","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.356},{"date":"1995-08-28","fuel":"diesel","grade":"all","formulation":"NA","price":1.109},{"date":"1995-09-04","fuel":"gasoline","grade":"all","formulation":"all","price":1.16},{"date":"1995-09-04","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.151},{"date":"1995-09-04","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.209},{"date":"1995-09-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.113},{"date":"1995-09-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.111},{"date":"1995-09-04","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.152},{"date":"1995-09-04","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.202},{"date":"1995-09-04","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.202},{"date":"1995-09-04","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.277},{"date":"1995-09-04","fuel":"gasoline","grade":"premium","formulation":"all","price":1.3},{"date":"1995-09-04","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.294},{"date":"1995-09-04","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.362},{"date":"1995-09-04","fuel":"diesel","grade":"all","formulation":"NA","price":1.115},{"date":"1995-09-11","fuel":"gasoline","grade":"all","formulation":"all","price":1.158},{"date":"1995-09-11","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.148},{"date":"1995-09-11","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.203},{"date":"1995-09-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.111},{"date":"1995-09-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.107},{"date":"1995-09-11","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.148},{"date":"1995-09-11","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.201},{"date":"1995-09-11","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.201},{"date":"1995-09-11","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.268},{"date":"1995-09-11","fuel":"gasoline","grade":"premium","formulation":"all","price":1.298},{"date":"1995-09-11","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.292},{"date":"1995-09-11","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.356},{"date":"1995-09-11","fuel":"diesel","grade":"all","formulation":"NA","price":1.119},{"date":"1995-09-18","fuel":"gasoline","grade":"all","formulation":"all","price":1.157},{"date":"1995-09-18","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.147},{"date":"1995-09-18","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.202},{"date":"1995-09-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.11},{"date":"1995-09-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1995-09-18","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.146},{"date":"1995-09-18","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.2},{"date":"1995-09-18","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.2},{"date":"1995-09-18","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.265},{"date":"1995-09-18","fuel":"gasoline","grade":"premium","formulation":"all","price":1.297},{"date":"1995-09-18","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.291},{"date":"1995-09-18","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.355},{"date":"1995-09-18","fuel":"diesel","grade":"all","formulation":"NA","price":1.122},{"date":"1995-09-25","fuel":"gasoline","grade":"all","formulation":"all","price":1.156},{"date":"1995-09-25","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.146},{"date":"1995-09-25","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.198},{"date":"1995-09-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.109},{"date":"1995-09-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.106},{"date":"1995-09-25","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.142},{"date":"1995-09-25","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.198},{"date":"1995-09-25","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.197},{"date":"1995-09-25","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.26},{"date":"1995-09-25","fuel":"gasoline","grade":"premium","formulation":"all","price":1.296},{"date":"1995-09-25","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.29},{"date":"1995-09-25","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.352},{"date":"1995-09-25","fuel":"diesel","grade":"all","formulation":"NA","price":1.121},{"date":"1995-10-02","fuel":"gasoline","grade":"all","formulation":"all","price":1.151},{"date":"1995-10-02","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.14},{"date":"1995-10-02","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.2},{"date":"1995-10-02","fuel":"gasoline","grade":"regular","formulation":"all","price":1.105},{"date":"1995-10-02","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.1},{"date":"1995-10-02","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.142},{"date":"1995-10-02","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.192},{"date":"1995-10-02","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.191},{"date":"1995-10-02","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.262},{"date":"1995-10-02","fuel":"gasoline","grade":"premium","formulation":"all","price":1.29},{"date":"1995-10-02","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.282},{"date":"1995-10-02","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.352},{"date":"1995-10-02","fuel":"diesel","grade":"all","formulation":"NA","price":1.117},{"date":"1995-10-09","fuel":"gasoline","grade":"all","formulation":"all","price":1.144},{"date":"1995-10-09","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.132},{"date":"1995-10-09","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.198},{"date":"1995-10-09","fuel":"gasoline","grade":"regular","formulation":"all","price":1.097},{"date":"1995-10-09","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.092},{"date":"1995-10-09","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.139},{"date":"1995-10-09","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.185},{"date":"1995-10-09","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.182},{"date":"1995-10-09","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.261},{"date":"1995-10-09","fuel":"gasoline","grade":"premium","formulation":"all","price":1.283},{"date":"1995-10-09","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.275},{"date":"1995-10-09","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.351},{"date":"1995-10-09","fuel":"diesel","grade":"all","formulation":"NA","price":1.117},{"date":"1995-10-16","fuel":"gasoline","grade":"all","formulation":"all","price":1.133},{"date":"1995-10-16","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.121},{"date":"1995-10-16","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.195},{"date":"1995-10-16","fuel":"gasoline","grade":"regular","formulation":"all","price":1.087},{"date":"1995-10-16","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.081},{"date":"1995-10-16","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.135},{"date":"1995-10-16","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.175},{"date":"1995-10-16","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.173},{"date":"1995-10-16","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.26},{"date":"1995-10-16","fuel":"gasoline","grade":"premium","formulation":"all","price":1.273},{"date":"1995-10-16","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.264},{"date":"1995-10-16","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.348},{"date":"1995-10-16","fuel":"diesel","grade":"all","formulation":"NA","price":1.117},{"date":"1995-10-23","fuel":"gasoline","grade":"all","formulation":"all","price":1.125},{"date":"1995-10-23","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.113},{"date":"1995-10-23","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.19},{"date":"1995-10-23","fuel":"gasoline","grade":"regular","formulation":"all","price":1.079},{"date":"1995-10-23","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.073},{"date":"1995-10-23","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.129},{"date":"1995-10-23","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.165},{"date":"1995-10-23","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.163},{"date":"1995-10-23","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.254},{"date":"1995-10-23","fuel":"gasoline","grade":"premium","formulation":"all","price":1.263},{"date":"1995-10-23","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.254},{"date":"1995-10-23","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.341},{"date":"1995-10-23","fuel":"diesel","grade":"all","formulation":"NA","price":1.114},{"date":"1995-10-30","fuel":"gasoline","grade":"all","formulation":"all","price":1.115},{"date":"1995-10-30","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.102},{"date":"1995-10-30","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.179},{"date":"1995-10-30","fuel":"gasoline","grade":"regular","formulation":"all","price":1.068},{"date":"1995-10-30","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.062},{"date":"1995-10-30","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.117},{"date":"1995-10-30","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.157},{"date":"1995-10-30","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.154},{"date":"1995-10-30","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.246},{"date":"1995-10-30","fuel":"gasoline","grade":"premium","formulation":"all","price":1.255},{"date":"1995-10-30","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.245},{"date":"1995-10-30","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.332},{"date":"1995-10-30","fuel":"diesel","grade":"all","formulation":"NA","price":1.11},{"date":"1995-11-06","fuel":"gasoline","grade":"all","formulation":"all","price":1.112},{"date":"1995-11-06","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.1},{"date":"1995-11-06","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.171},{"date":"1995-11-06","fuel":"gasoline","grade":"regular","formulation":"all","price":1.065},{"date":"1995-11-06","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.06},{"date":"1995-11-06","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.11},{"date":"1995-11-06","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.153},{"date":"1995-11-06","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.151},{"date":"1995-11-06","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.24},{"date":"1995-11-06","fuel":"gasoline","grade":"premium","formulation":"all","price":1.252},{"date":"1995-11-06","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.245},{"date":"1995-11-06","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.318},{"date":"1995-11-06","fuel":"diesel","grade":"all","formulation":"NA","price":1.118},{"date":"1995-11-13","fuel":"gasoline","grade":"all","formulation":"all","price":1.109},{"date":"1995-11-13","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.099},{"date":"1995-11-13","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.168},{"date":"1995-11-13","fuel":"gasoline","grade":"regular","formulation":"all","price":1.063},{"date":"1995-11-13","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.059},{"date":"1995-11-13","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.107},{"date":"1995-11-13","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.151},{"date":"1995-11-13","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.149},{"date":"1995-11-13","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.236},{"date":"1995-11-13","fuel":"gasoline","grade":"premium","formulation":"all","price":1.248},{"date":"1995-11-13","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.242},{"date":"1995-11-13","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.315},{"date":"1995-11-13","fuel":"diesel","grade":"all","formulation":"NA","price":1.118},{"date":"1995-11-20","fuel":"gasoline","grade":"all","formulation":"all","price":1.106},{"date":"1995-11-20","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.095},{"date":"1995-11-20","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.162},{"date":"1995-11-20","fuel":"gasoline","grade":"regular","formulation":"all","price":1.06},{"date":"1995-11-20","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.056},{"date":"1995-11-20","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.1},{"date":"1995-11-20","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.149},{"date":"1995-11-20","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.146},{"date":"1995-11-20","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.231},{"date":"1995-11-20","fuel":"gasoline","grade":"premium","formulation":"all","price":1.244},{"date":"1995-11-20","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.238},{"date":"1995-11-20","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.309},{"date":"1995-11-20","fuel":"diesel","grade":"all","formulation":"NA","price":1.119},{"date":"1995-11-27","fuel":"gasoline","grade":"all","formulation":"all","price":1.107},{"date":"1995-11-27","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.096},{"date":"1995-11-27","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.16},{"date":"1995-11-27","fuel":"gasoline","grade":"regular","formulation":"all","price":1.061},{"date":"1995-11-27","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.057},{"date":"1995-11-27","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.098},{"date":"1995-11-27","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.149},{"date":"1995-11-27","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.146},{"date":"1995-11-27","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.229},{"date":"1995-11-27","fuel":"gasoline","grade":"premium","formulation":"all","price":1.243},{"date":"1995-11-27","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.237},{"date":"1995-11-27","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.306},{"date":"1995-11-27","fuel":"diesel","grade":"all","formulation":"NA","price":1.124},{"date":"1995-12-04","fuel":"gasoline","grade":"all","formulation":"all","price":1.108},{"date":"1995-12-04","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.097},{"date":"1995-12-04","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.16},{"date":"1995-12-04","fuel":"gasoline","grade":"regular","formulation":"all","price":1.062},{"date":"1995-12-04","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.058},{"date":"1995-12-04","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.101},{"date":"1995-12-04","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.151},{"date":"1995-12-04","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.147},{"date":"1995-12-04","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.229},{"date":"1995-12-04","fuel":"gasoline","grade":"premium","formulation":"all","price":1.246},{"date":"1995-12-04","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.238},{"date":"1995-12-04","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.307},{"date":"1995-12-04","fuel":"diesel","grade":"all","formulation":"NA","price":1.123},{"date":"1995-12-11","fuel":"gasoline","grade":"all","formulation":"all","price":1.11},{"date":"1995-12-11","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.097},{"date":"1995-12-11","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.161},{"date":"1995-12-11","fuel":"gasoline","grade":"regular","formulation":"all","price":1.063},{"date":"1995-12-11","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.057},{"date":"1995-12-11","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.104},{"date":"1995-12-11","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.154},{"date":"1995-12-11","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.148},{"date":"1995-12-11","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.23},{"date":"1995-12-11","fuel":"gasoline","grade":"premium","formulation":"all","price":1.248},{"date":"1995-12-11","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.239},{"date":"1995-12-11","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.307},{"date":"1995-12-11","fuel":"diesel","grade":"all","formulation":"NA","price":1.124},{"date":"1995-12-18","fuel":"gasoline","grade":"all","formulation":"all","price":1.124},{"date":"1995-12-18","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.111},{"date":"1995-12-18","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.169},{"date":"1995-12-18","fuel":"gasoline","grade":"regular","formulation":"all","price":1.078},{"date":"1995-12-18","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.072},{"date":"1995-12-18","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.113},{"date":"1995-12-18","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.167},{"date":"1995-12-18","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.161},{"date":"1995-12-18","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.236},{"date":"1995-12-18","fuel":"gasoline","grade":"premium","formulation":"all","price":1.262},{"date":"1995-12-18","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.253},{"date":"1995-12-18","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.314},{"date":"1995-12-18","fuel":"diesel","grade":"all","formulation":"NA","price":1.13},{"date":"1995-12-25","fuel":"gasoline","grade":"all","formulation":"all","price":1.128},{"date":"1995-12-25","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.114},{"date":"1995-12-25","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.178},{"date":"1995-12-25","fuel":"gasoline","grade":"regular","formulation":"all","price":1.082},{"date":"1995-12-25","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.075},{"date":"1995-12-25","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.122},{"date":"1995-12-25","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.17},{"date":"1995-12-25","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.163},{"date":"1995-12-25","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.242},{"date":"1995-12-25","fuel":"gasoline","grade":"premium","formulation":"all","price":1.265},{"date":"1995-12-25","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.255},{"date":"1995-12-25","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.322},{"date":"1995-12-25","fuel":"diesel","grade":"all","formulation":"NA","price":1.141},{"date":"1996-01-01","fuel":"gasoline","grade":"all","formulation":"all","price":1.129},{"date":"1996-01-01","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.116},{"date":"1996-01-01","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.178},{"date":"1996-01-01","fuel":"gasoline","grade":"regular","formulation":"all","price":1.083},{"date":"1996-01-01","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.077},{"date":"1996-01-01","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.122},{"date":"1996-01-01","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.171},{"date":"1996-01-01","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.164},{"date":"1996-01-01","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.244},{"date":"1996-01-01","fuel":"gasoline","grade":"premium","formulation":"all","price":1.268},{"date":"1996-01-01","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.258},{"date":"1996-01-01","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.326},{"date":"1996-01-01","fuel":"diesel","grade":"all","formulation":"NA","price":1.148},{"date":"1996-01-08","fuel":"gasoline","grade":"all","formulation":"all","price":1.139},{"date":"1996-01-08","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.125},{"date":"1996-01-08","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.181},{"date":"1996-01-08","fuel":"gasoline","grade":"regular","formulation":"all","price":1.093},{"date":"1996-01-08","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.086},{"date":"1996-01-08","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.128},{"date":"1996-01-08","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.181},{"date":"1996-01-08","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.174},{"date":"1996-01-08","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.242},{"date":"1996-01-08","fuel":"gasoline","grade":"premium","formulation":"all","price":1.277},{"date":"1996-01-08","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.266},{"date":"1996-01-08","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.326},{"date":"1996-01-08","fuel":"diesel","grade":"all","formulation":"NA","price":1.146},{"date":"1996-01-15","fuel":"gasoline","grade":"all","formulation":"all","price":1.145},{"date":"1996-01-15","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.131},{"date":"1996-01-15","fuel":"gasoline","grade":"all","formulation":"reformulated","price":1.189},{"date":"1996-01-15","fuel":"gasoline","grade":"regular","formulation":"all","price":1.098},{"date":"1996-01-15","fuel":"gasoline","grade":"regular","formulation":"conventional","price":1.092},{"date":"1996-01-15","fuel":"gasoline","grade":"regular","formulation":"reformulated","price":1.135},{"date":"1996-01-15","fuel":"gasoline","grade":"midgrade","formulation":"all","price":1.186},{"date":"1996-01-15","fuel":"gasoline","grade":"midgrade","formulation":"conventional","price":1.18},{"date":"1996-01-15","fuel":"gasoline","grade":"midgrade","formulation":"reformulated","price":1.252},{"date":"1996-01-15","fuel":"gasoline","grade":"premium","formulation":"all","price":1.285},{"date":"1996-01-15","fuel":"gasoline","grade":"premium","formulation":"conventional","price":1.274},{"date":"1996-01-15","fuel":"gasoline","grade":"premium","formulation":"reformulated","price":1.335},{"date":"1996-01-15","fuel":"diesel","grade":"all","formulation":"NA","price":1.152},{"date":"1996-01-22","fuel":"gasoline","grade":"all","formulation":"all","price":1.138},{"date":"1996-01-22","fuel":"gasoline","grade":"all","formulation":"conventional","price":1.124},{"date":"1996-01-22","fuel":"gasoline","grade":"all",
gitextract_rufwyicb/ ├── .devcontainer/ │ └── devcontainer.json ├── .github/ │ ├── dependabot.yml │ └── workflows/ │ └── python-build.yml ├── .gitignore ├── .python-version ├── .vscode/ │ ├── launch.json │ └── tasks.json ├── CODESPACES.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── LICENSE ├── MANIFEST.in ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── embed/ │ ├── README.md │ ├── dynamic.html │ ├── index.html │ └── postMessageTest.html ├── eslint.config.js ├── index.html ├── local_server.bat ├── local_server.sh ├── package.json ├── public/ │ ├── df_gas_prices.json │ ├── df_global_energy.json │ ├── df_movies.json │ ├── df_stock_prices_live.json │ ├── df_unemployment.json │ ├── manifest.json │ └── robots.txt ├── py-src/ │ └── data_formulator/ │ ├── __init__.py │ ├── __main__.py │ ├── agent_routes.py │ ├── agents/ │ │ ├── __init__.py │ │ ├── agent_chart_insight.py │ │ ├── agent_code_explanation.py │ │ ├── agent_data_clean_stream.py │ │ ├── agent_data_load.py │ │ ├── agent_data_rec.py │ │ ├── agent_data_transform.py │ │ ├── agent_interactive_explore.py │ │ ├── agent_report_gen.py │ │ ├── agent_sort_data.py │ │ ├── agent_utils.py │ │ ├── agent_utils_sql.py │ │ ├── client_utils.py │ │ ├── data_agent.py │ │ ├── semantic_types.py │ │ └── web_utils.py │ ├── app.py │ ├── auth.py │ ├── code_signing.py │ ├── data_loader/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── athena_data_loader.py │ │ ├── azure_blob_data_loader.py │ │ ├── bigquery_data_loader.py │ │ ├── external_data_loader.py │ │ ├── kusto_data_loader.py │ │ ├── mongodb_data_loader.py │ │ ├── mssql_data_loader.py │ │ ├── mysql_data_loader.py │ │ ├── postgresql_data_loader.py │ │ └── s3_data_loader.py │ ├── datalake/ │ │ ├── __init__.py │ │ ├── azure_blob_workspace.py │ │ ├── cache_manager.py │ │ ├── cached_azure_blob_workspace.py │ │ ├── file_manager.py │ │ ├── metadata.py │ │ ├── parquet_utils.py │ │ └── workspace.py │ ├── demo_stream_routes.py │ ├── example_datasets_config.py │ ├── sandbox/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── docker_sandbox.py │ │ ├── local_sandbox.py │ │ └── not_a_sandbox.py │ ├── session_routes.py │ ├── tables_routes.py │ ├── workflows/ │ │ ├── __init__.py │ │ ├── chart_semantics.py │ │ └── create_vl_plots.py │ └── workspace_factory.py ├── pyproject.toml ├── requirements.txt ├── src/ │ ├── app/ │ │ ├── App.tsx │ │ ├── chartCache.ts │ │ ├── chartRecommendation.ts │ │ ├── dfSlice.tsx │ │ ├── identity.ts │ │ ├── store.ts │ │ ├── tableThunks.ts │ │ ├── tokens.ts │ │ ├── useDataRefresh.tsx │ │ ├── useFormulateData.ts │ │ └── utils.tsx │ ├── assets/ │ │ └── icon-design.md │ ├── components/ │ │ ├── ChartTemplates.tsx │ │ ├── ComponentType.tsx │ │ ├── FunComponents.tsx │ │ ├── RotatingTextBlock.tsx │ │ └── chartUtils.ts │ ├── data/ │ │ ├── column.ts │ │ ├── table.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── icons.tsx │ ├── index.css │ ├── index.tsx │ ├── lib/ │ │ └── agents-chart/ │ │ ├── README.md │ │ ├── chartjs/ │ │ │ ├── README.md │ │ │ ├── assemble.ts │ │ │ ├── index.ts │ │ │ ├── instantiate-spec.ts │ │ │ ├── recommendation.ts │ │ │ └── templates/ │ │ │ ├── area.ts │ │ │ ├── bar.ts │ │ │ ├── histogram.ts │ │ │ ├── index.ts │ │ │ ├── line.ts │ │ │ ├── pie.ts │ │ │ ├── radar.ts │ │ │ ├── rose.ts │ │ │ ├── scatter.ts │ │ │ └── utils.ts │ │ ├── core/ │ │ │ ├── compute-layout.ts │ │ │ ├── decisions.ts │ │ │ ├── field-semantics.ts │ │ │ ├── filter-overflow.ts │ │ │ ├── index.ts │ │ │ ├── recommendation.ts │ │ │ ├── resolve-semantics.ts │ │ │ ├── semantic-types.ts │ │ │ ├── type-registry.ts │ │ │ └── types.ts │ │ ├── docs/ │ │ │ ├── README.md │ │ │ ├── design-semantics.md │ │ │ ├── design-stretch-model.md │ │ │ └── test_plan.md │ │ ├── echarts/ │ │ │ ├── README.md │ │ │ ├── assemble.ts │ │ │ ├── facet.ts │ │ │ ├── index.ts │ │ │ ├── instantiate-spec.ts │ │ │ ├── recommendation.ts │ │ │ └── templates/ │ │ │ ├── area.ts │ │ │ ├── bar.ts │ │ │ ├── boxplot.ts │ │ │ ├── candlestick.ts │ │ │ ├── density.ts │ │ │ ├── funnel.ts │ │ │ ├── gauge.ts │ │ │ ├── heatmap.ts │ │ │ ├── histogram.ts │ │ │ ├── index.ts │ │ │ ├── jitter.ts │ │ │ ├── line.ts │ │ │ ├── lollipop.ts │ │ │ ├── pie.ts │ │ │ ├── pyramid.ts │ │ │ ├── radar.ts │ │ │ ├── ranged-dot.ts │ │ │ ├── rose.ts │ │ │ ├── sankey.ts │ │ │ ├── scatter.ts │ │ │ ├── streamgraph.ts │ │ │ ├── sunburst.ts │ │ │ ├── treemap.ts │ │ │ ├── utils.ts │ │ │ └── waterfall.ts │ │ ├── gofish/ │ │ │ ├── README.md │ │ │ ├── assemble.ts │ │ │ ├── index.ts │ │ │ ├── recommendation.ts │ │ │ └── templates/ │ │ │ ├── area.ts │ │ │ ├── bar.ts │ │ │ ├── index.ts │ │ │ ├── line.ts │ │ │ ├── pie.ts │ │ │ ├── scatter.ts │ │ │ ├── scatterpie.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── test-data/ │ │ │ ├── area-tests.ts │ │ │ ├── bar-tests.ts │ │ │ ├── chartjs-tests.ts │ │ │ ├── date-tests.ts │ │ │ ├── debug-tests.ts │ │ │ ├── discrete-axis-tests.ts │ │ │ ├── distribution-tests.ts │ │ │ ├── echarts-tests.ts │ │ │ ├── facet-tests.ts │ │ │ ├── gas-pressure-tests.ts │ │ │ ├── generators.ts │ │ │ ├── gofish-tests.ts │ │ │ ├── index.ts │ │ │ ├── line-area-stretch-tests.ts │ │ │ ├── line-area-tests.ts │ │ │ ├── line-tests.ts │ │ │ ├── scatter-tests.ts │ │ │ ├── semantic-tests.ts │ │ │ ├── specialized-tests.ts │ │ │ ├── stress-tests.ts │ │ │ └── types.ts │ │ └── vegalite/ │ │ ├── README.md │ │ ├── assemble.ts │ │ ├── index.ts │ │ ├── instantiate-spec.ts │ │ ├── recommendation.ts │ │ └── templates/ │ │ ├── area.ts │ │ ├── bar.ts │ │ ├── bump.ts │ │ ├── candlestick.ts │ │ ├── custom.ts │ │ ├── density.ts │ │ ├── index.ts │ │ ├── jitter.ts │ │ ├── line.ts │ │ ├── lollipop.ts │ │ ├── map.ts │ │ ├── pie.ts │ │ ├── radar.ts │ │ ├── rose.ts │ │ ├── scatter.ts │ │ ├── utils.ts │ │ └── waterfall.ts │ ├── scss/ │ │ ├── App.scss │ │ ├── DataView.scss │ │ ├── DraggableCard.scss │ │ ├── EncodingShelf.scss │ │ └── VisualizationView.scss │ ├── types.d.ts │ └── views/ │ ├── About.tsx │ ├── AgentRulesDialog.tsx │ ├── ChartGallery.tsx │ ├── ChartRecBox.tsx │ ├── ChartRenderService.tsx │ ├── ChartifactDialog.tsx │ ├── ChatDialog.tsx │ ├── ChatThreadView.tsx │ ├── DBTableManager.tsx │ ├── DataFormulator.tsx │ ├── DataLoadingChat.tsx │ ├── DataLoadingThread.tsx │ ├── DataThread.tsx │ ├── DataThreadCards.tsx │ ├── DataView.tsx │ ├── EncodingBox.tsx │ ├── EncodingShelfCard.tsx │ ├── EncodingShelfThread.tsx │ ├── ExampleSessions.tsx │ ├── ExplComponents.tsx │ ├── MessageSnackbar.tsx │ ├── ModelSelectionDialog.tsx │ ├── MultiTablePreview.tsx │ ├── OperatorCard.tsx │ ├── ReactTable.tsx │ ├── RefreshDataDialog.tsx │ ├── ReportView.tsx │ ├── SelectableDataGrid.tsx │ ├── SimpleChartRecBox.tsx │ ├── TableSelectionView.tsx │ ├── TestPanel.tsx │ ├── UnifiedDataUploadDialog.tsx │ ├── ViewUtils.tsx │ ├── VisualizationView.tsx │ └── useFormulateData.ts ├── tsconfig.json └── vite.config.ts
SYMBOL INDEX (1361 symbols across 160 files)
FILE: py-src/data_formulator/__init__.py
function run_app (line 4) | def run_app():
FILE: py-src/data_formulator/agent_routes.py
function get_temp_tables (line 44) | def get_temp_tables(workspace, input_tables: list[dict]) -> list[dict]:
function handle_agent_error (line 61) | def handle_agent_error(e):
function get_client (line 74) | def get_client(model_config):
function check_available_models (line 89) | def check_available_models():
function sanitize_model_error (line 153) | def sanitize_model_error(error_message: str) -> str:
function test_model (line 168) | def test_model():
function process_data_on_load_request (line 210) | def process_data_on_load_request():
function clean_data_stream_request (line 248) | def clean_data_stream_request():
function sort_data_request (line 300) | def sort_data_request():
function derive_data (line 326) | def derive_data():
function data_agent_streaming (line 414) | def data_agent_streaming():
function refine_data (line 539) | def refine_data():
function request_code_expl (line 610) | def request_code_expl():
function request_chart_insight (line 647) | def request_chart_insight():
function get_recommendation_questions (line 684) | def get_recommendation_questions():
function generate_report_stream (line 736) | def generate_report_stream():
function refresh_derived_data (line 778) | def refresh_derived_data():
FILE: py-src/data_formulator/agents/agent_chart_insight.py
class ChartInsightAgent (line 26) | class ChartInsightAgent(object):
method __init__ (line 28) | def __init__(self, client, workspace=None):
method run (line 32) | def run(self, chart_image_base64, chart_type, field_names, input_table...
FILE: py-src/data_formulator/agents/agent_code_explanation.py
class CodeExplanationAgent (line 141) | class CodeExplanationAgent(object):
method __init__ (line 143) | def __init__(self, client, workspace):
method run (line 147) | def run(self, input_tables, code, n=1):
FILE: py-src/data_formulator/agents/agent_data_clean_stream.py
function parse_table_sections (line 15) | def parse_table_sections(text):
class DataCleanAgentStream (line 140) | class DataCleanAgentStream(object):
method __init__ (line 142) | def __init__(self, client):
method stream (line 145) | def stream(self, prompt, artifacts=[], dialog=[]):
FILE: py-src/data_formulator/agents/agent_data_load.py
class DataLoadAgent (line 159) | class DataLoadAgent(object):
method __init__ (line 161) | def __init__(self, client, workspace):
method run (line 165) | def run(self, input_data, n=1):
FILE: py-src/data_formulator/agents/agent_data_rec.py
class DataRecAgent (line 166) | class DataRecAgent(object):
method __init__ (line 168) | def __init__(self, client, workspace, system_prompt=None, agent_coding...
method process_gpt_response (line 183) | def process_gpt_response(self, input_tables, messages, response, t_llm...
method run (line 301) | def run(self, input_tables, description, n=1, prev_messages: list[dict...
method followup (line 338) | def followup(self, input_tables, dialog, latest_data_sample, new_instr...
FILE: py-src/data_formulator/agents/agent_data_transform.py
class DataTransformationAgent (line 75) | class DataTransformationAgent(object):
method __init__ (line 77) | def __init__(self, client, workspace, system_prompt=None, agent_coding...
method process_gpt_response (line 93) | def process_gpt_response(self, response, messages, t_llm=None):
method run (line 210) | def run(self, input_tables, description, prev_messages: list[dict] = [...
method followup (line 279) | def followup(self, input_tables, dialog, latest_data_sample, new_instr...
FILE: py-src/data_formulator/agents/agent_interactive_explore.py
class InteractiveExploreAgent (line 115) | class InteractiveExploreAgent(object):
method __init__ (line 117) | def __init__(self, client, workspace, agent_exploration_rules=""):
method run (line 122) | def run(self, input_tables, start_question=None, exploration_thread=None,
FILE: py-src/data_formulator/agents/agent_report_gen.py
class ReportGenAgent (line 53) | class ReportGenAgent(object):
method __init__ (line 55) | def __init__(self, client, workspace):
method get_data_summary (line 59) | def get_data_summary(self, input_tables):
method stream (line 62) | def stream(self, input_tables, charts=[], style="blog post"):
FILE: py-src/data_formulator/agents/agent_sort_data.py
class SortDataAgent (line 66) | class SortDataAgent(object):
method __init__ (line 68) | def __init__(self, client):
method run (line 71) | def run(self, name, values, n=1):
FILE: py-src/data_formulator/agents/agent_utils.py
function string_to_py_varname (line 9) | def string_to_py_varname(var_str):
function field_name_to_ts_variable_name (line 15) | def field_name_to_ts_variable_name(field_name):
function infer_ts_datatype (line 24) | def infer_ts_datatype(df, name):
function value_handling_func (line 40) | def value_handling_func(val):
function table_hash (line 55) | def table_hash(table):
function extract_code_from_gpt_response (line 64) | def extract_code_from_gpt_response(code_raw, language):
function find_matching_bracket (line 87) | def find_matching_bracket(text, start_index, bracket_type='curly'):
function extract_json_objects (line 109) | def extract_json_objects(text):
function get_field_summary (line 150) | def get_field_summary(field_name, df, field_sample_size, max_val_chars=1...
function generate_data_summary (line 188) | def generate_data_summary(
FILE: py-src/data_formulator/agents/agent_utils_sql.py
function sanitize_table_name (line 12) | def sanitize_table_name(table_name: str) -> str:
function create_duckdb_conn_with_parquet_views (line 22) | def create_duckdb_conn_with_parquet_views(workspace, input_tables: list[...
FILE: py-src/data_formulator/agents/client_utils.py
class Client (line 6) | class Client(object):
method __init__ (line 11) | def __init__(self, endpoint, model, api_key=None, api_base=None, api_...
method from_config (line 52) | def from_config(cls, model_config: dict[str, str]):
method get_completion (line 75) | def get_completion(self, messages, stream=False):
method get_response (line 115) | def get_response(self, messages: list[dict], tools: list | None = None):
FILE: py-src/data_formulator/agents/data_agent.py
class DataAgent (line 131) | class DataAgent:
method __init__ (line 134) | def __init__(
method run (line 161) | def run(
method _build_system_prompt (line 346) | def _build_system_prompt(self) -> str:
method _build_initial_messages (line 359) | def _build_initial_messages(
method _get_next_action (line 396) | def _get_next_action(self, trajectory: list[dict]) -> dict | None:
method _execute_visualize (line 421) | def _execute_visualize(
method _create_chart (line 493) | def _create_chart(
method _format_observation (line 529) | def _format_observation(
method _error_event (line 571) | def _error_event(iteration: int, error_message: str, **extra) -> dict[...
method _strip_images (line 581) | def _strip_images(trajectory: list[dict]) -> list[dict]:
FILE: py-src/data_formulator/agents/semantic_types.py
function is_measure_type (line 236) | def is_measure_type(semantic_type: str) -> bool:
function is_timeseries_type (line 241) | def is_timeseries_type(semantic_type: str) -> bool:
function is_categorical_type (line 246) | def is_categorical_type(semantic_type: str) -> bool:
function is_ordinal_type (line 251) | def is_ordinal_type(semantic_type: str) -> bool:
function is_geo_type (line 256) | def is_geo_type(semantic_type: str) -> bool:
function is_non_measure_numeric (line 261) | def is_non_measure_numeric(semantic_type: str) -> bool:
function is_signed_measure (line 266) | def is_signed_measure(semantic_type: str) -> bool:
function generate_semantic_types_prompt (line 275) | def generate_semantic_types_prompt() -> str:
function get_vl_type (line 404) | def get_vl_type(semantic_type: str) -> Optional[str]:
function infer_vl_type_from_name (line 451) | def infer_vl_type_from_name(column_name: str) -> Optional[str]:
FILE: py-src/data_formulator/agents/web_utils.py
function _is_private_ip (line 16) | def _is_private_ip(ip_str: str) -> bool:
function _validate_url_for_ssrf (line 56) | def _validate_url_for_ssrf(url: str) -> str:
function download_html_content (line 113) | def download_html_content(url: str, timeout: int = 30, headers: dict | N...
function html_to_text (line 213) | def html_to_text(html_content: str, remove_scripts: bool = True, remove_...
function get_html_title (line 256) | def get_html_title(html_content: str) -> str | None:
function get_html_meta_description (line 278) | def get_html_meta_description(html_content: str) -> str | None:
FILE: py-src/data_formulator/app.py
class CustomJSONEncoder (line 37) | class CustomJSONEncoder(json.JSONEncoder):
method default (line 38) | def default(self, obj):
function configure_logging (line 70) | def configure_logging():
function _register_blueprints (line 93) | def _register_blueprints():
function get_sample_datasets (line 134) | def get_sample_datasets():
function index_alt (line 140) | def index_alt(path):
function page_not_found (line 145) | def page_not_found(e):
function get_app_config (line 151) | def get_app_config():
function parse_args (line 175) | def parse_args() -> argparse.Namespace:
function run_app (line 215) | def run_app():
FILE: py-src/data_formulator/auth.py
function _validate_identity_value (line 29) | def _validate_identity_value(value: str, source: str) -> str:
function get_identity_id (line 51) | def get_identity_id() -> str:
FILE: py-src/data_formulator/code_signing.py
function _is_dev_mode (line 47) | def _is_dev_mode() -> bool:
function _get_secret (line 56) | def _get_secret() -> bytes:
function sign_code (line 104) | def sign_code(code: str) -> str:
function verify_code (line 119) | def verify_code(code: str, signature: str) -> bool:
function sign_result (line 130) | def sign_result(result: dict) -> dict:
FILE: py-src/data_formulator/data_loader/athena_data_loader.py
function _validate_athena_table_name (line 22) | def _validate_athena_table_name(table_name: str) -> None:
function _validate_column_name (line 33) | def _validate_column_name(column_name: str) -> None:
function _validate_s3_url (line 44) | def _validate_s3_url(url: str) -> None:
class AthenaDataLoader (line 52) | class AthenaDataLoader(ExternalDataLoader):
method list_params (line 61) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 76) | def auth_instructions() -> str:
method __init__ (line 89) | def __init__(self, params: dict[str, Any]):
method _get_output_location (line 221) | def _get_output_location(self) -> str:
method _execute_query (line 260) | def _execute_query(self, query: str) -> str:
method fetch_data_as_arrow (line 318) | def fetch_data_as_arrow(
method list_tables (line 367) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
FILE: py-src/data_formulator/data_loader/azure_blob_data_loader.py
class AzureBlobDataLoader (line 16) | class AzureBlobDataLoader(ExternalDataLoader):
method list_params (line 19) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 32) | def auth_instructions() -> str:
method __init__ (line 51) | def __init__(self, params: dict[str, Any]):
method _azure_path (line 77) | def _azure_path(self, azure_url: str) -> str:
method _read_sample (line 84) | def _read_sample(self, azure_url: str, limit: int) -> pd.DataFrame:
method fetch_data_as_arrow (line 102) | def fetch_data_as_arrow(
method list_tables (line 149) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
method _is_supported_file (line 219) | def _is_supported_file(self, blob_name: str) -> bool:
method _estimate_row_count (line 224) | def _estimate_row_count(self, azure_url: str, blob_properties=None) ->...
method _estimate_rows_by_sampling (line 246) | def _estimate_rows_by_sampling(self, azure_url: str, blob_properties, ...
method _estimate_by_row_sampling (line 276) | def _estimate_by_row_sampling(self, azure_url: str, file_extension: st...
FILE: py-src/data_formulator/data_loader/bigquery_data_loader.py
class BigQueryDataLoader (line 13) | class BigQueryDataLoader(ExternalDataLoader):
method list_params (line 17) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 26) | def auth_instructions() -> str:
method __init__ (line 38) | def __init__(self, params: dict[str, Any]):
method list_tables (line 61) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
method fetch_data_as_arrow (line 135) | def fetch_data_as_arrow(
method _build_select_parts (line 175) | def _build_select_parts(self, table_ref, table_name: str) -> list[str]:
FILE: py-src/data_formulator/data_loader/external_data_loader.py
function sanitize_table_name (line 18) | def sanitize_table_name(name_as: str) -> str:
class ExternalDataLoader (line 52) | class ExternalDataLoader(ABC):
method get_safe_params (line 66) | def get_safe_params(self) -> dict[str, Any]:
method fetch_data_as_arrow (line 82) | def fetch_data_as_arrow(
method fetch_data_as_dataframe (line 112) | def fetch_data_as_dataframe(
method ingest_to_workspace (line 142) | def ingest_to_workspace(
method list_params (line 199) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 205) | def auth_instructions() -> str:
method __init__ (line 210) | def __init__(self, params: dict[str, Any]):
method list_tables (line 220) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
FILE: py-src/data_formulator/data_loader/kusto_data_loader.py
class KustoDataLoader (line 14) | class KustoDataLoader(ExternalDataLoader):
method list_params (line 17) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 28) | def auth_instructions() -> str:
method __init__ (line 39) | def __init__(self, params: dict[str, Any]):
method _convert_kusto_datetime_columns (line 64) | def _convert_kusto_datetime_columns(self, df: pd.DataFrame) -> pd.Data...
method query (line 119) | def query(self, kql: str) -> pd.DataFrame:
method fetch_data_as_arrow (line 130) | def fetch_data_as_arrow(
method list_tables (line 175) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
FILE: py-src/data_formulator/data_loader/mongodb_data_loader.py
class MongoDBDataLoader (line 16) | class MongoDBDataLoader(ExternalDataLoader):
method list_params (line 19) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 32) | def auth_instructions() -> str:
method __init__ (line 41) | def __init__(self, params: dict[str, Any]):
method close (line 73) | def close(self):
method __enter__ (line 82) | def __enter__(self):
method __exit__ (line 86) | def __exit__(self, exc_type, exc_val, exc_tb):
method __del__ (line 91) | def __del__(self):
method _flatten_document (line 96) | def _flatten_document(doc: dict[str, Any], parent_key: str = '', sep: ...
method _convert_special_types (line 122) | def _convert_special_types(doc: dict[str, Any]) -> dict[str, Any]:
method _process_documents (line 148) | def _process_documents(self, documents: list[dict[str, Any]]) -> pd.Da...
method fetch_data_as_arrow (line 164) | def fetch_data_as_arrow(
method list_tables (line 220) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
FILE: py-src/data_formulator/data_loader/mssql_data_loader.py
class MSSQLDataLoader (line 14) | class MSSQLDataLoader(ExternalDataLoader):
method list_params (line 16) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 85) | def auth_instructions() -> str:
method __init__ (line 99) | def __init__(self, params: dict[str, Any]):
method _safe_select_list (line 131) | def _safe_select_list(self, schema: str, table_name: str) -> str:
method _execute_query_raw (line 159) | def _execute_query_raw(self, query: str) -> pa.Table:
method _execute_query (line 163) | def _execute_query(self, query: str) -> pa.Table:
method fetch_data_as_arrow (line 171) | def fetch_data_as_arrow(
method list_tables (line 211) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
FILE: py-src/data_formulator/data_loader/mysql_data_loader.py
class MySQLDataLoader (line 14) | class MySQLDataLoader(ExternalDataLoader):
method list_params (line 17) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 28) | def auth_instructions() -> str:
method __init__ (line 37) | def __init__(self, params: dict[str, Any]):
method _safe_select_list (line 87) | def _safe_select_list(self, schema: str, table_name: str) -> str:
method fetch_data_as_arrow (line 116) | def fetch_data_as_arrow(
method list_tables (line 157) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
method _list_tables_connectorx (line 161) | def _list_tables_connectorx(self, table_filter: str | None = None) -> ...
FILE: py-src/data_formulator/data_loader/postgresql_data_loader.py
class PostgreSQLDataLoader (line 14) | class PostgreSQLDataLoader(ExternalDataLoader):
method list_params (line 17) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 28) | def auth_instructions() -> str:
method __init__ (line 37) | def __init__(self, params: dict[str, Any]):
method _safe_select_list (line 75) | def _safe_select_list(self, schema: str, table_name: str) -> str:
method fetch_data_as_arrow (line 104) | def fetch_data_as_arrow(
method list_tables (line 151) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
method _list_tables_connectorx (line 155) | def _list_tables_connectorx(self, table_filter: str | None = None) -> ...
FILE: py-src/data_formulator/data_loader/s3_data_loader.py
class S3DataLoader (line 17) | class S3DataLoader(ExternalDataLoader):
method list_params (line 20) | def list_params() -> list[dict[str, Any]]:
method auth_instructions (line 31) | def auth_instructions() -> str:
method __init__ (line 40) | def __init__(self, params: dict[str, Any]):
method fetch_data_as_arrow (line 57) | def fetch_data_as_arrow(
method list_tables (line 110) | def list_tables(self, table_filter: str | None = None) -> list[dict[st...
method _read_sample_arrow (line 164) | def _read_sample_arrow(self, s3_url: str, limit: int) -> pa.Table:
method _is_supported_file (line 182) | def _is_supported_file(self, key: str) -> bool:
method _estimate_row_count (line 187) | def _estimate_row_count(self, s3_url: str) -> int:
FILE: py-src/data_formulator/datalake/azure_blob_workspace.py
class AzureBlobWorkspace (line 63) | class AzureBlobWorkspace(Workspace):
method __init__ (line 81) | def __init__(
method _blob_name (line 138) | def _blob_name(self, filename: str) -> str:
method _get_blob (line 142) | def _get_blob(self, filename: str):
method _blob_exists (line 146) | def _blob_exists(self, filename: str) -> bool:
method _upload_bytes (line 154) | def _upload_bytes(
method _download_bytes (line 166) | def _download_bytes(self, filename: str) -> bytes:
method _delete_blob (line 174) | def _delete_blob(self, filename: str) -> None:
method _temp_local_copy (line 181) | def _temp_local_copy(self, filename: str):
method _cleanup_temp_files (line 206) | def _cleanup_temp_files(self) -> None:
method __del__ (line 213) | def __del__(self) -> None:
method _init_metadata (line 220) | def _init_metadata(self) -> None:
method get_metadata (line 225) | def get_metadata(self) -> WorkspaceMetadata:
method save_metadata (line 235) | def save_metadata(self, metadata: WorkspaceMetadata) -> None:
method invalidate_metadata_cache (line 247) | def invalidate_metadata_cache(self) -> None:
method get_file_path (line 255) | def get_file_path(self, filename: str) -> str: # type: ignore[override]
method file_exists (line 269) | def file_exists(self, filename: str) -> bool:
method delete_table (line 273) | def delete_table(self, table_name: str) -> bool:
method cleanup (line 287) | def cleanup(self) -> None:
method read_data_as_df (line 300) | def read_data_as_df(self, table_name: str) -> pd.DataFrame:
method write_parquet_from_arrow (line 327) | def write_parquet_from_arrow(
method write_parquet (line 377) | def write_parquet(
method get_parquet_schema (line 432) | def get_parquet_schema(self, table_name: str) -> dict:
method get_parquet_path (line 459) | def get_parquet_path(self, table_name: str) -> str: # type: ignore[ov...
method run_parquet_sql (line 475) | def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:
method local_dir (line 507) | def local_dir(self):
method upload_file (line 534) | def upload_file(self, content: bytes, filename: str) -> None:
method download_file (line 539) | def download_file(self, filename: str) -> bytes:
method save_workspace_snapshot (line 548) | def save_workspace_snapshot(self, dst: Path) -> None:
method restore_workspace_snapshot (line 560) | def restore_workspace_snapshot(self, src: Path) -> None:
method _session_blob_prefix (line 580) | def _session_blob_prefix(self, session_name: str) -> str:
method save_session (line 594) | def save_session(self, session_name: str, state: dict) -> str:
method load_session (line 622) | def load_session(self, session_name: str) -> dict | None:
method _sessions_root_prefix (line 655) | def _sessions_root_prefix(self) -> str:
method list_sessions (line 659) | def list_sessions(self) -> list[dict]:
method delete_session (line 685) | def delete_session(self, session_name: str) -> bool:
method export_session_zip (line 695) | def export_session_zip(self, state: dict) -> io.BytesIO:
method import_session_zip (line 708) | def import_session_zip(self, zip_data: io.BytesIO) -> dict:
method __repr__ (line 742) | def __repr__(self) -> str:
FILE: py-src/data_formulator/datalake/cache_manager.py
class GlobalCacheManager (line 59) | class GlobalCacheManager:
method get_instance (line 89) | def get_instance(
method reset_instance (line 124) | def reset_instance(cls) -> None:
method __init__ (line 133) | def __init__(
method max_global_bytes (line 159) | def max_global_bytes(self) -> int:
method cache_root (line 163) | def cache_root(self) -> Path:
method _scan_total_size (line 170) | def _scan_total_size(self) -> int:
method try_acquire_space (line 201) | def try_acquire_space(self, needed_bytes: int) -> bool:
method notify_write (line 234) | def notify_write(self, nbytes: int) -> None:
method maybe_evict_global (line 250) | def maybe_evict_global(self) -> int:
method _evict_global_unlocked (line 267) | def _evict_global_unlocked(self, target_free: int) -> int:
method get_global_stats (line 335) | def get_global_stats(self) -> dict[str, Any]:
method __repr__ (line 368) | def __repr__(self) -> str:
FILE: py-src/data_formulator/datalake/cached_azure_blob_workspace.py
class CachedAzureBlobWorkspace (line 84) | class CachedAzureBlobWorkspace(AzureBlobWorkspace):
method __init__ (line 130) | def __init__(
method _cache_path (line 223) | def _cache_path(self, filename: str) -> Path:
method _upload_bytes (line 241) | def _upload_bytes(
method _download_bytes (line 304) | def _download_bytes(self, filename: str) -> bytes:
method _blob_exists (line 354) | def _blob_exists(self, filename: str) -> bool:
method _check_staleness (line 365) | def _check_staleness(self) -> None:
method _delete_blob (line 428) | def _delete_blob(self, filename: str) -> None:
method get_metadata (line 452) | def get_metadata(self) -> WorkspaceMetadata:
method _temp_local_copy (line 462) | def _temp_local_copy(self, filename: str):
method read_data_as_df (line 474) | def read_data_as_df(self, table_name: str) -> pd.DataFrame:
method run_parquet_sql (line 509) | def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:
method local_dir (line 544) | def local_dir(self):
method _ensure_all_cached (line 554) | def _ensure_all_cached(self) -> None:
method _get_cache_size (line 571) | def _get_cache_size(self) -> int:
method _maybe_evict (line 582) | def _maybe_evict(self) -> None:
method get_cache_stats (line 641) | def get_cache_stats(self) -> dict[str, Any]:
method wait_for_uploads (line 674) | def wait_for_uploads(self, timeout: float | None = 30) -> bool:
method _atexit_flush (line 703) | def _atexit_flush(self) -> None:
method cleanup (line 713) | def cleanup(self) -> None:
method restore_workspace_snapshot (line 758) | def restore_workspace_snapshot(self, src: Path) -> None:
method invalidate_metadata_cache (line 777) | def invalidate_metadata_cache(self) -> None:
method __repr__ (line 786) | def __repr__(self) -> str:
FILE: py-src/data_formulator/datalake/file_manager.py
function is_supported_file (line 38) | def is_supported_file(filename: str) -> bool:
function get_file_type (line 43) | def get_file_type(filename: str) -> str | None:
function compute_file_hash (line 57) | def compute_file_hash(content: bytes) -> str:
function sanitize_table_name (line 70) | def sanitize_table_name(name: str) -> str:
function generate_unique_filename (line 104) | def generate_unique_filename(
function save_uploaded_file (line 137) | def save_uploaded_file(
function save_uploaded_file_from_path (line 233) | def save_uploaded_file_from_path(
function get_file_info (line 268) | def get_file_info(workspace: Workspace, table_name: str) -> dict | None:
FILE: py-src/data_formulator/datalake/metadata.py
class _OVERLAPPED (line 45) | class _OVERLAPPED(ctypes.Structure):
function _lock_file (line 54) | def _lock_file(fd: int) -> None:
function _unlock_file (line 69) | def _unlock_file(fd: int) -> None:
function _lock_file (line 85) | def _lock_file(fd: int) -> None:
function _unlock_file (line 89) | def _unlock_file(fd: int) -> None:
class WorkspaceLock (line 94) | class WorkspaceLock:
method __init__ (line 101) | def __init__(self, workspace_path: Path, timeout: float = MAX_LOCK_WAI...
method __enter__ (line 106) | def __enter__(self):
method __exit__ (line 137) | def __exit__(self, exc_type, exc_val, exc_tb):
function make_json_safe (line 150) | def make_json_safe(value: Any) -> Any:
class ColumnInfo (line 185) | class ColumnInfo:
method to_dict (line 190) | def to_dict(self) -> dict:
method from_dict (line 194) | def from_dict(cls, data: dict) -> "ColumnInfo":
class TableMetadata (line 199) | class TableMetadata:
method to_dict (line 217) | def to_dict(self) -> dict:
method from_dict (line 248) | def from_dict(cls, name: str, data: dict) -> "TableMetadata":
class WorkspaceMetadata (line 281) | class WorkspaceMetadata:
method add_table (line 288) | def add_table(self, table: TableMetadata) -> None:
method remove_table (line 293) | def remove_table(self, name: str) -> bool:
method get_table (line 301) | def get_table(self, name: str) -> TableMetadata | None:
method list_tables (line 305) | def list_tables(self) -> list[str]:
method to_dict (line 309) | def to_dict(self) -> dict:
method from_dict (line 322) | def from_dict(cls, data: dict) -> "WorkspaceMetadata":
method create_new (line 346) | def create_new(cls) -> "WorkspaceMetadata":
function load_metadata (line 357) | def load_metadata(workspace_path: Path) -> WorkspaceMetadata:
function save_metadata (line 400) | def save_metadata(workspace_path: Path, metadata: WorkspaceMetadata) -> ...
function metadata_exists (line 452) | def metadata_exists(workspace_path: Path) -> bool:
FILE: py-src/data_formulator/datalake/parquet_utils.py
function sanitize_table_name (line 40) | def sanitize_table_name(name: str) -> str:
function get_sample_rows_from_arrow (line 87) | def get_sample_rows_from_arrow(
function get_arrow_column_info (line 97) | def get_arrow_column_info(table: pa.Table) -> list[ColumnInfo]:
function get_column_info (line 102) | def get_column_info(df: pd.DataFrame) -> list[ColumnInfo]:
function compute_arrow_table_hash (line 111) | def compute_arrow_table_hash(table: pa.Table, sample_rows: int = 100) ->...
function sanitize_dataframe_for_arrow (line 139) | def sanitize_dataframe_for_arrow(df: pd.DataFrame) -> pd.DataFrame:
function compute_dataframe_hash (line 167) | def compute_dataframe_hash(df: pd.DataFrame, sample_rows: int = 100) -> ...
FILE: py-src/data_formulator/datalake/workspace.py
function get_data_formulator_home (line 51) | def get_data_formulator_home() -> Path:
function get_default_workspace_root (line 76) | def get_default_workspace_root() -> Path:
function cleanup_stale_temp_files (line 85) | def cleanup_stale_temp_files(workspace_path: Path, max_age_hours: int = ...
class Workspace (line 130) | class Workspace:
method __init__ (line 141) | def __init__(self, identity_id: str, root_dir: Optional[str | Path] = ...
method _sanitize_identity_id (line 197) | def _sanitize_identity_id(identity_id: str) -> str:
method _init_metadata (line 211) | def _init_metadata(self) -> None:
method get_file_path (line 217) | def get_file_path(self, filename: str) -> Path:
method file_exists (line 233) | def file_exists(self, filename: str) -> bool:
method delete_table (line 246) | def delete_table(self, table_name: str) -> bool:
method get_metadata (line 274) | def get_metadata(self) -> WorkspaceMetadata:
method save_metadata (line 280) | def save_metadata(self, metadata: WorkspaceMetadata) -> None:
method invalidate_metadata_cache (line 285) | def invalidate_metadata_cache(self) -> None:
method add_table_metadata (line 289) | def add_table_metadata(self, table: TableMetadata) -> None:
method get_table_metadata (line 294) | def get_table_metadata(self, table_name: str) -> Optional[TableMetadata]:
method list_tables (line 302) | def list_tables(self) -> list[str]:
method get_fresh_name (line 306) | def get_fresh_name(self, name: str) -> str:
method cleanup (line 332) | def cleanup(self) -> None:
method get_relative_data_file_path (line 339) | def get_relative_data_file_path(self, table_name: str) -> str:
method read_data_as_df (line 361) | def read_data_as_df(self, table_name: str) -> pd.DataFrame:
method write_parquet_from_arrow (line 409) | def write_parquet_from_arrow(
method write_parquet (line 461) | def write_parquet(
method get_parquet_schema (line 511) | def get_parquet_schema(self, table_name: str) -> dict:
method get_parquet_path (line 537) | def get_parquet_path(self, table_name: str) -> Path:
method run_parquet_sql (line 549) | def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:
method refresh_parquet_from_arrow (line 573) | def refresh_parquet_from_arrow(
method refresh_parquet (line 610) | def refresh_parquet(
method local_dir (line 622) | def local_dir(self):
method save_workspace_snapshot (line 636) | def save_workspace_snapshot(self, dst: Path) -> None:
method restore_workspace_snapshot (line 645) | def restore_workspace_snapshot(self, src: Path) -> None:
method _sanitize_session_name (line 661) | def _sanitize_session_name(name: str) -> str:
method _get_sessions_root (line 665) | def _get_sessions_root(self) -> Path:
method _session_dir (line 671) | def _session_dir(self, session_name: str) -> Path:
method save_session (line 674) | def save_session(self, session_name: str, state: dict) -> str:
method load_session (line 699) | def load_session(self, session_name: str) -> dict | None:
method list_sessions (line 717) | def list_sessions(self) -> list[dict]:
method delete_session (line 738) | def delete_session(self, session_name: str) -> bool:
method export_session_zip (line 747) | def export_session_zip(self, state: dict) -> io.BytesIO:
method import_session_zip (line 763) | def import_session_zip(self, zip_data: io.BytesIO) -> dict:
method __repr__ (line 797) | def __repr__(self) -> str:
class WorkspaceWithTempData (line 801) | class WorkspaceWithTempData:
method __init__ (line 835) | def __init__(self, workspace: Workspace, temp_data: Optional[list[dict...
method __getattr__ (line 845) | def __getattr__(self, name: str) -> Any:
method get_table_metadata (line 851) | def get_table_metadata(self, table_name: str) -> Optional[TableMetadata]:
method list_tables (line 859) | def list_tables(self) -> list[str]:
method read_data_as_df (line 866) | def read_data_as_df(self, table_name: str) -> pd.DataFrame:
method __enter__ (line 876) | def __enter__(self) -> "WorkspaceWithTempData":
method __exit__ (line 904) | def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
FILE: py-src/data_formulator/demo_stream_routes.py
function make_csv_response (line 84) | def make_csv_response(rows: list, filename: str = "data.csv") -> Response:
function _fetch_iss_position (line 113) | def _fetch_iss_position() -> dict[str, Any] | None:
function _iss_collector_loop (line 130) | def _iss_collector_loop():
function start_iss_collector (line 148) | def start_iss_collector():
function get_iss (line 160) | def get_iss():
function reset_iss (line 205) | def reset_iss():
function get_earthquakes (line 220) | def get_earthquakes():
function get_weather (line 381) | def get_weather():
function get_weather_history (line 484) | def get_weather_history():
function get_weather_forecast (line 622) | def get_weather_forecast():
function get_weather_today (line 765) | def get_weather_today():
function _yf_is_valid (line 888) | def _yf_is_valid(val):
function _yf_format_timestamp (line 896) | def _yf_format_timestamp(date_obj):
function get_yfinance_history (line 921) | def get_yfinance_history():
function get_yfinance_recent (line 977) | def get_yfinance_recent():
function get_yfinance_financials (line 1033) | def get_yfinance_financials():
function _generate_sale_transaction (line 1127) | def _generate_sale_transaction(timestamp: datetime) -> dict[str, Any]:
function get_live_sales (line 1155) | def get_live_sales():
function get_info (line 1211) | def get_info():
FILE: py-src/data_formulator/sandbox/__init__.py
function create_sandbox (line 11) | def create_sandbox(sandbox: str = "local") -> LocalSandbox | DockerSandbox:
FILE: py-src/data_formulator/sandbox/base.py
class Sandbox (line 19) | class Sandbox(ABC):
method run_python_code (line 23) | def run_python_code(
FILE: py-src/data_formulator/sandbox/docker_sandbox.py
class DockerSandbox (line 38) | class DockerSandbox(Sandbox):
method __init__ (line 56) | def __init__(
method run_python_code (line 68) | def run_python_code(
method _cleanup (line 217) | def _cleanup(tmpdir: str) -> None:
FILE: py-src/data_formulator/sandbox/local_sandbox.py
function _warm_worker_loop (line 29) | def _warm_worker_loop(conn):
class _WarmWorkerPool (line 109) | class _WarmWorkerPool:
method __init__ (line 117) | def __init__(self, size: int = 2):
method _spawn (line 125) | def _spawn(self) -> tuple[Process, object]:
method acquire (line 131) | def acquire(self) -> tuple[Process, object]:
method release (line 144) | def release(self, proc: Process, conn) -> None:
method discard (line 150) | def discard(self, proc: Process, conn) -> None:
method shutdown (line 161) | def shutdown(self) -> None:
class LocalSandbox (line 185) | class LocalSandbox(Sandbox):
method run_python_code (line 197) | def run_python_code(
method _run_in_warm_subprocess (line 255) | def _run_in_warm_subprocess(code, allowed_objects):
FILE: py-src/data_formulator/sandbox/not_a_sandbox.py
class NotASandbox (line 19) | class NotASandbox(Sandbox):
method run_python_code (line 27) | def run_python_code(
FILE: py-src/data_formulator/session_routes.py
function _disk_persistence_enabled (line 24) | def _disk_persistence_enabled() -> bool:
function _strip_sensitive (line 45) | def _strip_sensitive(state: dict) -> dict:
function save_session (line 55) | def save_session():
function list_sessions (line 77) | def list_sessions():
function load_session (line 87) | def load_session():
function delete_session (line 107) | def delete_session():
function export_session (line 126) | def export_session():
function import_session (line 142) | def import_session():
FILE: py-src/data_formulator/tables_routes.py
function _get_workspace (line 35) | def _get_workspace():
function _should_use_duckdb (line 45) | def _should_use_duckdb(workspace, table_name: str) -> bool:
function _quote_duckdb (line 58) | def _quote_duckdb(col: str) -> str:
function _dedup_dataframe_columns (line 63) | def _dedup_dataframe_columns(df: pd.DataFrame) -> pd.DataFrame:
function _dedup_list (line 70) | def _dedup_list(items: list) -> list:
function _build_parquet_sample_sql (line 75) | def _build_parquet_sample_sql(
function _table_metadata_to_source_metadata (line 143) | def _table_metadata_to_source_metadata(meta: DatalakeTableMetadata) -> d...
function open_workspace (line 159) | def open_workspace():
function list_tables (line 186) | def list_tables():
function _apply_aggregation_and_sample (line 242) | def _apply_aggregation_and_sample(
function sample_table (line 305) | def sample_table():
function get_table_data (line 353) | def get_table_data():
function create_table (line 398) | def create_table():
function sync_table_data (line 468) | def sync_table_data():
function drop_table (line 504) | def drop_table():
function upload_db_file (line 523) | def upload_db_file():
function download_db_file (line 532) | def download_db_file():
function reset_db_file (line 541) | def reset_db_file():
function _is_numeric_duckdb_type (line 552) | def _is_numeric_duckdb_type(col_type: str) -> bool:
function analyze_table (line 561) | def analyze_table():
function sanitize_table_name (line 632) | def sanitize_table_name(table_name: str) -> str:
function sanitize_db_error_message (line 636) | def sanitize_db_error_message(error: Exception) -> tuple[str, int]:
function data_loader_list_data_loaders (line 677) | def data_loader_list_data_loaders():
function data_loader_list_tables (line 700) | def data_loader_list_tables():
function data_loader_ingest_data (line 725) | def data_loader_ingest_data():
function data_loader_view_query_sample (line 763) | def data_loader_view_query_sample():
function data_loader_fetch_data (line 790) | def data_loader_fetch_data():
function data_loader_ingest_data_from_query (line 845) | def data_loader_ingest_data_from_query():
function data_loader_refresh_table (line 854) | def data_loader_refresh_table():
function data_loader_get_table_metadata (line 903) | def data_loader_get_table_metadata():
function data_loader_list_table_metadata (line 926) | def data_loader_list_table_metadata():
FILE: py-src/data_formulator/workflows/chart_semantics.py
class TypeRegistryEntry (line 36) | class TypeRegistryEntry:
function get_registry_entry (line 115) | def get_registry_entry(semantic_type: str) -> TypeRegistryEntry:
function is_registered (line 120) | def is_registered(semantic_type: str) -> bool:
class ChannelSemantics (line 129) | class ChannelSemantics:
function resolve_vl_type (line 141) | def resolve_vl_type(semantic_type: str, values: List[Any]) -> str:
function _looks_like_year_integers (line 194) | def _looks_like_year_integers(values: List[Any]) -> bool:
function _infer_vl_type_from_data (line 212) | def _infer_vl_type_from_data(values: List[Any]) -> str:
function _is_likely_timestamp (line 256) | def _is_likely_timestamp(val: Any) -> bool:
function _timestamp_to_ms (line 271) | def _timestamp_to_ms(val: float) -> float:
function _looks_like_date (line 307) | def _looks_like_date(s: str) -> bool:
function _try_parse_date (line 325) | def _try_parse_date(val: Any) -> Optional[datetime]:
function infer_ordinal_sort_order (line 408) | def infer_ordinal_sort_order(semantic_type: str, values: List[Any]) -> l...
function _match_sequence (line 430) | def _match_sequence(
function _expand_to_full_year (line 461) | def _expand_to_full_year(val: str) -> str:
function convert_temporal_data (line 470) | def convert_temporal_data(
function _extract_sem_type (line 567) | def _extract_sem_type(annotation: Any) -> str:
function resolve_channel_semantics (line 580) | def resolve_channel_semantics(
FILE: py-src/data_formulator/workflows/create_vl_plots.py
function field_metadata_to_semantic_types (line 22) | def field_metadata_to_semantic_types(
function resolve_field_type (line 66) | def resolve_field_type(
function detect_field_type (line 91) | def detect_field_type(series: pd.Series) -> str:
function coerce_field_type (line 281) | def coerce_field_type(chart_type: str, channel: str, detected_type: str)...
function get_chart_template (line 299) | def get_chart_template(chart_type: str) -> dict | None:
function create_chart_spec (line 306) | def create_chart_spec(df: pd.DataFrame, fields: list[str], chart_type: s...
function fields_to_encodings (line 314) | def fields_to_encodings(df, chart_type: str, fields: list[str]) -> dict[...
function assemble_vegailte_chart (line 615) | def assemble_vegailte_chart(
function _build_initial_spec (line 887) | def _build_initial_spec(
function _post_process_chart (line 1037) | def _post_process_chart(
function _post_process_lollipop (line 1083) | def _post_process_lollipop(spec: dict, df: pd.DataFrame, encodings: dict...
function _post_process_regression (line 1110) | def _post_process_regression(spec: dict, encodings: dict) -> None:
function _post_process_ranged_dot (line 1147) | def _post_process_ranged_dot(spec: dict, encodings: dict) -> None:
function _post_process_candlestick (line 1165) | def _post_process_candlestick(
function _post_process_waterfall (line 1219) | def _post_process_waterfall(
function _post_process_density (line 1283) | def _post_process_density(spec: dict, encodings: dict, config: dict | No...
function _post_process_radar (line 1307) | def _post_process_radar(
function _post_process_pyramid (line 1467) | def _post_process_pyramid(spec: dict, df: pd.DataFrame, encodings: dict)...
function _post_process_streamgraph (line 1521) | def _post_process_streamgraph(spec: dict, encodings: dict, config: dict ...
function _post_process_bump (line 1536) | def _post_process_bump(spec: dict, encodings: dict) -> None:
function _post_process_strip (line 1545) | def _post_process_strip(
function _post_process_rose (line 1604) | def _post_process_rose(
function _apply_semantic_encoding (line 1650) | def _apply_semantic_encoding(
function _apply_spec_quality (line 1675) | def _apply_spec_quality(
function _apply_chart_config (line 1795) | def _apply_chart_config(spec: dict, chart_type: str, config: dict):
function _get_top_values (line 1875) | def _get_top_values(df: pd.DataFrame, field_name: str, unique_values: list,
function vl_spec_to_png (line 1908) | def vl_spec_to_png(spec: dict, output_path: str | None = None, scale: fl...
function spec_to_base64 (line 1934) | def spec_to_base64(spec: dict, scale: float = 1.0) -> str:
FILE: py-src/data_formulator/workspace_factory.py
function _build_azure_container_client (line 22) | def _build_azure_container_client(cfg: dict):
function get_workspace (line 70) | def get_workspace(identity_id: str) -> Workspace:
FILE: src/app/App.tsx
type PaletteColor (line 112) | interface PaletteColor {
type SimplePaletteColorOptions (line 116) | interface SimplePaletteColorOptions {
type Palette (line 120) | interface Palette {
type PaletteOptions (line 124) | interface PaletteOptions {
type AppFCProps (line 132) | interface AppFCProps {
function stringAvatar (line 1314) | function stringAvatar(name: string) {
FILE: src/app/chartCache.ts
type ChartCacheEntry (line 17) | interface ChartCacheEntry {
function getCachedChart (line 26) | function getCachedChart(chartId: string): ChartCacheEntry | undefined {
function setCachedChart (line 31) | function setCachedChart(chartId: string, entry: ChartCacheEntry): void {
function invalidateChart (line 36) | function invalidateChart(chartId: string): void {
function clearCache (line 41) | function clearCache(): void {
function getChartPngDataUrl (line 51) | async function getChartPngDataUrl(
function computeCacheKey (line 92) | function computeCacheKey(
FILE: src/app/chartRecommendation.ts
constant AGENT_CHART_TYPE_MAP (line 17) | const AGENT_CHART_TYPE_MAP: Record<string, string> = {
FILE: src/app/dfSlice.tsx
type SSEMessage (line 33) | interface SSEMessage {
type ServerConfig (line 41) | interface ServerConfig {
type ModelConfig (line 52) | interface ModelConfig {
type FocusedId (line 62) | type FocusedId =
type ClientConfig (line 67) | interface ClientConfig {
type GeneratedReport (line 76) | interface GeneratedReport {
type DataFormulatorState (line 84) | interface DataFormulatorState {
function cleanupVirtualTablesFromWorkspace (line 221) | function cleanupVirtualTablesFromWorkspace(tables: DictTable[]) {
FILE: src/app/identity.ts
constant BROWSER_ID_KEY (line 15) | const BROWSER_ID_KEY = 'df_browser_id';
type IdentityType (line 17) | type IdentityType = 'user' | 'browser';
type Identity (line 19) | interface Identity {
type UserInfo (line 24) | interface UserInfo {
function generateUUID (line 33) | function generateUUID(): string {
function getBrowserId (line 51) | function getBrowserId(): string {
function clearBrowserId (line 71) | function clearBrowserId(): void {
function resolveIdentity (line 86) | function resolveIdentity(userInfo?: UserInfo | null): Identity {
function getIdentityKey (line 106) | function getIdentityKey(identity: Identity): string {
FILE: src/app/store.ts
type AppDispatch (line 10) | type AppDispatch = typeof store.dispatch
FILE: src/app/tableThunks.ts
type LoadTablePayload (line 22) | interface LoadTablePayload {
type LoadTableResult (line 43) | interface LoadTableResult {
function buildDictTableFromWorkspace (line 305) | function buildDictTableFromWorkspace(
function hasLocalOnlyAncestor (line 362) | function hasLocalOnlyAncestor(tableId: string, tables: DictTable[]): boo...
FILE: src/app/tokens.ts
type AppPaletteEntry (line 101) | interface AppPaletteEntry {
type AppPalette (line 107) | interface AppPalette {
FILE: src/app/useDataRefresh.tsx
type RefreshResult (line 12) | interface RefreshResult {
function useDataRefresh (line 29) | function useDataRefresh() {
function useDerivedTableRefresh (line 447) | function useDerivedTableRefresh() {
FILE: src/app/useFormulateData.ts
type IdeaItem (line 10) | type IdeaItem = {
type StreamIdeasOptions (line 17) | interface StreamIdeasOptions {
type FormulateDataOptions (line 33) | interface FormulateDataOptions {
function generateTableId (line 63) | function generateTableId(tables: DictTable[]): string {
function useFormulateData (line 77) | function useFormulateData() {
FILE: src/app/utils.tsx
function getUrls (line 14) | function getUrls() {
function getCurrentNamespacedIdentity (line 86) | async function getCurrentNamespacedIdentity(): Promise<string> {
function getAuthToken (line 105) | function getAuthToken(): string | null {
function fetchWithIdentity (line 127) | async function fetchWithIdentity(
function usePrevious (line 155) | function usePrevious<T>(value: T): T | undefined {
function djb2Hash (line 168) | function djb2Hash(str: string): string {
function computeContentHash (line 188) | function computeContentHash(rows: any[], names?: string[]): string {
function runCodeOnInputListsInVM (line 261) | function runCodeOnInputListsInVM(
function extractFieldsFromEncodingMap (line 310) | function extractFieldsFromEncodingMap(encodingMap: EncodingMap, allField...
function prepVisTable (line 330) | function prepVisTable(table: any[], allFields: FieldItem[], encodingMap:...
function hashCode (line 516) | function hashCode(str: string) {
FILE: src/components/ChartTemplates.tsx
constant CHART_ICONS (line 63) | const CHART_ICONS: Record<string, any> = {
function addIcons (line 101) | function addIcons(defs: { chart: string }[]): ChartTemplate[] {
constant CHART_TEMPLATES (line 108) | const CHART_TEMPLATES: { [key: string]: ChartTemplate[] } = Object.fromE...
function getChartTemplate (line 125) | function getChartTemplate(chartType: string): ChartTemplate | undefined {
FILE: src/components/ComponentType.tsx
type FieldSource (line 8) | type FieldSource = "custom" | "original";
type FieldItem (line 10) | interface FieldItem {
type Trigger (line 27) | interface Trigger {
type DataCleanTableOutput (line 38) | type DataCleanTableOutput = {
type DataCleanBlock (line 48) | interface DataCleanBlock {
type DataSourceType (line 64) | type DataSourceType = 'paste' | 'file' | 'url' | 'stream' | 'database' |...
type DataSourceConfig (line 69) | interface DataSourceConfig {
type DictTable (line 94) | interface DictTable {
function createDictTable (line 143) | function createDictTable(
type ChartInsight (line 185) | interface ChartInsight {
type Chart (line 191) | type Chart = {
function computeInsightKey (line 204) | function computeInsightKey(chart: Chart): string {
type EncodingMap (line 225) | type EncodingMap = { [key in Channel]: EncodingItem; }
type EncodingItem (line 227) | interface EncodingItem {
type ChartTemplate (line 245) | type ChartTemplate = ChartTemplateDef & {
constant AGGR_OP_LIST (line 249) | const AGGR_OP_LIST = ["count", "sum", "average"] as const
type AggrOp (line 251) | type AggrOp = typeof AGGR_OP_LIST[number];
type Channel (line 252) | type Channel = typeof channels[number];
type EncodingDropResult (line 254) | interface EncodingDropResult {
FILE: src/components/RotatingTextBlock.tsx
type RotatingTextBlockProps (line 4) | interface RotatingTextBlockProps {
FILE: src/data/column.ts
class Column (line 7) | class Column {
method constructor (line 14) | constructor(data: any[], type?: Type) {
method uniques (line 21) | get uniques(): any[] {
method type (line 25) | get type(): Type {
method length (line 29) | get length(): number {
method get (line 33) | get(row: number): any {
FILE: src/data/table.ts
class ColumnTable (line 19) | class ColumnTable {
method constructor (line 28) | constructor(columns: Map<string, Column>, names: string[]) {
FILE: src/data/types.ts
type Type (line 4) | enum Type {
FILE: src/data/utils.ts
function tupleEqual (line 187) | function tupleEqual(a: any[], b: any[]) {
FILE: src/lib/agents-chart/chartjs/assemble.ts
function assembleChartjs (line 60) | function assembleChartjs(input: ChartAssemblyInput): any {
FILE: src/lib/agents-chart/chartjs/instantiate-spec.ts
function cjsApplyLayoutToSpec (line 40) | function cjsApplyLayoutToSpec(
function cjsApplyTooltips (line 152) | function cjsApplyTooltips(config: any): void {
FILE: src/lib/agents-chart/chartjs/recommendation.ts
function cjsAdaptChart (line 11) | function cjsAdaptChart(
function cjsRecommendEncodings (line 22) | function cjsRecommendEncodings(
FILE: src/lib/agents-chart/chartjs/templates/index.ts
function cjsGetTemplateDef (line 40) | function cjsGetTemplateDef(chartType: string): ChartTemplateDef | undefi...
function cjsGetTemplateChannels (line 47) | function cjsGetTemplateChannels(chartType: string): string[] {
FILE: src/lib/agents-chart/chartjs/templates/scatter.ts
function computePointRadius (line 16) | function computePointRadius(width: number, height: number, pointCount: n...
FILE: src/lib/agents-chart/chartjs/templates/utils.ts
function getFieldCardinality (line 20) | function getFieldCardinality(field: string, table: any[]): number {
function extractCategories (line 32) | function extractCategories(data: any[], field: string, ordinalSortOrder?...
function groupBy (line 65) | function groupBy(data: any[], field: string): Map<string, any[]> {
constant DEFAULT_COLORS (line 78) | const DEFAULT_COLORS = [
constant DEFAULT_BG_COLORS (line 91) | const DEFAULT_BG_COLORS = [
function detectAxes (line 107) | function detectAxes(
function buildCategoryAlignedData (line 126) | function buildCategoryAlignedData(
FILE: src/lib/agents-chart/core/compute-layout.ts
type AxisLayoutInput (line 69) | interface AxisLayoutInput {
function computeLayout (line 109) | function computeLayout(
function countDistinctSeries (line 585) | function countDistinctSeries(
function computeChannelBudgets (line 629) | function computeChannelBudgets(
function computeFacetGrid (line 781) | function computeFacetGrid(
function computeMinSubplotDimensions (line 954) | function computeMinSubplotDimensions(
FILE: src/lib/agents-chart/core/decisions.ts
type EncodingTypeDecision (line 39) | interface EncodingTypeDecision {
function visCategoryToVLType (line 58) | function visCategoryToVLType(vc: VisCategory): 'quantitative' | 'ordinal...
function validateTemporalParsing (line 76) | function validateTemporalParsing(
function resolveTemporalEncoding (line 111) | function resolveTemporalEncoding(
function applyOrdinalGuards (line 150) | function applyOrdinalGuards(
function disambiguateMultiEncoding (line 201) | function disambiguateMultiEncoding(
function resolveEncodingType (line 285) | function resolveEncodingType(
type GasPressureParams (line 382) | interface GasPressureParams {
constant DEFAULT_GAS_PRESSURE_PARAMS (line 405) | const DEFAULT_GAS_PRESSURE_PARAMS: GasPressureParams = {
type GasPressureDecision (line 414) | interface GasPressureDecision {
function computeGasPressure (line 441) | function computeGasPressure(
type ElasticStretchParams (line 518) | interface ElasticStretchParams {
type ElasticBudget (line 532) | interface ElasticBudget {
function computeElasticBudget (line 549) | function computeElasticBudget(
type AxisStepDecision (line 571) | interface AxisStepDecision {
function computeAxisStep (line 589) | function computeAxisStep(
type FacetLayoutDecision (line 613) | interface FacetLayoutDecision {
type FacetLayoutParams (line 627) | interface FacetLayoutParams {
function computeFacetLayout (line 645) | function computeFacetLayout(
type LabelSizingDecision (line 682) | interface LabelSizingDecision {
function computeLabelSizing (line 702) | function computeLabelSizing(
type OverflowDecision (line 743) | interface OverflowDecision {
function computeOverflow (line 759) | function computeOverflow(
type CircumferencePressureParams (line 780) | interface CircumferencePressureParams {
type CircumferencePressureResult (line 805) | interface CircumferencePressureResult {
function computeCircumferencePressure (line 837) | function computeCircumferencePressure(
function computeEffectiveBarCount (line 906) | function computeEffectiveBarCount(values: number[]): number {
FILE: src/lib/agents-chart/core/field-semantics.ts
type SemanticAnnotation (line 51) | interface SemanticAnnotation {
type FormatSpec (line 70) | interface FormatSpec {
type DomainConstraint (line 82) | interface DomainConstraint {
type TickConstraint (line 90) | interface TickConstraint {
type ColorSchemeHint (line 100) | interface ColorSchemeHint {
type DivergingInfo (line 110) | interface DivergingInfo {
type FieldSemantics (line 133) | interface FieldSemantics {
function toTypeString (line 183) | function toTypeString(input: string | SemanticAnnotation | undefined): s...
function normalizeAnnotation (line 202) | function normalizeAnnotation(
constant CURRENCY_MAP (line 215) | const CURRENCY_MAP: Record<string, string> = {
constant UNIT_SUFFIX_MAP (line 229) | const UNIT_SUFFIX_MAP: Record<string, string> = {
function detectPercentageRepresentation (line 252) | function detectPercentageRepresentation(values: number[]): '0-1' | '0-10...
function detectPrecision (line 267) | function detectPrecision(values: number[]): number {
function precisionFormat (line 292) | function precisionFormat(values: number[], useGrouping = true, signMode:...
function resolveFormat (line 305) | function resolveFormat(
function resolveDefaultVisType (line 445) | function resolveDefaultVisType(
function resolveAggregationDefault (line 504) | function resolveAggregationDefault(
function resolveZeroClassFromAnnotation (line 528) | function resolveZeroClassFromAnnotation(
function resolveScaleType (line 554) | function resolveScaleType(
function mergeIntrinsicWithData (line 609) | function mergeIntrinsicWithData(
function snapToBoundHeuristic (line 670) | function snapToBoundHeuristic(
function resolveDomainConstraint (line 723) | function resolveDomainConstraint(
function resolveTickConstraint (line 771) | function resolveTickConstraint(
function resolveCanonicalOrder (line 817) | function resolveCanonicalOrder(
function resolveCyclic (line 837) | function resolveCyclic(semanticType: string): boolean {
function resolveReversed (line 852) | function resolveReversed(semanticType: string, channel?: string): boolean {
function resolveNice (line 872) | function resolveNice(
function resolveDivergingInfo (line 900) | function resolveDivergingInfo(
function resolveColorSchemeHint (line 952) | function resolveColorSchemeHint(
function resolveBinningSuggested (line 993) | function resolveBinningSuggested(
function resolveStackable (line 1028) | function resolveStackable(
function resolveSortDirection (line 1053) | function resolveSortDirection(
function resolveFieldSemantics (line 1081) | function resolveFieldSemantics(
FILE: src/lib/agents-chart/core/filter-overflow.ts
function filterOverflow (line 54) | function filterOverflow(
FILE: src/lib/agents-chart/core/recommendation.ts
type SemanticRole (line 45) | type SemanticRole =
type ChannelRoleMap (line 56) | type ChannelRoleMap = Partial<Record<string, SemanticRole>>;
constant FAMILY_XY_STANDARD (line 61) | const FAMILY_XY_STANDARD: ChannelRoleMap = {
constant FAMILY_PIE (line 69) | const FAMILY_PIE: ChannelRoleMap = {
constant FAMILY_ROSE (line 75) | const FAMILY_ROSE: ChannelRoleMap = {
constant FAMILY_RADAR (line 81) | const FAMILY_RADAR: ChannelRoleMap = {
constant FAMILY_MAP (line 87) | const FAMILY_MAP: ChannelRoleMap = {
constant FAMILY_CANDLESTICK (line 93) | const FAMILY_CANDLESTICK: ChannelRoleMap = {
constant FAMILY_HISTOGRAM (line 100) | const FAMILY_HISTOGRAM: ChannelRoleMap = {
constant FAMILY_DENSITY (line 106) | const FAMILY_DENSITY: ChannelRoleMap = {
constant FAMILY_HEATMAP (line 112) | const FAMILY_HEATMAP: ChannelRoleMap = {
constant FAMILY_GAUGE (line 118) | const FAMILY_GAUGE: ChannelRoleMap = {
constant FAMILY_FUNNEL (line 123) | const FAMILY_FUNNEL: ChannelRoleMap = {
constant FAMILY_TREEMAP (line 128) | const FAMILY_TREEMAP: ChannelRoleMap = {
constant FAMILY_SANKEY (line 133) | const FAMILY_SANKEY: ChannelRoleMap = {
constant FAMILY_RANGE (line 138) | const FAMILY_RANGE: ChannelRoleMap = {
constant CHART_ROLE_MAP (line 146) | const CHART_ROLE_MAP: Record<string, ChannelRoleMap> = {
function getChannelRole (line 195) | function getChannelRole(chartType: string, channel: string): SemanticRole {
function findChannelsByRole (line 203) | function findChannelsByRole(chartType: string, templateChannels: string[...
constant FALLBACK_CHAIN (line 208) | const FALLBACK_CHAIN: Partial<Record<SemanticRole, SemanticRole[]>> = {
constant ROLE_PRIORITY (line 217) | const ROLE_PRIORITY: Record<SemanticRole, number> = {
function adaptChannels (line 246) | function adaptChannels(
function adaptViaRecommendation (line 280) | function adaptViaRecommendation(
function adaptViaRoles (line 415) | function adaptViaRoles(
function tryAssign (line 469) | function tryAssign(
type InternalTableView (line 492) | interface InternalTableView {
type RecommendFn (line 506) | type RecommendFn = (chartType: string, tv: InternalTableView) => Record<...
function buildTableView (line 508) | function buildTableView(data: any[], semanticTypes: Record<string, strin...
type PrefScore (line 531) | type PrefScore = number;
type ChannelPrefFn (line 538) | type ChannelPrefFn = (
function resolveAssignment (line 554) | function resolveAssignment(
function isTemporalField (line 622) | function isTemporalField(type: string, semanticType: string): boolean {
function isQuantitativeField (line 626) | function isQuantitativeField(type: string, semanticType: string): boolean {
function isOrdinalField (line 633) | function isOrdinalField(type: string, semanticType: string, hasLevels: b...
function isCategoricalFieldCheck (line 638) | function isCategoricalFieldCheck(type: string, semanticType: string): bo...
function isDiscreteLike (line 644) | function isDiscreteLike(type: string, semanticType: string, cardinality:...
function nameMatches (line 652) | function nameMatches(name: string, patterns: string[]): boolean {
function isLikelyIdentifierOrRank (line 657) | function isLikelyIdentifierOrRank(name: string): boolean {
function pick (line 667) | function pick(
function pickAllQuantitative (line 731) | function pickAllQuantitative(tv: InternalTableView, used: Set<string>): ...
function hasMultipleValuesPerField (line 749) | function hasMultipleValuesPerField(tv: InternalTableView, fieldName: str...
function isValidGroupingField (line 760) | function isValidGroupingField(tv: InternalTableView, xField: string, col...
function pickValidGroupingField (line 771) | function pickValidGroupingField(
function isValidLineSeriesData (line 800) | function isValidLineSeriesData(tv: InternalTableView, xField: string, co...
function pickLineChartColorField (line 823) | function pickLineChartColorField(
function calculateMultiplicity (line 852) | function calculateMultiplicity(tv: InternalTableView, xField: string, co...
function pickBestGroupingField (line 862) | function pickBestGroupingField(
function recommendChannels (line 909) | function recommendChannels(
function getRecommendation (line 927) | function getRecommendation(chartType: string, tv: InternalTableView): Re...
FILE: src/lib/agents-chart/core/resolve-semantics.ts
constant MAX_TIMESTAMP_SEC (line 57) | const MAX_TIMESTAMP_SEC = 4102444800;
constant MAX_TIMESTAMP_MS (line 58) | const MAX_TIMESTAMP_MS = 4102444800000;
function isLikelyTimestamp (line 60) | function isLikelyTimestamp(val: number): boolean {
function timestampToMs (line 66) | function timestampToMs(val: number): number {
function looksLikeDateString (line 70) | function looksLikeDateString(s: string): boolean {
type TemporalAnalysis (line 79) | interface TemporalAnalysis {
function analyzeTemporalField (line 93) | function analyzeTemporalField(fieldValues: any[]): TemporalAnalysis | nu...
function computeDataVotes (line 132) | function computeDataVotes(same: TemporalAnalysis['same']): number[] {
constant SEMANTIC_LEVEL (line 164) | const SEMANTIC_LEVEL: Record<string, number> = {
function pickBestLevel (line 173) | function pickBestLevel(votes: number[]): { level: number; score: number } {
function levelToFormat (line 185) | function levelToFormat(level: number, analysis: TemporalAnalysis): strin...
function resolveTemporalFormat (line 201) | function resolveTemporalFormat(
function expandToFullYear (line 228) | function expandToFullYear(val: string): string {
function convertTemporalData (line 244) | function convertTemporalData(
function resolveChannelSemantics (line 312) | function resolveChannelSemantics(
FILE: src/lib/agents-chart/core/semantic-types.ts
type SemanticType (line 163) | type SemanticType = typeof SemanticTypes[keyof typeof SemanticTypes];
function getVisCategory (line 253) | function getVisCategory(semanticType: string): VisCategory | null {
function inferVisCategory (line 266) | function inferVisCategory(values: any[]): VisCategory {
function isMeasureType (line 289) | function isMeasureType(semanticType: string): boolean {
function isTimeSeriesType (line 297) | function isTimeSeriesType(semanticType: string): boolean {
function isCategoricalType (line 305) | function isCategoricalType(semanticType: string): boolean {
function isOrdinalType (line 312) | function isOrdinalType(semanticType: string): boolean {
function isGeoType (line 320) | function isGeoType(semanticType: string): boolean {
function isGeoCoordinateType (line 328) | function isGeoCoordinateType(semanticType: string): boolean {
function isGeoLocationString (line 336) | function isGeoLocationString(semanticType: string): boolean {
function isNonMeasureNumeric (line 343) | function isNonMeasureNumeric(semanticType: string): boolean {
type ZeroClass (line 368) | type ZeroClass = 'meaningful' | 'arbitrary' | 'contextual';
type ZeroDecision (line 374) | interface ZeroDecision {
function getZeroClass (line 394) | function getZeroClass(semanticType: string): ZeroClass | 'unknown' {
function computeZeroDecision (line 414) | function computeZeroDecision(
function computePaddedDomain (line 488) | function computePaddedDomain(
type ColorSchemeType (line 507) | type ColorSchemeType = 'categorical' | 'sequential' | 'diverging';
type ColorSchemeRecommendation (line 509) | interface ColorSchemeRecommendation {
function getRecommendedColorScheme (line 585) | function getRecommendedColorScheme(
constant MONTH_FULL (line 772) | const MONTH_FULL = ['January','February','March','April','May','June','J...
constant MONTH_ABBR3 (line 773) | const MONTH_ABBR3 = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Se...
constant MONTH_NUM (line 774) | const MONTH_NUM = ['1','2','3','4','5','6','7','8','9','10','11','12'];
constant DOW_FULL (line 777) | const DOW_FULL = ['Monday','Tuesday','Wednesday','Thursday','Friday','Sa...
constant DOW_ABBR3 (line 778) | const DOW_ABBR3 = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
constant DOW_ABBR2 (line 779) | const DOW_ABBR2 = ['Mo','Tu','We','Th','Fr','Sa','Su'];
constant DOW_FULL_SUN (line 782) | const DOW_FULL_SUN = ['Sunday','Monday','Tuesday','Wednesday','Thursday'...
constant DOW_ABBR3_SUN (line 783) | const DOW_ABBR3_SUN = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
constant QUARTER_LABELS (line 786) | const QUARTER_LABELS = ['Q1','Q2','Q3','Q4'];
constant COMPASS_8 (line 789) | const COMPASS_8 = ['N','NE','E','SE','S','SW','W','NW'];
constant COMPASS_8_FULL (line 790) | const COMPASS_8_FULL = ['North','Northeast','East','Southeast','South','...
constant COMPASS_4 (line 791) | const COMPASS_4 = ['N','E','S','W'];
constant COMPASS_4_FULL (line 792) | const COMPASS_4_FULL = ['North','East','South','West'];
type OrdinalSequence (line 794) | interface OrdinalSequence {
constant ORDINAL_SEQUENCES (line 802) | const ORDINAL_SEQUENCES: Record<string, OrdinalSequence[]> = {
function buildLookup (line 830) | function buildLookup(seq: OrdinalSequence): Map<string, number> {
function matchSequence (line 853) | function matchSequence(values: any[], sequences: OrdinalSequence[]): str...
function inferOrdinalSortOrder (line 901) | function inferOrdinalSortOrder(
FILE: src/lib/agents-chart/core/type-registry.ts
type VisCategory (line 23) | type VisCategory = 'quantitative' | 'ordinal' | 'nominal' | 'temporal' |...
type T0Family (line 30) | type T0Family = 'Temporal' | 'Measure' | 'Discrete' | 'Geographic' | 'Ca...
type T1Category (line 33) | type T1Category =
type DomainShape (line 41) | type DomainShape = 'open' | 'bounded' | 'fixed' | 'cyclic';
type AggRole (line 42) | type AggRole = 'additive' | 'intensive' | 'signed-additive' | 'dimension...
type DivergingClass (line 43) | type DivergingClass = 'none' | 'inherent' | 'conditional';
type FormatClass (line 44) | type FormatClass = 'currency' | 'percent' | 'signed-percent' | 'signed-c...
type ZeroBaseline (line 55) | type ZeroBaseline = 'meaningful' | 'arbitrary' | 'contextual' | 'none';
type TypeRegistryEntry (line 57) | interface TypeRegistryEntry {
constant TYPE_REGISTRY (line 81) | const TYPE_REGISTRY: Record<string, TypeRegistryEntry> = {
constant UNKNOWN_ENTRY (line 166) | const UNKNOWN_ENTRY: TypeRegistryEntry = {
function getRegistryEntry (line 182) | function getRegistryEntry(semanticType: string): TypeRegistryEntry {
function isRegistered (line 187) | function isRegistered(semanticType: string): boolean {
function getRegisteredTypes (line 195) | function getRegisteredTypes(): string[] {
FILE: src/lib/agents-chart/core/types.ts
type ChartEncoding (line 38) | interface ChartEncoding {
type ChannelSemantics (line 59) | interface ChannelSemantics {
type SemanticResult (line 130) | type SemanticResult = Record<string, ChannelSemantics>;
type MarkCognitiveChannel (line 148) | type MarkCognitiveChannel = 'position' | 'length' | 'area' | 'color';
type LayoutDeclaration (line 153) | interface LayoutDeclaration {
type OverflowStrategy (line 199) | type OverflowStrategy = (
type OverflowStrategyContext (line 208) | interface OverflowStrategyContext {
type ChannelBudgets (line 229) | interface ChannelBudgets {
type OverflowResult (line 238) | interface OverflowResult {
type FacetGridResult (line 257) | interface FacetGridResult {
type TruncationWarning (line 271) | interface TruncationWarning {
type LayoutResult (line 322) | interface LayoutResult {
type InstantiateContext (line 384) | interface InstantiateContext {
type ChartPropertyDef (line 426) | type ChartPropertyDef = {
type ChartTemplateDef (line 444) | interface ChartTemplateDef {
type ChartWarning (line 517) | interface ChartWarning {
type ChartAssemblyInput (line 552) | interface ChartAssemblyInput {
type AssembleOptions (line 605) | interface AssembleOptions {
FILE: src/lib/agents-chart/echarts/assemble.ts
function assembleECharts (line 90) | function assembleECharts(input: ChartAssemblyInput): any {
type ECResolvedChannelEncoding (line 446) | interface ECResolvedChannelEncoding {
constant TABLEAU10 (line 472) | const TABLEAU10 = [
constant TABLEAU20 (line 476) | const TABLEAU20 = [
constant SET1 (line 482) | const SET1 = [
constant SET2 (line 486) | const SET2 = [
constant CATEGORY10 (line 490) | const CATEGORY10 = [
constant SCHEME_TO_PALETTE (line 495) | const SCHEME_TO_PALETTE: Record<string, string[]> = {
function schemeToPalette (line 509) | function schemeToPalette(schemeName: string): string[] {
function buildECEncodings (line 523) | function buildECEncodings(
FILE: src/lib/agents-chart/echarts/facet.ts
type FacetConfig (line 26) | interface FacetConfig {
function ecCombineFacetPanels (line 50) | function ecCombineFacetPanels(
FILE: src/lib/agents-chart/echarts/instantiate-spec.ts
function ecApplyLayoutToSpec (line 51) | function ecApplyLayoutToSpec(
function convertTemporalFormat (line 500) | function convertTemporalFormat(d3Format: string): string {
constant MONTH_ABBR (line 513) | const MONTH_ABBR = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Au...
constant MONTH_FULL (line 514) | const MONTH_FULL = ['January', 'February', 'March', 'April', 'May', 'Jun...
function formatCategoryTemporal (line 520) | function formatCategoryTemporal(value: string, d3Format: string): string {
function formatTimestamp (line 531) | function formatTimestamp(val: number, d3Format: string): string {
function fmtNumForTooltip (line 546) | function fmtNumForTooltip(v: unknown): string {
function buildEncodingTooltipFormatter (line 556) | function buildEncodingTooltipFormatter(option: any): ((params: any) => s...
function ecApplyTooltips (line 621) | function ecApplyTooltips(option: any): void {
FILE: src/lib/agents-chart/echarts/recommendation.ts
function ecGetRecommendation (line 25) | function ecGetRecommendation(chartType: string, tv: InternalTableView): ...
function ecAdaptChart (line 78) | function ecAdaptChart(
function ecRecommendEncodings (line 89) | function ecRecommendEncodings(
FILE: src/lib/agents-chart/echarts/templates/area.ts
function buildCategoryAlignedData (line 152) | function buildCategoryAlignedData(
FILE: src/lib/agents-chart/echarts/templates/bar.ts
function buildCategoryValues (line 34) | function buildCategoryValues(
function buildCategoryCounts (line 52) | function buildCategoryCounts(
function buildCategoryGroupCounts (line 66) | function buildCategoryGroupCounts(
FILE: src/lib/agents-chart/echarts/templates/boxplot.ts
function fiveNumberSummary (line 21) | function fiveNumberSummary(values: number[]): [number, number, number, n...
function quantile (line 41) | function quantile(sorted: number[], p: number): number {
function findOutliers (line 51) | function findOutliers(values: number[]): number[] {
FILE: src/lib/agents-chart/echarts/templates/candlestick.ts
function computeMA (line 173) | function computeMA(prices: number[], window: number): (number | null)[] {
FILE: src/lib/agents-chart/echarts/templates/density.ts
function binData (line 12) | function binData(values: number[], numBins: number): { x: number[]; y: n...
FILE: src/lib/agents-chart/echarts/templates/gauge.ts
function niceGaugeMax (line 203) | function niceGaugeMax(v: number): number {
FILE: src/lib/agents-chart/echarts/templates/heatmap.ts
constant SCHEME_COLORS (line 19) | const SCHEME_COLORS: Record<string, string[]> = {
FILE: src/lib/agents-chart/echarts/templates/index.ts
function ecGetTemplateDef (line 61) | function ecGetTemplateDef(chartType: string): ChartTemplateDef | undefin...
function ecGetTemplateChannels (line 68) | function ecGetTemplateChannels(chartType: string): string[] {
FILE: src/lib/agents-chart/echarts/templates/jitter.ts
function jitter (line 14) | function jitter(seed: number): () => number {
FILE: src/lib/agents-chart/echarts/templates/line.ts
function buildCategoryAlignedData (line 151) | function buildCategoryAlignedData(
constant RANK_SEMANTIC_TYPES (line 166) | const RANK_SEMANTIC_TYPES = new Set(['Rank', 'Index', 'Score', 'Rating',...
FILE: src/lib/agents-chart/echarts/templates/radar.ts
function niceMax (line 23) | function niceMax(v: number): number {
FILE: src/lib/agents-chart/echarts/templates/scatter.ts
function computeSymbolSize (line 17) | function computeSymbolSize(width: number, height: number, pointCount: nu...
function linearRegression (line 595) | function linearRegression(data: number[][]): { slope: number; intercept:...
function polyRegression (line 614) | function polyRegression(data: number[][], order: number): { coeffs: numb...
function polyEval (line 658) | function polyEval(coeffs: number[], x: number): number {
function regressionCurvePoints (line 665) | function regressionCurvePoints(
FILE: src/lib/agents-chart/echarts/templates/utils.ts
function getCategoryOrder (line 15) | function getCategoryOrder(ctx: InstantiateContext, channel: string): str...
function getFieldCardinality (line 37) | function getFieldCardinality(field: string, table: any[]): number {
function resolveDiscreteType (line 44) | function resolveDiscreteType(
function extractCategories (line 67) | function extractCategories(data: any[], field: string, ordinalSortOrder?...
function groupBy (line 101) | function groupBy(data: any[], field: string): Map<string, any[]> {
function buildAxisConfig (line 114) | function buildAxisConfig(
constant DEFAULT_COLORS (line 141) | const DEFAULT_COLORS = [
function detectAxes (line 150) | function detectAxes(
FILE: src/lib/agents-chart/gofish/assemble.ts
type GoFishSpec (line 57) | interface GoFishSpec {
function buildRenderFunction (line 89) | function buildRenderFunction(
function buildFlowOp (line 222) | function buildFlowOp(gf: any, desc: any): any {
function buildMark (line 242) | function buildMark(gf: any, desc: any): any {
function buildSpecDescription (line 269) | function buildSpecDescription(gfDesc: any): string {
function assembleGoFish (line 322) | function assembleGoFish(input: ChartAssemblyInput): GoFishSpec {
FILE: src/lib/agents-chart/gofish/recommendation.ts
function gfAdaptChart (line 11) | function gfAdaptChart(
function gfRecommendEncodings (line 22) | function gfRecommendEncodings(
FILE: src/lib/agents-chart/gofish/templates/index.ts
function gfGetTemplateDef (line 36) | function gfGetTemplateDef(chartType: string): ChartTemplateDef | undefin...
function gfGetTemplateChannels (line 43) | function gfGetTemplateChannels(chartType: string): string[] {
FILE: src/lib/agents-chart/gofish/templates/utils.ts
function detectAxes (line 20) | function detectAxes(
function extractCategories (line 39) | function extractCategories(data: any[], field: string, ordinalSortOrder?...
function groupBy (line 72) | function groupBy(data: any[], field: string): Map<string, any[]> {
function aggregateByCategory (line 86) | function aggregateByCategory(
FILE: src/lib/agents-chart/test-data/area-tests.ts
type DimType (line 28) | type DimType = 'Q' | 'T' | 'N' | 'O';
type AreaMatrixEntry (line 30) | interface AreaMatrixEntry {
constant AREA_MATRIX (line 52) | const AREA_MATRIX: AreaMatrixEntry[] = [
constant STREAMGRAPH_MATRIX (line 93) | const STREAMGRAPH_MATRIX: AreaMatrixEntry[] = [
type AreaCh (line 106) | interface AreaCh {
constant AREA_NAMES (line 115) | const AREA_NAMES: Record<string, Record<DimType, string>> = {
constant AREA_FALLBACKS (line 121) | const AREA_FALLBACKS: Record<DimType, string[]> = {
constant AREA_CAT_POOLS (line 128) | const AREA_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', ...
constant AREA_T_STARTS (line 129) | const AREA_T_STARTS = [2020, 2023, 2019, 2022];
function buildAreaChannels (line 131) | function buildAreaChannels(entry: AreaMatrixEntry, nPerSeries: number): ...
function genAreaTrend (line 186) | function genAreaTrend(n: number, base: number, drift: number, volatility...
function genAreaSeriesData (line 196) | function genAreaSeriesData(
function genAreaGridData (line 257) | function genAreaGridData(channels: AreaCh[], rand: () => number): Record...
function genAreaDatePairData (line 277) | function genAreaDatePairData(n: number, channels: AreaCh[], rand: () => ...
function buildAreaTitle (line 307) | function buildAreaTitle(entry: AreaMatrixEntry): string {
function buildAreaTags (line 320) | function buildAreaTags(entry: AreaMatrixEntry, dataLen: number): string[] {
function areaMatrixToTestCase (line 343) | function areaMatrixToTestCase(
function genAreaTests (line 395) | function genAreaTests(): TestCase[] {
function genStreamgraphTests (line 400) | function genStreamgraphTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/bar-tests.ts
type DimType (line 28) | type DimType = 'Q' | 'T' | 'N';
type BarMatrixEntry (line 30) | interface BarMatrixEntry {
constant BAR_MATRIX (line 46) | const BAR_MATRIX: BarMatrixEntry[] = [
constant STACKED_BAR_MATRIX (line 79) | const STACKED_BAR_MATRIX: BarMatrixEntry[] = [
constant GROUPED_BAR_MATRIX (line 103) | const GROUPED_BAR_MATRIX: BarMatrixEntry[] = [
type BarCh (line 133) | interface BarCh {
constant BAR_NAMES (line 142) | const BAR_NAMES: Record<string, Record<DimType, string>> = {
constant BAR_FALLBACKS (line 148) | const BAR_FALLBACKS: Record<DimType, string[]> = {
constant BAR_CAT_POOLS (line 154) | const BAR_CAT_POOLS = ['Product', 'Country', 'Department', 'Category', '...
constant BAR_T_STARTS (line 155) | const BAR_T_STARTS = [2020, 2023, 2019, 2022];
function buildBarChannels (line 157) | function buildBarChannels(entry: BarMatrixEntry): BarCh[] {
function genBarYValue (line 217) | function genBarYValue(yCh: BarCh, rand: () => number): any {
function genBarData (line 229) | function genBarData(
function buildBarTitle (line 328) | function buildBarTitle(entry: BarMatrixEntry): string {
function buildBarTags (line 343) | function buildBarTags(entry: BarMatrixEntry, dataLen: number): string[] {
function barMatrixToTestCase (line 364) | function barMatrixToTestCase(
function genBarTests (line 408) | function genBarTests(): TestCase[] {
function genStackedBarTests (line 413) | function genStackedBarTests(): TestCase[] {
function genGroupedBarTests (line 418) | function genGroupedBarTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/chartjs-tests.ts
function genScatterData (line 22) | function genScatterData(n: number, seed: number) {
function genScatterColorData (line 30) | function genScatterColorData(n: number, seed: number) {
function genBarData (line 40) | function genBarData(seed: number) {
function genLineData (line 49) | function genLineData(seed: number) {
function genMultiSeriesLineData (line 58) | function genMultiSeriesLineData(seed: number) {
function genStackedBarData (line 75) | function genStackedBarData(seed: number) {
function genGroupedBarData (line 92) | function genGroupedBarData(seed: number) {
function genAreaData (line 109) | function genAreaData(seed: number) {
function genPieData (line 126) | function genPieData(seed: number) {
function genHistogramData (line 135) | function genHistogramData(n: number, seed: number) {
function genRadarData (line 142) | function genRadarData(seed: number) {
function genChartJsScatterTests (line 163) | function genChartJsScatterTests(): TestCase[] {
function genChartJsLineTests (line 224) | function genChartJsLineTests(): TestCase[] {
function genChartJsBarTests (line 267) | function genChartJsBarTests(): TestCase[] {
function genChartJsStackedBarTests (line 314) | function genChartJsStackedBarTests(): TestCase[] {
function genChartJsGroupedBarTests (line 338) | function genChartJsGroupedBarTests(): TestCase[] {
function genChartJsAreaTests (line 362) | function genChartJsAreaTests(): TestCase[] {
function genChartJsPieTests (line 404) | function genChartJsPieTests(): TestCase[] {
function genChartJsHistogramTests (line 447) | function genChartJsHistogramTests(): TestCase[] {
function genChartJsRadarTests (line 469) | function genChartJsRadarTests(): TestCase[] {
function genChartJsStressTests (line 493) | function genChartJsStressTests(): TestCase[] {
function genChartJsRoseTests (line 544) | function genChartJsRoseTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/date-tests.ts
function genDateTests (line 12) | function genDateTests(dateFormats: DateFormat[], seed: number): TestCase...
function genDateYearTests (line 72) | function genDateYearTests(): TestCase[] {
function genDateMonthTests (line 128) | function genDateMonthTests(): TestCase[] {
function genDateYearMonthTests (line 161) | function genDateYearMonthTests(): TestCase[] {
function genDateDecadeTests (line 238) | function genDateDecadeTests(): TestCase[] {
function genDateDateTimeTests (line 270) | function genDateDateTimeTests(): TestCase[] {
function genDateHoursTests (line 335) | function genDateHoursTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/debug-tests.ts
function gen_agenciesQ4RecGpt41 (line 17) | function gen_agenciesQ4RecGpt41(): TestCase {
function gen_agenciesQ4RecGpt51 (line 242) | function gen_agenciesQ4RecGpt51(): TestCase {
function gen_apiLogosQ4RecGpt41 (line 469) | function gen_apiLogosQ4RecGpt41(): TestCase {
function gen_apiLogosQ4RecGpt51 (line 496) | function gen_apiLogosQ4RecGpt51(): TestCase {
function gen_apisguruApisQ3RecGpt41 (line 522) | function gen_apisguruApisQ3RecGpt41(): TestCase {
function gen_apisguruApisQ3RecGpt51 (line 546) | function gen_apisguruApisQ3RecGpt51(): TestCase {
function gen_careStateQ1RecGpt41 (line 570) | function gen_careStateQ1RecGpt41(): TestCase {
function gen_careStateQ1RecGpt51 (line 795) | function gen_careStateQ1RecGpt51(): TestCase {
function gen_careStateQ3RecGpt41 (line 1021) | function gen_careStateQ3RecGpt41(): TestCase {
function gen_careStateQ3RecGpt51 (line 1248) | function gen_careStateQ3RecGpt51(): TestCase {
function gen_colorRanksQ1RecGpt41 (line 1475) | function gen_colorRanksQ1RecGpt41(): TestCase {
function gen_colorRanksQ5RecGpt41 (line 1698) | function gen_colorRanksQ5RecGpt41(): TestCase {
function gen_colorRanksQ5RecGpt51 (line 1923) | function gen_colorRanksQ5RecGpt51(): TestCase {
function gen_countryListsQ1RecGpt41 (line 2150) | function gen_countryListsQ1RecGpt41(): TestCase {
function gen_countryListsQ2RecGpt41 (line 2374) | function gen_countryListsQ2RecGpt41(): TestCase {
function gen_countryListsQ2RecGpt51 (line 2601) | function gen_countryListsQ2RecGpt51(): TestCase {
function gen_countryListsQ3RecGpt41 (line 2829) | function gen_countryListsQ3RecGpt41(): TestCase {
function gen_countryListsQ4RecGpt41 (line 3054) | function gen_countryListsQ4RecGpt41(): TestCase {
function gen_endangeredStatusQ1RecGpt41 (line 3078) | function gen_endangeredStatusQ1RecGpt41(): TestCase {
function gen_familiesQ1RecGpt51 (line 3107) | function gen_familiesQ1RecGpt51(): TestCase {
function gen_familiesQ2RecGpt41 (line 3131) | function gen_familiesQ2RecGpt41(): TestCase {
function gen_familiesQ2RecGpt51 (line 3169) | function gen_familiesQ2RecGpt51(): TestCase {
function gen_familiesQ3RecGpt51 (line 3207) | function gen_familiesQ3RecGpt51(): TestCase {
function gen_familiesQ4RecGpt41 (line 3233) | function gen_familiesQ4RecGpt41(): TestCase {
function gen_familiesQ4RecGpt51 (line 3257) | function gen_familiesQ4RecGpt51(): TestCase {
function gen_familiesQ5RecGpt41 (line 3285) | function gen_familiesQ5RecGpt41(): TestCase {
function gen_fpiCodesQ5RecGpt51 (line 3507) | function gen_fpiCodesQ5RecGpt51(): TestCase {
function gen_modelDatQ1RecGpt51 (line 3533) | function gen_modelDatQ1RecGpt51(): TestCase {
function gen_modelDatQ2RecGpt41 (line 3569) | function gen_modelDatQ2RecGpt41(): TestCase {
function gen_modelDatQ2RecGpt51 (line 3596) | function gen_modelDatQ2RecGpt51(): TestCase {
function gen_modelDatQ4RecGpt41 (line 3821) | function gen_modelDatQ4RecGpt41(): TestCase {
function gen_modelDatQ5RecGpt41 (line 4051) | function gen_modelDatQ5RecGpt41(): TestCase {
function gen_ombCodesQ4RecGpt41 (line 4275) | function gen_ombCodesQ4RecGpt41(): TestCase {
function gen_ombCodesQ5RecGpt41 (line 4440) | function gen_ombCodesQ5RecGpt41(): TestCase {
function gen_penguinsRawQ1RecGpt41 (line 4597) | function gen_penguinsRawQ1RecGpt41(): TestCase {
function gen_penguinsRawQ1RecGpt51 (line 4629) | function gen_penguinsRawQ1RecGpt51(): TestCase {
function gen_pixarFilmsQ3RecGpt41 (line 4666) | function gen_pixarFilmsQ3RecGpt41(): TestCase {
function gen_rankByYearQ3RecGpt41 (line 4704) | function gen_rankByYearQ3RecGpt41(): TestCase {
function gen_simpsonsCharactersQ1RecGpt41 (line 4761) | function gen_simpsonsCharactersQ1RecGpt41(): TestCase {
function gen_simpsonsLocationsQ2RecGpt41 (line 4787) | function gen_simpsonsLocationsQ2RecGpt41(): TestCase {
function gen_simpsonsLocationsQ2RecGpt51 (line 4842) | function gen_simpsonsLocationsQ2RecGpt51(): TestCase {
function gen_simpsonsLocationsQ5RecGpt41 (line 4891) | function gen_simpsonsLocationsQ5RecGpt41(): TestCase {
function gen_topicsQ1RecGpt41 (line 4950) | function gen_topicsQ1RecGpt41(): TestCase {
function gen_topicsQ2RecGpt51 (line 5070) | function gen_topicsQ2RecGpt51(): TestCase {
function gen_user2025Q1RecGpt41 (line 5189) | function gen_user2025Q1RecGpt41(): TestCase {
function gen_user2025Q5RecGpt51 (line 5216) | function gen_user2025Q5RecGpt51(): TestCase {
function gen_vesuviusQ4RecGpt41 (line 5254) | function gen_vesuviusQ4RecGpt41(): TestCase {
function gen_vesuviusQ5RecGpt41 (line 5292) | function gen_vesuviusQ5RecGpt41(): TestCase {
function gen_vesuviusQ5RecGpt51 (line 5517) | function gen_vesuviusQ5RecGpt51(): TestCase {
function genDebugTests (line 5746) | function genDebugTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/discrete-axis-tests.ts
function cats (line 25) | function cats(prefix: string, n: number): string[] {
function randVal (line 30) | function randVal(rand: () => number, min = 10, max = 500): number {
constant SIZES (line 34) | const SIZES = [
function genBarSizing (line 43) | function genBarSizing(): TestCase[] {
function genStackedBarSizing (line 82) | function genStackedBarSizing(): TestCase[] {
function genGroupedBarSizing (line 128) | function genGroupedBarSizing(): TestCase[] {
function genScatterSizing (line 174) | function genScatterSizing(): TestCase[] {
function genLineSizing (line 221) | function genLineSizing(): TestCase[] {
function genAreaSizing (line 248) | function genAreaSizing(): TestCase[] {
function genLollipopSizing (line 277) | function genLollipopSizing(): TestCase[] {
function genHeatmapSizing (line 320) | function genHeatmapSizing(): TestCase[] {
function genBoxplotSizing (line 348) | function genBoxplotSizing(): TestCase[] {
function genStripSizing (line 394) | function genStripSizing(): TestCase[] {
function genBumpSizing (line 440) | function genBumpSizing(): TestCase[] {
function genPyramidSizing (line 466) | function genPyramidSizing(): TestCase[] {
function genWaterfallSizing (line 492) | function genWaterfallSizing(): TestCase[] {
function genRangedDotSizing (line 522) | function genRangedDotSizing(): TestCase[] {
function genPieSizing (line 548) | function genPieSizing(): TestCase[] {
function genRadarSizing (line 572) | function genRadarSizing(): TestCase[] {
function genDiscreteAxisTests (line 598) | function genDiscreteAxisTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/distribution-tests.ts
function genHistogramTests (line 9) | function genHistogramTests(): TestCase[] {
function genBoxplotTests (line 81) | function genBoxplotTests(): TestCase[] {
function genDensityTests (line 226) | function genDensityTests(): TestCase[] {
function genStripPlotTests (line 336) | function genStripPlotTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/echarts-tests.ts
function genScatterData (line 24) | function genScatterData(n: number, seed: number) {
function genScatterColorData (line 32) | function genScatterColorData(n: number, seed: number) {
function genBarData (line 42) | function genBarData(seed: number) {
function genLineData (line 51) | function genLineData(seed: number) {
function genMultiSeriesLineData (line 60) | function genMultiSeriesLineData(seed: number) {
function genStackedBarData (line 77) | function genStackedBarData(seed: number) {
function genGroupedBarData (line 94) | function genGroupedBarData(seed: number) {
function genEChartsScatterTests (line 115) | function genEChartsScatterTests(): TestCase[] {
function genEChartsLineTests (line 176) | function genEChartsLineTests(): TestCase[] {
function genEChartsBarTests (line 246) | function genEChartsBarTests(): TestCase[] {
function genEChartsStackedBarTests (line 290) | function genEChartsStackedBarTests(): TestCase[] {
function genEChartsGroupedBarTests (line 342) | function genEChartsGroupedBarTests(): TestCase[] {
function genEChartsStressTests (line 406) | function genEChartsStressTests(): TestCase[] {
function genEChartsAreaTests (line 589) | function genEChartsAreaTests(): TestCase[] {
function genEChartsPieTests (line 646) | function genEChartsPieTests(): TestCase[] {
function genEChartsHeatmapTests (line 700) | function genEChartsHeatmapTests(): TestCase[] {
function genEChartsHistogramTests (line 764) | function genEChartsHistogramTests(): TestCase[] {
function genEChartsBoxplotTests (line 823) | function genEChartsBoxplotTests(): TestCase[] {
function genEChartsRadarTests (line 890) | function genEChartsRadarTests(): TestCase[] {
function genEChartsCandlestickTests (line 971) | function genEChartsCandlestickTests(): TestCase[] {
function genEChartsStreamgraphTests (line 1057) | function genEChartsStreamgraphTests(): TestCase[] {
function buildEChartsFacetTest (line 1137) | function buildEChartsFacetTest(opts: {
function genEChartsFacetSmallTests (line 1218) | function genEChartsFacetSmallTests(): TestCase[] {
function genEChartsFacetWrapTests (line 1261) | function genEChartsFacetWrapTests(): TestCase[] {
function genEChartsFacetClipTests (line 1286) | function genEChartsFacetClipTests(): TestCase[] {
function genEChartsRoseTests (line 1320) | function genEChartsRoseTests(): TestCase[] {
function genEChartsGaugeTests (line 1397) | function genEChartsGaugeTests(): TestCase[] {
function genEChartsFunnelTests (line 1469) | function genEChartsFunnelTests(): TestCase[] {
function genEChartsTreemapTests (line 1548) | function genEChartsTreemapTests(): TestCase[] {
function genEChartsSunburstTests (line 1640) | function genEChartsSunburstTests(): TestCase[] {
function genEChartsSankeyTests (line 1748) | function genEChartsSankeyTests(): TestCase[] {
function genEChartsUniqueStressTests (line 1860) | function genEChartsUniqueStressTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/facet-tests.ts
constant FACET_SIZES (line 10) | const FACET_SIZES = { S: 2, M: 4, L: 8, XL: 12 } as const;
constant DISCRETE_SIZES (line 12) | const DISCRETE_SIZES = { S: 4, M: 8, L: 20, XL: 50 } as const;
function genFacetTests (line 20) | function genFacetTests(
function genFacetColumnTests (line 192) | function genFacetColumnTests(): TestCase[] { return genFacetTests('colum...
function genFacetRowTests (line 193) | function genFacetRowTests(): TestCase[] { return genFacetTests('row'); }
function genFacetColRowTests (line 194) | function genFacetColRowTests(): TestCase[] { return genFacetTests('colum...
function buildFacetTest (line 203) | function buildFacetTest(opts: {
function genFacetSmallTests (line 290) | function genFacetSmallTests(): TestCase[] {
function genFacetWrapTests (line 368) | function genFacetWrapTests(): TestCase[] {
function genFacetClipTests (line 411) | function genFacetClipTests(): TestCase[] {
function buildOverflowFacetTest (line 472) | function buildOverflowFacetTest(opts: {
function genFacetOverflowedColTests (line 563) | function genFacetOverflowedColTests(): TestCase[] {
function genFacetOverflowedColRowTests (line 598) | function genFacetOverflowedColRowTests(): TestCase[] {
function genFacetOverflowedRowTests (line 629) | function genFacetOverflowedRowTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/gas-pressure-tests.ts
function genUniform (line 24) | function genUniform(n: number, seed: number): { x: number; y: number }[] {
function genSingleCluster (line 33) | function genSingleCluster(n: number, seed: number): { x: number; y: numb...
function genTwoClusters (line 62) | function genTwoClusters(n: number, seed: number): { x: number; y: number...
constant DENSITIES (line 98) | const DENSITIES = [
constant DISTRIBUTIONS (line 104) | const DISTRIBUTIONS = [
function buildTestCase (line 110) | function buildTestCase(
function genWideXNarrowY (line 141) | function genWideXNarrowY(n: number, seed: number): { x: number; y: numbe...
function genNarrowXWideY (line 150) | function genNarrowXWideY(n: number, seed: number): { x: number; y: numbe...
function genWideXBandedY (line 159) | function genWideXBandedY(n: number, seed: number): { x: number; y: numbe...
function genDiagonalStripe (line 171) | function genDiagonalStripe(n: number, seed: number): { x: number; y: num...
function genUniformXExponentialY (line 186) | function genUniformXExponentialY(n: number, seed: number): { x: number; ...
constant ASYMMETRIC_CASES (line 194) | const ASYMMETRIC_CASES = [
function genGasPressureTests (line 216) | function genGasPressureTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/generators.ts
function seededRandom (line 14) | function seededRandom(seed: number) {
function genDates (line 22) | function genDates(n: number, startYear = 2018): string[] {
function genMonths (line 34) | function genMonths(n: number): string[] {
function genYears (line 40) | function genYears(n: number, start = 2000): number[] {
function genNaturalDates (line 45) | function genNaturalDates(n: number, startYear = 1998): string[] {
function genOrdinalLabels (line 58) | function genOrdinalLabels(prefix: string, n: number): string[] {
constant ORDINAL_PREFIXES (line 63) | const ORDINAL_PREFIXES = ['Stage', 'Step', 'Phase', 'Level', 'Round'];
function genCategories (line 66) | function genCategories(semanticType: string, n: number): string[] {
function genRandomNames (line 99) | function genRandomNames(n: number, seed = 777): string[] {
function genMeasure (line 119) | function genMeasure(n: number, min = 10, max = 1000, integers = false): ...
FILE: src/lib/agents-chart/test-data/gofish-tests.ts
function genScatterData (line 22) | function genScatterData(n: number, seed: number) {
function genScatterColorData (line 30) | function genScatterColorData(n: number, seed: number) {
function genBarData (line 40) | function genBarData(seed: number) {
function genLineData (line 49) | function genLineData(seed: number) {
function genMultiSeriesLineData (line 58) | function genMultiSeriesLineData(seed: number) {
function genStackedBarData (line 75) | function genStackedBarData(seed: number) {
function genGroupedBarData (line 92) | function genGroupedBarData(seed: number) {
function genAreaData (line 109) | function genAreaData(seed: number) {
function genStackedAreaData (line 118) | function genStackedAreaData(seed: number) {
function genPieData (line 135) | function genPieData(seed: number) {
function genScatterPieData (line 144) | function genScatterPieData(seed: number) {
function genGoFishScatterTests (line 172) | function genGoFishScatterTests(): TestCase[] {
function genGoFishLineTests (line 215) | function genGoFishLineTests(): TestCase[] {
function genGoFishBarTests (line 258) | function genGoFishBarTests(): TestCase[] {
function genGoFishStackedBarTests (line 305) | function genGoFishStackedBarTests(): TestCase[] {
function genGoFishGroupedBarTests (line 329) | function genGoFishGroupedBarTests(): TestCase[] {
function genGoFishAreaTests (line 353) | function genGoFishAreaTests(): TestCase[] {
function genGoFishStackedAreaTests (line 376) | function genGoFishStackedAreaTests(): TestCase[] {
function genGoFishPieTests (line 400) | function genGoFishPieTests(): TestCase[] {
function genGoFishScatterPieTests (line 423) | function genGoFishScatterPieTests(): TestCase[] {
function genGoFishStressTests (line 453) | function genGoFishStressTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/index.ts
constant TEST_GENERATORS (line 71) | const TEST_GENERATORS: Record<string, () => TestCase[]> = {
constant GALLERY_SECTIONS (line 169) | const GALLERY_SECTIONS: GallerySection[] = [
FILE: src/lib/agents-chart/test-data/line-area-stretch-tests.ts
function makeRandWalk (line 54) | function makeRandWalk(rand: () => number) {
constant SERIES_3 (line 69) | const SERIES_3 = ['Revenue', 'Costs', 'Profit'];
constant SERIES_20 (line 70) | const SERIES_20 = [
constant SERIES_40 (line 77) | const SERIES_40 = [
constant SERIES_60 (line 85) | const SERIES_60 = [
function genLineAreaStretchTests (line 96) | function genLineAreaStretchTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/line-area-tests.ts
function genDottedLineTests (line 12) | function genDottedLineTests(): TestCase[] {
function genBumpChartTests (line 38) | function genBumpChartTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/line-tests.ts
type DimType (line 28) | type DimType = 'Q' | 'T' | 'N' | 'O';
type LineMatrixEntry (line 30) | interface LineMatrixEntry {
constant LINE_MATRIX (line 52) | const LINE_MATRIX: LineMatrixEntry[] = [
type LineCh (line 93) | interface LineCh {
constant LINE_NAMES (line 102) | const LINE_NAMES: Record<string, Record<DimType, string>> = {
constant LINE_FALLBACKS (line 108) | const LINE_FALLBACKS: Record<DimType, string[]> = {
constant LINE_CAT_POOLS (line 115) | const LINE_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', ...
constant LINE_T_STARTS (line 116) | const LINE_T_STARTS = [2020, 2023, 2019, 2022];
function buildLineChannels (line 118) | function buildLineChannels(entry: LineMatrixEntry, nPerSeries: number): ...
function genLineWalk (line 173) | function genLineWalk(n: number, base: number, volatility: number, rand: ...
function genLineSeriesData (line 183) | function genLineSeriesData(
function genLineGridData (line 243) | function genLineGridData(channels: LineCh[], rand: () => number): Record...
function buildLineTitle (line 267) | function buildLineTitle(entry: LineMatrixEntry): string {
function buildLineTags (line 280) | function buildLineTags(entry: LineMatrixEntry, dataLen: number): string[] {
function lineMatrixToTestCase (line 303) | function lineMatrixToTestCase(entry: LineMatrixEntry, rand: () => number...
function genForecastTestSingleSeries (line 350) | function genForecastTestSingleSeries(rand: () => number): TestCase {
function genForecastTestMultiSeries (line 392) | function genForecastTestMultiSeries(rand: () => number): TestCase {
function genLineTests (line 444) | function genLineTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/scatter-tests.ts
type DimType (line 27) | type DimType = 'Q' | 'T' | 'N';
type MatrixEntry (line 30) | interface MatrixEntry {
constant SCATTER_MATRIX (line 49) | const SCATTER_MATRIX: MatrixEntry[] = [
type ChannelInfo (line 94) | interface ChannelInfo {
constant PREFERRED_NAMES (line 104) | const PREFERRED_NAMES: Record<string, Record<DimType, string>> = {
constant FALLBACK_NAMES (line 112) | const FALLBACK_NAMES: Record<DimType, string[]> = {
constant CAT_SEMANTICS (line 119) | const CAT_SEMANTICS = ['Category', 'Country', 'Department', 'Product', '...
constant T_START_YEARS (line 122) | const T_START_YEARS = [2020, 2023, 2019, 2022];
function buildChannels (line 128) | function buildChannels(entry: MatrixEntry): ChannelInfo[] {
function genValue (line 182) | function genValue(
function genGridData (line 199) | function genGridData(
function buildTitle (line 229) | function buildTitle(entry: MatrixEntry): string {
function buildTags (line 251) | function buildTags(entry: MatrixEntry, dataLen: number): string[] {
function matrixToTestCase (line 282) | function matrixToTestCase(entry: MatrixEntry, rand: () => number): TestC...
function genScatterTests (line 335) | function genScatterTests(): TestCase[] {
function genRegressionTests (line 344) | function genRegressionTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/semantic-tests.ts
constant CITIES (line 22) | const CITIES = ['Seattle', 'Austin', 'Boston', 'Denver', 'Miami'];
constant MONTHS (line 23) | const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
constant TEAMS (line 25) | const TEAMS = ['Alpha', 'Beta', 'Gamma', 'Delta'];
function seeded (line 27) | function seeded(seed: number) {
function genRevenueFormatTest (line 45) | function genRevenueFormatTest(): TestCase {
function genPercentageFormatTest (line 85) | function genPercentageFormatTest(): TestCase {
function genRatingDomainTest (line 131) | function genRatingDomainTest(): TestCase {
function genRankReversedTest (line 180) | function genRankReversedTest(): TestCase {
function genPopulationLogScaleTest (line 230) | function genPopulationLogScaleTest(): TestCase {
function genTemperatureInterpolationTest (line 284) | function genTemperatureInterpolationTest(): TestCase {
function genRevenueVsPercentTest (line 334) | function genRevenueVsPercentTest(): TestCase {
function genScoreDomainTest (line 380) | function genScoreDomainTest(): TestCase {
function genRatingBarDomainTest (line 431) | function genRatingBarDomainTest(): TestCase {
function genRevenueBarZeroTest (line 475) | function genRevenueBarZeroTest(): TestCase {
function genTemperatureScatterZeroTest (line 516) | function genTemperatureScatterZeroTest(): TestCase {
function genPercentageLineDomainTest (line 562) | function genPercentageLineDomainTest(): TestCase {
function genSemanticContextTests (line 598) | function genSemanticContextTests(): TestCase[] {
function genProfitSignedCurrencyTest (line 655) | function genProfitSignedCurrencyTest(): TestCase {
function genWeightUnitSuffixTest (line 697) | function genWeightUnitSuffixTest(): TestCase {
function genCountStepInterpolationTest (line 745) | function genCountStepInterpolationTest(): TestCase {
function genLatitudeDomainClampTest (line 793) | function genLatitudeDomainClampTest(): TestCase {
function genPercentageChangeSignedTest (line 841) | function genPercentageChangeSignedTest(): TestCase {
function genMonthCanonicalOrderTest (line 888) | function genMonthCanonicalOrderTest(): TestCase {
function genDayOfWeekOrderTest (line 932) | function genDayOfWeekOrderTest(): TestCase {
function genYearFormatTest (line 975) | function genYearFormatTest(): TestCase {
function genSentimentDivergingColorTest (line 1020) | function genSentimentDivergingColorTest(): TestCase {
function genRevenueSequentialColorTest (line 1067) | function genRevenueSequentialColorTest(): TestCase {
function genCorrelationDivergingTest (line 1118) | function genCorrelationDivergingTest(): TestCase {
function genNiceFalseScoreTest (line 1173) | function genNiceFalseScoreTest(): TestCase {
function genDurationUnitSuffixTest (line 1224) | function genDurationUnitSuffixTest(): TestCase {
function genQuarterCanonicalOrderTest (line 1274) | function genQuarterCanonicalOrderTest(): TestCase {
function genCostCurrencyFormatTest (line 1327) | function genCostCurrencyFormatTest(): TestCase {
function genDirectionCompassOrderTest (line 1371) | function genDirectionCompassOrderTest(): TestCase {
function genAgeGroupOrdinalTest (line 1418) | function genAgeGroupOrdinalTest(): TestCase {
function genBooleanColorTest (line 1466) | function genBooleanColorTest(): TestCase {
function genLongitudeDomainClampTest (line 1515) | function genLongitudeDomainClampTest(): TestCase {
function genIndexOrdinalTest (line 1566) | function genIndexOrdinalTest(): TestCase {
function genPercentageWholeNumberTest (line 1613) | function genPercentageWholeNumberTest(): TestCase {
function genScoreColorDivergingTest (line 1662) | function genScoreColorDivergingTest(): TestCase {
function genPriceEurCurrencyTest (line 1715) | function genPriceEurCurrencyTest(): TestCase {
function genYearOrdinalDisambiguationTest (line 1765) | function genYearOrdinalDisambiguationTest(): TestCase {
function genProfitColorDivergingTest (line 1820) | function genProfitColorDivergingTest(): TestCase {
function genCountIntegerFormatTest (line 1872) | function genCountIntegerFormatTest(): TestCase {
function genUnregisteredTypeFallbackTest (line 1919) | function genUnregisteredTypeFallbackTest(): TestCase {
function genSnapPctNoSnapTest (line 1962) | function genSnapPctNoSnapTest(): TestCase {
function genSnapPctMaxOnlyTest (line 2000) | function genSnapPctMaxOnlyTest(): TestCase {
function genSnapPctMinOnlyTest (line 2038) | function genSnapPctMinOnlyTest(): TestCase {
function genSnapPctBothTest (line 2075) | function genSnapPctBothTest(): TestCase {
function genSnapPctExceedTest (line 2114) | function genSnapPctExceedTest(): TestCase {
function genSnapPctChangeNoSnapTest (line 2151) | function genSnapPctChangeNoSnapTest(): TestCase {
function genSnapPctChangeMinTest (line 2188) | function genSnapPctChangeMinTest(): TestCase {
function genSnapPctChangeBothTest (line 2229) | function genSnapPctChangeBothTest(): TestCase {
function genSnapStackedSumNear100Test (line 2271) | function genSnapStackedSumNear100Test(): TestCase {
function genSnapStackedSumExceedsTest (line 2323) | function genSnapStackedSumExceedsTest(): TestCase {
function genSnapStackedIndividualSnapButTotalsExceedTest (line 2376) | function genSnapStackedIndividualSnapButTotalsExceedTest(): TestCase {
function genSnapStackedTotalsFarFromBoundTest (line 2429) | function genSnapStackedTotalsFarFromBoundTest(): TestCase {
function genSnapToBoundTests (line 2484) | function genSnapToBoundTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/specialized-tests.ts
function genHeatmapTests (line 10) | function genHeatmapTests(): TestCase[] {
function genPieTests (line 220) | function genPieTests(): TestCase[] {
function genRangedDotPlotTests (line 305) | function genRangedDotPlotTests(): TestCase[] {
function genLollipopTests (line 336) | function genLollipopTests(): TestCase[] {
function genCustomTests (line 443) | function genCustomTests(): TestCase[] {
function genWaterfallTests (line 512) | function genWaterfallTests(): TestCase[] {
function genCandlestickTests (line 631) | function genCandlestickTests(): TestCase[] {
function genRadarTests (line 788) | function genRadarTests(): TestCase[] {
function genPyramidTests (line 979) | function genPyramidTests(): TestCase[] {
function genRoseTests (line 1194) | function genRoseTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/stress-tests.ts
function genOverflowTests (line 11) | function genOverflowTests(): TestCase[] {
function genElasticityTests (line 233) | function genElasticityTests(): TestCase[] {
FILE: src/lib/agents-chart/test-data/types.ts
type TestCase (line 18) | interface TestCase {
type DateFormat (line 38) | interface DateFormat {
type GallerySection (line 48) | interface GallerySection {
function makeField (line 58) | function makeField(name: string, tableRef = 'test'): FieldItem {
function makeEncodingItem (line 62) | function makeEncodingItem(fieldID: string, opts?: Partial<EncodingItem>)...
function inferType (line 66) | function inferType(values: any[]): Type {
function buildMetadata (line 77) | function buildMetadata(data: Record<string, any>[]): Record<string, { ty...
FILE: src/lib/agents-chart/vegalite/assemble.ts
function assembleVegaLite (line 84) | function assembleVegaLite(input: ChartAssemblyInput): any {
function buildVLEncodings (line 424) | function buildVLEncodings(
function restructureFacets (line 691) | function restructureFacets(
FILE: src/lib/agents-chart/vegalite/instantiate-spec.ts
function vlApplyLayoutToSpec (line 66) | function vlApplyLayoutToSpec(
function buildAbbreviationExpr (line 478) | function buildAbbreviationExpr(prefix?: string, suffix?: string): string {
function formatSpecToLabelExpr (line 501) | function formatSpecToLabelExpr(fmt: FormatSpec): string | null {
function computeMaxStackedTotal (line 534) | function computeMaxStackedTotal(
function getEffectiveIntrinsicDomain (line 590) | function getEffectiveIntrinsicDomain(
function vlApplyFieldContext (line 637) | function vlApplyFieldContext(
function vlApplyTooltips (line 937) | function vlApplyTooltips(vgObj: any): void {
FILE: src/lib/agents-chart/vegalite/recommendation.ts
function vlGetRecommendation (line 42) | function vlGetRecommendation(chartType: string, tv: InternalTableView): ...
function vlAdaptChart (line 161) | function vlAdaptChart(
function vlRecommendEncodings (line 180) | function vlRecommendEncodings(
FILE: src/lib/agents-chart/vegalite/templates/area.ts
function applyInterpolate (line 21) | function applyInterpolate(vgSpec: any, config?: Record<string, any>): vo...
function hasContinuousColorOnConnectedMark (line 29) | function hasContinuousColorOnConnectedMark(resolvedEncodings: Record<str...
function buildContinuousColorAreaLayers (line 38) | function buildContinuousColorAreaLayers(
FILE: src/lib/agents-chart/vegalite/templates/bump.ts
constant RANK_SEMANTIC_TYPES (line 8) | const RANK_SEMANTIC_TYPES = new Set(['Rank', 'Index', 'Score', 'Rating',...
FILE: src/lib/agents-chart/vegalite/templates/index.ts
function vlGetTemplateDef (line 53) | function vlGetTemplateDef(chartType: string): ChartTemplateDef | undefin...
function vlGetTemplateChannels (line 60) | function vlGetTemplateChannels(chartType: string): string[] {
FILE: src/lib/agents-chart/vegalite/templates/line.ts
function applyInterpolate (line 21) | function applyInterpolate(vgSpec: any, config?: Record<string, any>): vo...
function hasContinuousColor (line 37) | function hasContinuousColor(resolvedEncodings: Record<string, any>): boo...
function buildContinuousColorLineLayers (line 59) | function buildContinuousColorLineLayers(
FILE: src/lib/agents-chart/vegalite/templates/radar.ts
function niceMax (line 20) | function niceMax(v: number): number {
function buildRadarLayers (line 35) | function buildRadarLayers(
FILE: src/lib/agents-chart/vegalite/templates/utils.ts
function isEquallyStrided (line 20) | function isEquallyStrided(field: string, table: any[]): boolean {
function getFieldCardinality (line 39) | function getFieldCardinality(field: string, table: any[]): number {
function resolveDiscreteType (line 47) | function resolveDiscreteType(
function resolveAsDiscrete (line 65) | function resolveAsDiscrete(
function detectBandedAxisFromSemantics (line 84) | function detectBandedAxisFromSemantics(
function detectBandedAxisForceDiscrete (line 126) | function detectBandedAxisForceDiscrete(
function setMarkProp (line 175) | function setMarkProp(mark: any, key: string, value: any): any {
function maxNonOverlapSize (line 217) | function maxNonOverlapSize(
function adjustBarMarks (line 255) | function adjustBarMarks(spec: any, ctx: InstantiateContext): void {
function adjustRectTiling (line 305) | function adjustRectTiling(spec: any, ctx: InstantiateContext): void {
function ensureDiscreteTypes (line 337) | function ensureDiscreteTypes(
FILE: src/views/About.tsx
type Feature (line 17) | interface Feature {
FILE: src/views/ChartGallery.tsx
function buildSharedInputSpec (line 260) | function buildSharedInputSpec(testCase: TestCase): { obj: Record<string,...
function testCaseToEChartsInput (line 304) | function testCaseToEChartsInput(testCase: TestCase, canvasSize: { width:...
constant DEFAULT_CANVAS_SIZE (line 340) | const DEFAULT_CANVAS_SIZE = { width: 400, height: 300 } as const;
function testCaseToChartJsInput (line 584) | function testCaseToChartJsInput(testCase: TestCase, canvasSize: { width:...
function testCaseToGoFishInput (line 778) | function testCaseToGoFishInput(testCase: TestCase, canvasSize: { width: ...
FILE: src/views/ChartRecBox.tsx
constant AUTO_FOCUS_NEW_CHART (line 41) | const AUTO_FOCUS_NEW_CHART = false;
type ChartRecBoxProps (line 43) | interface ChartRecBoxProps {
FILE: src/views/ChartRenderService.tsx
constant THUMB_WIDTH (line 32) | const THUMB_WIDTH = 120;
constant THUMB_HEIGHT (line 33) | const THUMB_HEIGHT = 90;
constant FULL_WIDTH (line 36) | const FULL_WIDTH = 300;
constant FULL_HEIGHT (line 37) | const FULL_HEIGHT = 300;
type RenderJob (line 39) | interface RenderJob {
function renderHeadless (line 50) | async function renderHeadless(
function scalePngDown (line 83) | async function scalePngDown(
FILE: src/views/ChatDialog.tsx
type ChatDialogProps (line 110) | interface ChatDialogProps {
FILE: src/views/ChatThreadView.tsx
type ThreadItem (line 28) | type ThreadItem = {
type ConversationThread (line 41) | type ConversationThread = {
type ThreadGroup (line 53) | type ThreadGroup = ConversationThread[];
FILE: src/views/DBTableManager.tsx
type DBTable (line 91) | interface DBTable {
type ColumnStatistics (line 112) | interface ColumnStatistics {
FILE: src/views/DataLoadingThread.tsx
type DialogContentItem (line 37) | type DialogContentItem = {
type DialogMessage (line 48) | type DialogMessage = {
type ThreadBlock (line 721) | interface ThreadBlock {
FILE: src/views/DataThread.tsx
constant LAYOUT_TABLE_HEIGHT (line 1814) | const LAYOUT_TABLE_HEIGHT = 28 + 8;
constant LAYOUT_TRIGGER_HEIGHT (line 1815) | const LAYOUT_TRIGGER_HEIGHT = 43 + 8;
constant LAYOUT_CHART_HEIGHT (line 1816) | const LAYOUT_CHART_HEIGHT = 90 + 8;
constant LAYOUT_THREAD_OVERHEAD (line 1817) | const LAYOUT_THREAD_OVERHEAD = 52;
constant LAYOUT_THREAD_GAP (line 1818) | const LAYOUT_THREAD_GAP = 8;
function estimateThreadHeight (line 1820) | function estimateThreadHeight(
function computeThreadColumnLayout (line 1841) | function computeThreadColumnLayout(
function layoutFlexOrder (line 1861) | function layoutFlexOrder(heights: number[], numColumns: number): number[...
function layoutPreserveOrder (line 1886) | function layoutPreserveOrder(heights: number[], numColumns: number): num...
constant SCROLL_TOLERANCE (line 1939) | const SCROLL_TOLERANCE = 1.5;
function chooseBestColumnLayout (line 1941) | function chooseBestColumnLayout(
type ThreadEntry (line 2225) | type ThreadEntry = { key: string; groupId: string; leafTables: DictTable...
FILE: src/views/DataThreadCards.tsx
type BuildTableCardProps (line 79) | interface BuildTableCardProps {
FILE: src/views/DataView.tsx
type FreeDataViewProps (line 19) | interface FreeDataViewProps {
FILE: src/views/EncodingBox.tsx
type LittleConceptCardProps (line 65) | interface LittleConceptCardProps {
type EncodingBoxProps (line 123) | interface EncodingBoxProps {
FILE: src/views/EncodingShelfCard.tsx
type EncodingShelfCardProps (line 76) | interface EncodingShelfCardProps {
FILE: src/views/EncodingShelfThread.tsx
type EncodingShelfThreadProps (line 29) | interface EncodingShelfThreadProps {
FILE: src/views/ExampleSessions.tsx
type ExampleSession (line 17) | interface ExampleSession {
FILE: src/views/ExplComponents.tsx
type ConceptExplanationItem (line 171) | interface ConceptExplanationItem {
type ConceptExplCardsProps (line 176) | interface ConceptExplCardsProps {
FILE: src/views/MessageSnackbar.tsx
type Message (line 15) | interface Message {
constant TYPE_SYMBOLS (line 24) | const TYPE_SYMBOLS: Record<string, string> = {
constant TYPE_COLORS (line 31) | const TYPE_COLORS: Record<string, string> = {
FILE: src/views/MultiTablePreview.tsx
type MultiTablePreviewProps (line 20) | interface MultiTablePreviewProps {
FILE: src/views/OperatorCard.tsx
type OperatorCardProp (line 20) | interface OperatorCardProp {
FILE: src/views/ReactTable.tsx
type ColumnDef (line 16) | interface ColumnDef {
type CustomReactTableProps (line 25) | interface CustomReactTableProps {
FILE: src/views/RefreshDataDialog.tsx
type TabPanelProps (line 31) | interface TabPanelProps {
function TabPanel (line 37) | function TabPanel(props: TabPanelProps) {
type RefreshDataDialogProps (line 52) | interface RefreshDataDialogProps {
FILE: src/views/ReportView.tsx
constant FONT_FAMILY_SYSTEM (line 57) | const FONT_FAMILY_SYSTEM = '-apple-system, BlinkMacSystemFont, "Segoe UI...
constant FONT_FAMILY_SERIF (line 58) | const FONT_FAMILY_SERIF = 'Georgia, Cambria, "Times New Roman", Times, s...
constant FONT_FAMILY_MONO (line 59) | const FONT_FAMILY_MONO = '"SFMono-Regular", Menlo, Monaco, Consolas, "Li...
constant COLOR_HEADING (line 62) | const COLOR_HEADING = 'rgb(37, 37, 37)';
constant COLOR_BODY (line 63) | const COLOR_BODY = 'rgb(55, 53, 47)';
constant COLOR_MUTED (line 64) | const COLOR_MUTED = 'rgb(73, 73, 73)';
constant COLOR_BG_LIGHT (line 65) | const COLOR_BG_LIGHT = 'rgba(247, 246, 243, 1)';
constant COLOR_SOCIAL_TEXT (line 68) | const COLOR_SOCIAL_TEXT = 'rgb(15, 20, 25)';
constant COLOR_SOCIAL_BORDER (line 69) | const COLOR_SOCIAL_BORDER = 'rgb(207, 217, 222)';
constant COLOR_SOCIAL_ACCENT (line 70) | const COLOR_SOCIAL_ACCENT = 'rgb(29, 155, 240)';
constant COLOR_EXEC_TEXT (line 73) | const COLOR_EXEC_TEXT = 'rgb(33, 37, 41)';
constant COLOR_EXEC_HEADING (line 74) | const COLOR_EXEC_HEADING = 'rgb(20, 24, 28)';
constant COLOR_EXEC_BORDER (line 75) | const COLOR_EXEC_BORDER = 'rgb(108, 117, 125)';
constant COLOR_EXEC_ACCENT (line 76) | const COLOR_EXEC_ACCENT = 'rgb(0, 123, 255)';
constant COLOR_EXEC_BG (line 77) | const COLOR_EXEC_BG = 'rgb(248, 249, 250)';
constant HEADING_BASE (line 80) | const HEADING_BASE = {
constant BODY_TEXT_BASE (line 87) | const BODY_TEXT_BASE = {
constant TABLE_CELL_BASE (line 96) | const TABLE_CELL_BASE = {
FILE: src/views/SelectableDataGrid.tsx
type ColumnDef (line 38) | interface ColumnDef {
type SelectableDataGridProps (line 49) | interface SelectableDataGridProps {
function descendingComparator (line 58) | function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {
function getComparator (line 68) | function getComparator<Key extends keyof any>(
function getColorForFieldSource (line 81) | function getColorForFieldSource(source: string | undefined, theme: any):...
type DraggableHeaderProps (line 96) | interface DraggableHeaderProps {
FILE: src/views/TableSelectionView.tsx
type DatasetMetadata (line 17) | interface DatasetMetadata {
type DatasetSelectionViewProps (line 32) | interface DatasetSelectionViewProps {
FILE: src/views/TestPanel.tsx
type TestPanelProps (line 16) | interface TestPanelProps {
type TestPanelState (line 19) | interface TestPanelState {
class TestPanel (line 23) | class TestPanel extends React.Component<TestPanelProps, TestPanelState> {
method constructor (line 25) | constructor(props: TestPanelProps) {
method processText (line 32) | private processText(reader: any, state: any) : any {
FILE: src/views/UnifiedDataUploadDialog.tsx
type UploadTabType (line 60) | type UploadTabType = 'menu' | 'upload' | 'paste' | 'url' | 'database' | ...
type TabPanelProps (line 62) | interface TabPanelProps {
function TabPanel (line 68) | function TabPanel(props: TabPanelProps) {
type DataSourceCardProps (line 86) | interface DataSourceCardProps {
type DataLoadMenuProps (line 179) | interface DataLoadMenuProps {
type UnifiedDataUploadDialogProps (line 441) | interface UnifiedDataUploadDialogProps {
FILE: src/views/VisualizationView.tsx
type VisPanelProps (line 84) | interface VisPanelProps { }
type VisPanelState (line 86) | interface VisPanelState {
function listen (line 421) | function listen(evt: MessageEvent) {
function send (line 429) | function send() {
function listen (line 516) | function listen(evt: MessageEvent) {
function send (line 523) | function send() {
function fetchDisplayRows (line 635) | async function fetchDisplayRows(sampleSize?: number) {
FILE: src/views/useFormulateData.ts
type IdeaItem (line 10) | type IdeaItem = {
type StreamIdeasOptions (line 17) | interface StreamIdeasOptions {
type FormulateDataOptions (line 33) | interface FormulateDataOptions {
function generateTableId (line 63) | function generateTableId(tables: DictTable[]): string {
function useFormulateData (line 77) | function useFormulateData() {
Copy disabled (too large)
Download .json
Condensed preview — 273 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,788K chars).
[
{
"path": ".devcontainer/devcontainer.json",
"chars": 1135,
"preview": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the\n// README at: https://github.co"
},
{
"path": ".github/dependabot.yml",
"chars": 467,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/python-build.yml",
"chars": 1611,
"preview": "# This workflow will install Python dependencies, run tests and lint with a variety of Python versions\n# For more inform"
},
{
"path": ".gitignore",
"chars": 6960,
"preview": "\n*env\n.venv/\n.env\n**/*.ipynb_checkpoints/\n.DS_Store\nbuild/\ndist/\nexperiment_data/\n\n## Ignore Visual Studio temporary fil"
},
{
"path": ".python-version",
"chars": 5,
"preview": "3.11\n"
},
{
"path": ".vscode/launch.json",
"chars": 573,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Flask\",\n \"type\": \"debugpy\",\n"
},
{
"path": ".vscode/tasks.json",
"chars": 479,
"preview": "{\n \"version\": \"2.0.0\",\n \"tasks\": [\n {\n \"label\": \"Activate Virtual Environment\",\n \"typ"
},
{
"path": "CODESPACES.md",
"chars": 1016,
"preview": "# Set up Data Formulator on Codespaces\nUse a preconfigured Codespace to get Data Formulator up and running quickly.\n\n## "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 444,
"preview": "# Microsoft Open Source Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://op"
},
{
"path": "CONTRIBUTING.md",
"chars": 920,
"preview": "# Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to\nagree to a Contri"
},
{
"path": "DEVELOPMENT.md",
"chars": 15742,
"preview": "# Set up a local Data Formulator development environment\nHow to set up your local machine.\n\n## Prerequisites\n* Python >="
},
{
"path": "LICENSE",
"chars": 1141,
"preview": " MIT License\n\n Copyright (c) Microsoft Corporation.\n\n Permission is hereby granted, free of charge, to any pers"
},
{
"path": "MANIFEST.in",
"chars": 131,
"preview": "include py-src/data_formulator/dist/*\ninclude py-src/data_formulator/dist/assets/*\nglobal-exclude .DS_Store\nexclude py-s"
},
{
"path": "README.md",
"chars": 17358,
"preview": "<h1 align=\"center\">\n <img src=\"./public/favicon.ico\" alt=\"Data Formulator icon\" width=\"28\"> \n Data Formulator: AI"
},
{
"path": "SECURITY.md",
"chars": 2757,
"preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
},
{
"path": "SUPPORT.md",
"chars": 375,
"preview": "# Support\r\n\r\n## How to file issues and get help \r\n\r\nThis project uses GitHub Issues to track bugs and feature requests."
},
{
"path": "embed/README.md",
"chars": 3422,
"preview": "# Embed Data Formulator\n\nFirst you'll need to build the bundle:\n```\nyarn build\n```\n\nThis puts the complete js file in th"
},
{
"path": "embed/dynamic.html",
"chars": 3441,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-widt"
},
{
"path": "embed/index.html",
"chars": 296,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "embed/postMessageTest.html",
"chars": 3497,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-widt"
},
{
"path": "eslint.config.js",
"chars": 1172,
"preview": "import globals from \"globals\";\nimport pluginJs from \"@eslint/js\";\nimport tseslint from \"typescript-eslint\";\nimport plugi"
},
{
"path": "index.html",
"chars": 1652,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"/favicon.ico\" />\n <"
},
{
"path": "local_server.bat",
"chars": 499,
"preview": ":: Copyright (c) Microsoft Corporation.\n:: Licensed under the MIT License.\n\n@echo off\n:: Set HTTP proxy environment vari"
},
{
"path": "local_server.sh",
"chars": 482,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n# Set HTTP proxy environment variables only (F"
},
{
"path": "package.json",
"chars": 2961,
"preview": "{\n \"name\": \"data-formulator\",\n \"type\": \"module\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"dependencies\": "
},
{
"path": "public/df_gas_prices.json",
"chars": 4760195,
"preview": "{\"tables\":[{\"id\":\"weekly_gas_prices\",\"displayId\":\"gas-prices\",\"names\":[\"date\",\"fuel\",\"grade\",\"formulation\",\"price\"],\"met"
},
{
"path": "public/df_global_energy.json",
"chars": 481513,
"preview": "{\"tables\":[{\"id\":\"global-energy-20-small.csv\",\"displayId\":\"energy-co2\",\"names\":[\"Year\",\"Entity\",\"Value_co2_emissions_kt_"
},
{
"path": "public/df_movies.json",
"chars": 1887038,
"preview": "{\"tables\":[{\"id\":\"movies\",\"displayId\":\"movies\",\"names\":[\"Title\",\"US Gross\",\"Worldwide Gross\",\"US DVD Sales\",\"Production "
},
{
"path": "public/df_stock_prices_live.json",
"chars": 607769,
"preview": "{\"tables\":[{\"id\":\"history\",\"displayId\":\"stock-hist\",\"names\":[\"symbol\",\"date\",\"open\",\"high\",\"low\",\"close\",\"volume\",\"fetch"
},
{
"path": "public/df_unemployment.json",
"chars": 491016,
"preview": "{\"tables\":[{\"id\":\"unemployment-across-industries\",\"displayId\":\"unemp-by-ind\",\"names\":[\"series\",\"year\",\"month\",\"count\",\"r"
},
{
"path": "public/manifest.json",
"chars": 302,
"preview": "{\n \"short_name\": \"Data Formulator\",\n \"name\": \"Data Formulator\",\n \"icons\": [\n {\n \"src\": \"data-formulator-logo-"
},
{
"path": "public/robots.txt",
"chars": 67,
"preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
},
{
"path": "py-src/data_formulator/__init__.py",
"chars": 335,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\ndef run_app():\n \"\"\"Launch the Data Formulat"
},
{
"path": "py-src/data_formulator/__main__.py",
"chars": 66,
"preview": "from .app import run_app\n\nif __name__ == \"__main__\":\n run_app()"
},
{
"path": "py-src/data_formulator/agent_routes.py",
"chars": 40558,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport argparse\nimport random\nimport sys\nimpor"
},
{
"path": "py-src/data_formulator/agents/__init__.py",
"chars": 670,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_data_transfo"
},
{
"path": "py-src/data_formulator/agents/agent_chart_insight.py",
"chars": 4752,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_utils import"
},
{
"path": "py-src/data_formulator/agents/agent_code_explanation.py",
"chars": 10184,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nfrom data_formulator.agents.agent_"
},
{
"path": "py-src/data_formulator/agents/agent_data_clean_stream.py",
"chars": 10428,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_utils import"
},
{
"path": "py-src/data_formulator/agents/agent_data_load.py",
"chars": 9018,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\n\nfrom data_formulator.agents.agent"
},
{
"path": "py-src/data_formulator/agents/agent_data_rec.py",
"chars": 18666,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport time\n\nfrom data_formulator."
},
{
"path": "py-src/data_formulator/agents/agent_data_transform.py",
"chars": 16749,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport time\n\nfrom data_formulator."
},
{
"path": "py-src/data_formulator/agents/agent_interactive_explore.py",
"chars": 14428,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport logging\nimport pandas as pd"
},
{
"path": "py-src/data_formulator/agents/agent_report_gen.py",
"chars": 7027,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\n\nfrom data_formulator.agents.agent"
},
{
"path": "py-src/data_formulator/agents/agent_sort_data.py",
"chars": 3426,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nfrom data_formulator.agents.agent_"
},
{
"path": "py-src/data_formulator/agents/agent_utils.py",
"chars": 9094,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport keyword\nimport numpy as np\n"
},
{
"path": "py-src/data_formulator/agents/agent_utils_sql.py",
"chars": 1529,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSQL-related utility functions for agents.\n"
},
{
"path": "py-src/data_formulator/agents/client_utils.py",
"chars": 5053,
"preview": "import litellm\nimport openai\nfrom azure.identity import DefaultAzureCredential, get_bearer_token_provider\n\n\nclass Client"
},
{
"path": "py-src/data_formulator/agents/data_agent.py",
"chars": 22317,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Autonomous data exploration agent (SWE-agen"
},
{
"path": "py-src/data_formulator/agents/semantic_types.py",
"chars": 19010,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\n=========================================="
},
{
"path": "py-src/data_formulator/agents/web_utils.py",
"chars": 10560,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport requests\nfrom bs4 import BeautifulSoup\n"
},
{
"path": "py-src/data_formulator/app.py",
"chars": 10477,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport argparse\nimport sys\nimport os\nimport mi"
},
{
"path": "py-src/data_formulator/auth.py",
"chars": 5135,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAuthentication and identity management for"
},
{
"path": "py-src/data_formulator/code_signing.py",
"chars": 4733,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"HMAC-based code signing for transformation "
},
{
"path": "py-src/data_formulator/data_loader/README.md",
"chars": 3368,
"preview": "## Data Loader Module\n\nThis module provides a framework for loading data from various external sources into the **worksp"
},
{
"path": "py-src/data_formulator/data_loader/__init__.py",
"chars": 1371,
"preview": "from data_formulator.data_loader.external_data_loader import ExternalDataLoader\nfrom data_formulator.data_loader.mysql_d"
},
{
"path": "py-src/data_formulator/data_loader/athena_data_loader.py",
"chars": 20736,
"preview": "import logging\nimport re\nimport time\nimport pyarrow as pa\nimport pyarrow.csv as pa_csv\nimport boto3\nimport botocore.exce"
},
{
"path": "py-src/data_formulator/data_loader/azure_blob_data_loader.py",
"chars": 12872,
"preview": "import json\nimport logging\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\nimport pyarrow.csv as p"
},
{
"path": "py-src/data_formulator/data_loader/bigquery_data_loader.py",
"chars": 9554,
"preview": "import logging\nimport re\nfrom typing import Any\nimport pyarrow as pa\n\nfrom data_formulator.data_loader.external_data_loa"
},
{
"path": "py-src/data_formulator/data_loader/external_data_loader.py",
"chars": 7913,
"preview": "from abc import ABC, abstractmethod\nfrom typing import Any, TYPE_CHECKING\nimport pandas as pd\nimport pyarrow as pa\nimpor"
},
{
"path": "py-src/data_formulator/data_loader/kusto_data_loader.py",
"chars": 10392,
"preview": "import json\nimport logging\nfrom typing import Any\nimport pandas as pd\nimport pyarrow as pa\n\nfrom data_formulator.data_lo"
},
{
"path": "py-src/data_formulator/data_loader/mongodb_data_loader.py",
"chars": 10889,
"preview": "import json\nimport logging\nfrom datetime import datetime\n\nimport pandas as pd\nimport pyarrow as pa\nimport pymongo\nfrom b"
},
{
"path": "py-src/data_formulator/data_loader/mssql_data_loader.py",
"chars": 15429,
"preview": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfro"
},
{
"path": "py-src/data_formulator/data_loader/mysql_data_loader.py",
"chars": 10930,
"preview": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfro"
},
{
"path": "py-src/data_formulator/data_loader/postgresql_data_loader.py",
"chars": 11335,
"preview": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfro"
},
{
"path": "py-src/data_formulator/data_loader/s3_data_loader.py",
"chars": 8369,
"preview": "import json\nimport logging\nfrom typing import Any\n\nimport boto3\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow."
},
{
"path": "py-src/data_formulator/datalake/__init__.py",
"chars": 2895,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nData Lake module for Data Formulator.\n\nThi"
},
{
"path": "py-src/data_formulator/datalake/azure_blob_workspace.py",
"chars": 29949,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAzure Blob Storage–backed workspace for th"
},
{
"path": "py-src/data_formulator/datalake/cache_manager.py",
"chars": 12714,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nGlobal cache manager for multi-user deploy"
},
{
"path": "py-src/data_formulator/datalake/cached_azure_blob_workspace.py",
"chars": 31139,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nCached Azure Blob workspace with persisten"
},
{
"path": "py-src/data_formulator/datalake/file_manager.py",
"chars": 8245,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nFile manager for user-uploaded files in th"
},
{
"path": "py-src/data_formulator/datalake/metadata.py",
"chars": 15241,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nMetadata management for the Data Lake work"
},
{
"path": "py-src/data_formulator/datalake/parquet_utils.py",
"chars": 6249,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nParquet utility functions for the Data Lak"
},
{
"path": "py-src/data_formulator/datalake/workspace.py",
"chars": 33858,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nWorkspace management for the Data Lake.\n\nE"
},
{
"path": "py-src/data_formulator/demo_stream_routes.py",
"chars": 55927,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nDemo data REST APIs for streaming/refresh "
},
{
"path": "py-src/data_formulator/example_datasets_config.py",
"chars": 58821,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSample datasets configuration for Data For"
},
{
"path": "py-src/data_formulator/sandbox/__init__.py",
"chars": 576,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom .local_sandbox import LocalSandbox\nfrom ."
},
{
"path": "py-src/data_formulator/sandbox/base.py",
"chars": 1668,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAbstract base class for code-execution san"
},
{
"path": "py-src/data_formulator/sandbox/docker_sandbox.py",
"chars": 8017,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nDocker-based sandbox for executing Python "
},
{
"path": "py-src/data_formulator/sandbox/local_sandbox.py",
"chars": 10552,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Local sandbox -- executes Python code in a "
},
{
"path": "py-src/data_formulator/sandbox/not_a_sandbox.py",
"chars": 2262,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Unsandboxed main-process executor -- for be"
},
{
"path": "py-src/data_formulator/session_routes.py",
"chars": 5068,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSession save / load routes.\n\nDelegates all"
},
{
"path": "py-src/data_formulator/tables_routes.py",
"chars": 40321,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport logging\nimport sys\nimport os\nimport mim"
},
{
"path": "py-src/data_formulator/workflows/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "py-src/data_formulator/workflows/chart_semantics.py",
"chars": 25951,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\n=========================================="
},
{
"path": "py-src/data_formulator/workflows/create_vl_plots.py",
"chars": 75925,
"preview": "import pandas as pd\nimport numpy as np\nfrom typing import Any\nimport vl_convert as vlc\nimport base64\nimport logging\n\nfro"
},
{
"path": "py-src/data_formulator/workspace_factory.py",
"chars": 4506,
"preview": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nFlask-aware workspace factory.\n\nReads the "
},
{
"path": "pyproject.toml",
"chars": 1546,
"preview": "[build-system]\nrequires = [ \"setuptools >= 75.0\" ]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"data_formu"
},
{
"path": "requirements.txt",
"chars": 594,
"preview": "# Minimal top-level dependencies for deployment.\n# Generated from pyproject.toml [project.dependencies].\n# Use this inst"
},
{
"path": "src/app/App.tsx",
"chars": 63541,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useCallback, useEffect, "
},
{
"path": "src/app/chartCache.ts",
"chars": 3590,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Module-level chart render cache.\n * \n"
},
{
"path": "src/app/chartRecommendation.ts",
"chars": 3919,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Agent response resolution — maps AI a"
},
{
"path": "src/app/dfSlice.tsx",
"chars": 66381,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createAsyncThunk, createSlice, Payl"
},
{
"path": "src/app/identity.ts",
"chars": 3129,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Identity management for Data Formulat"
},
{
"path": "src/app/store.ts",
"chars": 886,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { configureStore } from '@reduxjs/too"
},
{
"path": "src/app/tableThunks.ts",
"chars": 17264,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Unified table loading thunk: loadTabl"
},
{
"path": "src/app/tokens.ts",
"chars": 9880,
"preview": "// ════════════════════════════════════════════════════════════════════════\n// Design tokens — single source of truth fo"
},
{
"path": "src/app/useDataRefresh.tsx",
"chars": 29686,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useEffect, useRef, useCallback } fr"
},
{
"path": "src/app/useFormulateData.ts",
"chars": 20039,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useSelector, useDispatch } from 're"
},
{
"path": "src/app/utils.tsx",
"chars": 19815,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport _, { } from \"lodash\";\nimport { useEf"
},
{
"path": "src/assets/icon-design.md",
"chars": 4283,
"preview": "# Chart Icon Design Guide\n\nDesign conventions for chart template icons in `src/assets/`.\n\n## Color Palette\n\n| Token | He"
},
{
"path": "src/components/ChartTemplates.tsx",
"chars": 6432,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart Templates with UI icons.\n *\n * "
},
{
"path": "src/components/ComponentType.tsx",
"chars": 8671,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../data/types';\nimport"
},
{
"path": "src/components/FunComponents.tsx",
"chars": 938,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport { Typograp"
},
{
"path": "src/components/RotatingTextBlock.tsx",
"chars": 1438,
"preview": "import React, { useEffect, useState } from 'react';\nimport { Box, SxProps } from '@mui/material';\n\ninterface RotatingTex"
},
{
"path": "src/components/chartUtils.ts",
"chars": 315,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart recommendation utilities.\n *\n *"
},
{
"path": "src/data/column.ts",
"chars": 755,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './types';\nimport { com"
},
{
"path": "src/data/table.ts",
"chars": 1862,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport Column from './column';\nimport { Type"
},
{
"path": "src/data/types.ts",
"chars": 2752,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport enum Type {\n String = 'string',\n "
},
{
"path": "src/data/utils.ts",
"chars": 8825,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as d3 from 'd3';\nimport Column from"
},
{
"path": "src/icons.tsx",
"chars": 7209,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\n\nimport { SvgIcon"
},
{
"path": "src/index.css",
"chars": 1193,
"preview": "@import '@fontsource/roboto/300.css';\n@import '@fontsource/roboto/400.css';\n@import '@fontsource/roboto/500.css';\n@impor"
},
{
"path": "src/index.tsx",
"chars": 682,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport './index.c"
},
{
"path": "src/lib/agents-chart/README.md",
"chars": 10608,
"preview": "# agents-chart\n\nA semantic-level visualization library that compiles data + semantic annotations\ninto chart specificatio"
},
{
"path": "src/lib/agents-chart/chartjs/README.md",
"chars": 2779,
"preview": "# Chart.js Backend\n\nThe simplest backend. Compiles the core semantic layer into [Chart.js](https://www.chartjs.org/) con"
},
{
"path": "src/lib/agents-chart/chartjs/assemble.ts",
"chars": 7893,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js chart assembly — Two-Stage P"
},
{
"path": "src/lib/agents-chart/chartjs/index.ts",
"chars": 1116,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/chartjs\n *\n * Ch"
},
{
"path": "src/lib/agents-chart/chartjs/instantiate-spec.ts",
"chars": 6300,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/chartjs/recommendation.ts",
"chars": 1102,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js recommendation & adaptation "
},
{
"path": "src/lib/agents-chart/chartjs/templates/area.ts",
"chars": 5508,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Area Chart template (single "
},
{
"path": "src/lib/agents-chart/chartjs/templates/bar.ts",
"chars": 11360,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Bar Chart templates: Bar, St"
},
{
"path": "src/lib/agents-chart/chartjs/templates/histogram.ts",
"chars": 4577,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Histogram template.\n *\n * Ch"
},
{
"path": "src/lib/agents-chart/chartjs/templates/index.ts",
"chars": 1727,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js template registry.\n *\n * Mir"
},
{
"path": "src/lib/agents-chart/chartjs/templates/line.ts",
"chars": 5239,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Line Chart template (single "
},
{
"path": "src/lib/agents-chart/chartjs/templates/pie.ts",
"chars": 3665,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Pie Chart template.\n *\n * Co"
},
{
"path": "src/lib/agents-chart/chartjs/templates/radar.ts",
"chars": 5344,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Radar Chart template.\n *\n * "
},
{
"path": "src/lib/agents-chart/chartjs/templates/rose.ts",
"chars": 5300,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Rose Chart (Nightingale / Co"
},
{
"path": "src/lib/agents-chart/chartjs/templates/scatter.ts",
"chars": 4699,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Scatter Plot template.\n *\n *"
},
{
"path": "src/lib/agents-chart/chartjs/templates/utils.ts",
"chars": 4457,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for Chart.js "
},
{
"path": "src/lib/agents-chart/core/compute-layout.ts",
"chars": 43485,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/decisions.ts",
"chars": 36020,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/field-semantics.ts",
"chars": 43020,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/filter-overflow.ts",
"chars": 11753,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/index.ts",
"chars": 2978,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/core\n *\n * Targe"
},
{
"path": "src/lib/agents-chart/core/recommendation.ts",
"chars": 46816,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/resolve-semantics.ts",
"chars": 18072,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/semantic-types.ts",
"chars": 37896,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { getRegistryEntry, getRegisteredType"
},
{
"path": "src/lib/agents-chart/core/type-registry.ts",
"chars": 17468,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/core/types.ts",
"chars": 24869,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ZeroDecision, ColorSchemeRecom"
},
{
"path": "src/lib/agents-chart/docs/README.md",
"chars": 59189,
"preview": "# Agents-Chart: A Visualization Library for Agent Developers\n\n> You're building an AI agent that creates charts. Every a"
},
{
"path": "src/lib/agents-chart/docs/design-semantics.md",
"chars": 111506,
"preview": "# Design: Semantic-Type-Driven Compilation Context\n\n> **Status:** Draft — for discussion and revision \n> **Date:** 2026"
},
{
"path": "src/lib/agents-chart/docs/design-stretch-model.md",
"chars": 35936,
"preview": "# Design: Axis Layout Compression\n\n> **Physics-based models for automatically sizing chart axes when data\n> overflows th"
},
{
"path": "src/lib/agents-chart/docs/test_plan.md",
"chars": 14634,
"preview": "# Chart Engine Test Plan\n\n## Overview\n\nTest data lives in `test-data/` as fixture generators (not executable test suites"
},
{
"path": "src/lib/agents-chart/echarts/README.md",
"chars": 3312,
"preview": "# ECharts Backend\n\nCompiles the core semantic layer into [Apache ECharts](https://echarts.apache.org/) option objects. U"
},
{
"path": "src/lib/agents-chart/echarts/assemble.ts",
"chars": 30723,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts chart assembly — Two-Stage Pi"
},
{
"path": "src/lib/agents-chart/echarts/facet.ts",
"chars": 10397,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Facet Support — Multi-grid la"
},
{
"path": "src/lib/agents-chart/echarts/index.ts",
"chars": 1015,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/echarts\n *\n * EC"
},
{
"path": "src/lib/agents-chart/echarts/instantiate-spec.ts",
"chars": 31702,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ====================================="
},
{
"path": "src/lib/agents-chart/echarts/recommendation.ts",
"chars": 3349,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts recommendation & adaptation w"
},
{
"path": "src/lib/agents-chart/echarts/templates/area.ts",
"chars": 6225,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Area Chart template (single +"
},
{
"path": "src/lib/agents-chart/echarts/templates/bar.ts",
"chars": 16490,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Bar Chart templates: Bar, Sta"
},
{
"path": "src/lib/agents-chart/echarts/templates/boxplot.ts",
"chars": 5471,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Boxplot template.\n *\n * Contr"
},
{
"path": "src/lib/agents-chart/echarts/templates/candlestick.ts",
"chars": 6923,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Candlestick Chart template.\n "
},
{
"path": "src/lib/agents-chart/echarts/templates/density.ts",
"chars": 3439,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Density Plot — area from binn"
},
{
"path": "src/lib/agents-chart/echarts/templates/funnel.ts",
"chars": 6545,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Funnel Chart template.\n *\n * "
},
{
"path": "src/lib/agents-chart/echarts/templates/gauge.ts",
"chars": 8374,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Gauge Chart template.\n *\n * U"
},
{
"path": "src/lib/agents-chart/echarts/templates/heatmap.ts",
"chars": 8295,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Heatmap template.\n *\n * Contr"
},
{
"path": "src/lib/agents-chart/echarts/templates/histogram.ts",
"chars": 5859,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Histogram template.\n *\n * Con"
},
{
"path": "src/lib/agents-chart/echarts/templates/index.ts",
"chars": 2927,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts template registry.\n *\n * Mirr"
},
{
"path": "src/lib/agents-chart/echarts/templates/jitter.ts",
"chars": 3976,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Strip Plot — scatter with jit"
},
{
"path": "src/lib/agents-chart/echarts/templates/line.ts",
"chars": 13283,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Line Chart template (supports"
},
{
"path": "src/lib/agents-chart/echarts/templates/lollipop.ts",
"chars": 3473,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Lollipop Chart — rule from 0 "
},
{
"path": "src/lib/agents-chart/echarts/templates/pie.ts",
"chars": 6398,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Pie Chart template.\n *\n * Con"
},
{
"path": "src/lib/agents-chart/echarts/templates/pyramid.ts",
"chars": 2160,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Pyramid Chart — horizontal ba"
},
{
"path": "src/lib/agents-chart/echarts/templates/radar.ts",
"chars": 6838,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Radar Chart template.\n *\n * C"
},
{
"path": "src/lib/agents-chart/echarts/templates/ranged-dot.ts",
"chars": 3455,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Ranged Dot Plot — line segmen"
},
{
"path": "src/lib/agents-chart/echarts/templates/rose.ts",
"chars": 6747,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Rose Chart (Nightingale / Cox"
},
{
"path": "src/lib/agents-chart/echarts/templates/sankey.ts",
"chars": 6170,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Sankey Diagram template.\n *\n "
},
{
"path": "src/lib/agents-chart/echarts/templates/scatter.ts",
"chars": 40693,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Scatter Plot template.\n *\n * "
},
{
"path": "src/lib/agents-chart/echarts/templates/streamgraph.ts",
"chars": 6542,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Streamgraph template — uses n"
},
{
"path": "src/lib/agents-chart/echarts/templates/sunburst.ts",
"chars": 7331,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Sunburst Chart template.\n *\n "
},
{
"path": "src/lib/agents-chart/echarts/templates/treemap.ts",
"chars": 8107,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Treemap template.\n *\n * Uniqu"
},
{
"path": "src/lib/agents-chart/echarts/templates/utils.ts",
"chars": 5792,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for ECharts t"
},
{
"path": "src/lib/agents-chart/echarts/templates/waterfall.ts",
"chars": 2954,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Waterfall Chart — cumulative "
},
{
"path": "src/lib/agents-chart/gofish/README.md",
"chars": 6099,
"preview": "# GoFish Backend\n\nCompiles the core semantic layer into [GoFish Graphics](https://www.npmjs.com/package/gofish-graphics)"
},
{
"path": "src/lib/agents-chart/gofish/assemble.ts",
"chars": 19789,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish chart assembly — Two-Stage Pip"
},
{
"path": "src/lib/agents-chart/gofish/index.ts",
"chars": 1327,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/gofish\n *\n * GoF"
},
{
"path": "src/lib/agents-chart/gofish/recommendation.ts",
"chars": 1095,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish recommendation & adaptation wr"
},
{
"path": "src/lib/agents-chart/gofish/templates/area.ts",
"chars": 4227,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Area Chart template.\n *\n * Off"
},
{
"path": "src/lib/agents-chart/gofish/templates/bar.ts",
"chars": 7838,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Bar Chart templates: Bar, Stac"
},
{
"path": "src/lib/agents-chart/gofish/templates/index.ts",
"chars": 1494,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish template registry.\n *\n * Mirro"
},
{
"path": "src/lib/agents-chart/gofish/templates/line.ts",
"chars": 3917,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Line Chart template.\n *\n * Off"
},
{
"path": "src/lib/agents-chart/gofish/templates/pie.ts",
"chars": 2884,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Pie Chart template.\n *\n * GoFi"
},
{
"path": "src/lib/agents-chart/gofish/templates/scatter.ts",
"chars": 1939,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Scatter Plot template.\n *\n * G"
},
{
"path": "src/lib/agents-chart/gofish/templates/scatterpie.ts",
"chars": 4001,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Scatter Pie template.\n *\n * Sc"
},
{
"path": "src/lib/agents-chart/gofish/templates/utils.ts",
"chars": 3166,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for GoFish te"
},
{
"path": "src/lib/agents-chart/index.ts",
"chars": 2149,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart\n *\n * Semantic-l"
},
{
"path": "src/lib/agents-chart/test-data/area-tests.ts",
"chars": 16585,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\n"
},
{
"path": "src/lib/agents-chart/test-data/bar-tests.ts",
"chars": 18299,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\n"
},
{
"path": "src/lib/agents-chart/test-data/chartjs-tests.ts",
"chars": 22896,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js backend comparison tests.\n *"
},
{
"path": "src/lib/agents-chart/test-data/date-tests.ts",
"chars": 15508,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\n"
},
{
"path": "src/lib/agents-chart/test-data/debug-tests.ts",
"chars": 561631,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Debug Test Cases\n *\n * Regression tes"
},
{
"path": "src/lib/agents-chart/test-data/discrete-axis-tests.ts",
"chars": 25472,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Discrete-axis sizing tests.\n *\n * For"
},
{
"path": "src/lib/agents-chart/test-data/distribution-tests.ts",
"chars": 16817,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\n"
},
{
"path": "src/lib/agents-chart/test-data/echarts-tests.ts",
"chars": 92726,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts backend comparison tests.\n *\n"
},
{
"path": "src/lib/agents-chart/test-data/facet-tests.ts",
"chars": 25710,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\n"
},
{
"path": "src/lib/agents-chart/test-data/gas-pressure-tests.ts",
"chars": 12632,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gas pressure model test cases (docs/d"
},
{
"path": "src/lib/agents-chart/test-data/generators.ts",
"chars": 6843,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Synthetic data generators for chart g"
},
{
"path": "src/lib/agents-chart/test-data/gofish-tests.ts",
"chars": 18123,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish backend comparison tests.\n *\n "
},
{
"path": "src/lib/agents-chart/test-data/index.ts",
"chars": 14884,
"preview": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Barrel export for chart test-data gen"
}
]
// ... and 73 more files (download for full content)
About this extraction
This page contains the full source code of the microsoft/data-formulator GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 273 files (11.9 MB), approximately 3.1M tokens, and a symbol index with 1361 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.