Proto commits in diagonalworks/diagonal-b6

These 73 commits are when the Protocol Buffers files have changed:

Commit:98e5b82
Author:Noon van der Silk
Committer:GitHub

Resolve duplicate clicking in UI (#355) * Resolve duplicate clicking in UI We add a few features here: - A "target" function to the header; allowing an item to be located. - Fixing the "duplicate popup" issue when clicking on something open; it now just refocuses te element It's not perfect; but some comments have been added to indicate the areas for improvement. * Allow header-things to be closeable or not * Added copy and toggle-visibility back * Allow a little bit more toggle-visibility

The documentation is generated from this commit.

Commit:b9cda44
Author:Noon van der Silk
Committer:GitHub

Some simple useful features (#351) * Add is_valid and get_centroid * Test for is_valid filter * Test for get_centroid

Commit:8d8c767
Author:Andrew Eland
Committer:GitHub

Added a /compare endpoint. (#228) Added a /compare endpoint, which reruns an analysis in a number of worlds, and returns a comparison of the results. In passing, correct and add tests for: - nested lambda expressions - changing searchable tags on overlaid features - filling collections from protos

Commit:710a7d3
Author:Andrew Eland
Committer:GitHub

Support conditional map layers, and clamp bucket values. (#218) Also adjust render ordering, so geojson layers appear on top of building histogram colours.

Commit:f910972
Author:Andrew Eland
Committer:GitHub

Added a skeleton API definition for scenario comparison. (#211) Also added add-world-with-change to b6.

Commit:3c006c4
Author:Andrew Eland
Committer:GitHub

Add functions to list and delete worlds from Python. (#208)

Commit:c523a64
Author:Andrew Eland
Committer:GitHub

Cleanup naming of root vs context. (#194)

Commit:47e2c8a
Author:Andrew Eland
Committer:GitHub

Added an 'action' line to the design system. (#191) Added an 'action' line system, which allows an expression to be evaluated, optionally in the context of the stack it's being rendered within. This is still an exploratory concept.

Commit:9984cd2
Author:Andrew Eland
Committer:GitHub

Render histograms by creating a collection in the world. (#181) Render histograms by creating a collection in the world, and passing the ID of that collection through to the tile renderer, instead of including the IDs of bucketed features in the JSON response. This makes the size of the response tractable. These features are currently leaked, but that'll be addressed in the future (by deleting features when the relevant stack is closed in the UI). Introduces a new method on CollectionFeature to find the first value for a given key, which can make use of binary search if the collection is sorted (otherwise tile rendering becomes very slow with large collections). In passing, make the tests for histogram rendering non-flakey by explictly ordering keys as they're encountered.

Commit:be085fc
Author:Andrew Eland
Committer:Andrew Eland

Render histograms by creating a collection in the world. Render histograms by creating a collection in the world, and passing the ID of that collection through to the tile renderer, instead of including the IDs of bucketed features in the JSON response. This makes the size of the response tractable. These features are currently leaked, but that'll be addressed in the future (by deleting features when the relevant stack is closed in the UI). Introduces a new method on CollectionFeature to find the first value for a given key, which can make use of binary search if the collection is sorted (otherwise tile rendering becomes very slow with large collections). In passing, make the tests for histogram rendering non-flakey by explictly ordering keys as they're encountered.

Commit:cd162e0
Author:Andrew Eland
Committer:GitHub

Apply changes to the world made in the UI. (#179) Apply changes to the world made in the UI, telling the frontend to reload tiles if necessary. Factors out locking the world against concurrent modification into MutableWorlds (although our semantics around modifying the world when there are live iterators are still sketchy).

Commit:20b068f
Author:Andrew Eland
Committer:GitHub

Support separate worlds, keyed by the root feature ID. (#177) Support separate worlds, using the ID that's currently used for the feature that configures the UI to select which world. Support passing this ID through Python, and add it to the tile requests from javascript. TODO: this ID is currently called "context", "root", or "UI context", we should standardise on something.

Commit:9b16511
Author:Andrew Eland
Committer:GitHub

Add accessible-routes. (#163) Also rename accessible to accessible-all, and connect-all-to-network to connect-to-network-all, to form a convention that the -all suffix of a function is a more efficient implementation of the mapping the unprefixed version across a collection.

Commit:cfc0480
Author:Andrew Eland
Committer:GitHub

Support logging events in the UI (#162)

Commit:62140ae
Author:Andrew Eland
Committer:GitHub

Add support for share icons in headers. (#149)

Commit:8ab73da
Author:Andrew Eland
Committer:GitHub

Support naming expressions. (#146) Support namining expressions, so that parts of an expression can be named in an analysis with a value that can appear in the UX. Simplify queries from Python before running them, and support simplification of search query literals. In passing, correct a misplaced bucket colour.

Commit:9659a3c
Author:Andrew Eland
Committer:GitHub

Add a header line to stacks, with a close button. (#143)

Commit:562bc4b
Author:Andrew Eland
Committer:GitHub

Support condition GeoJSON and atoms. (#139)

Commit:f5b25ca
Author:Andrew Eland
Committer:GitHub

Support bucketed values on the map based on dropdown chips. (#138) Also added a Swatch line type.

Commit:84cf431
Author:Andrew Eland
Committer:GitHub

Make materialise() add collections and expressions in the world. (#133) Change the interface of materialse(), so that it now takes a function that returns a collection, calls that function, and then adds both that collection, and the function that created it to the world. Includes the Python API for CollectionFeature and ExpressionFeature, which necessitated merging feature.proto and api.proto, as they now depend on each other.

Commit:5859ceb
Author:Andrew Eland

Support rendering query layers in different map positions. Also support shift-clicking on features from query layers, and dragging stacks from result lines.

Commit:b10057e
Author:Andrew Eland

Render the coastline, and copy text on single click.

Commit:0390a5b
Author:Andrew Eland

Introduce the concept of locked stacks explictly. Introduce the concept of locked stacks explicitly. Actions on a locked stack result in further locked stacks, but some actions (like shift-click) allow you to break out.

Commit:8aa4c30
Author:Andrew Eland

Support colouring by bucket, and outliners and click positions.

Commit:7fb30ca
Author:Andrew Eland

Support multiple atoms on the left hand side of left/right line. Also use colour names, rather than numbers, for outliner classes.

Commit:d38f9c2
Author:Andrew Eland

Support adding relations, and passing a context relation to the UI.

Commit:1be2fc8
Author:Andrew Eland
Committer:Andrew Eland

Support rendering stacks at startup, which we're calling the 'dock'.

Commit:619f48f
Author:Andrew Eland

Set the map center from the evaluated result.

Commit:fd24529
Author:Andrew Eland

Use an atom for the range UI element of histogram bars.

Commit:adfbb5d
Author:Andrew Eland
Committer:Andrew Eland

Use protos based on the b6 design system to communicate with JS. Use protos based on the design system that has emerged from the current UI for communication with JS code, replacing the existing ad-hoc JSON struct definitions. Also replace to badly-aliased PNG icons with SVG versions.

Commit:bcab3c0
Author:Andrew Eland
Committer:Andrew Eland

Introduce a new UX for the web interface. Introduce a new UX for the web interface, rendering the steps of a pipeline as distinct blocks, and allowing multiple blocks to be shown at the same time.

Commit:3415706
Author:Andrew Eland
Committer:Andrew Eland

Add generated files to version control, with a pre-commit to update them. Add generated files to version control, so it's possible to include the diagonal.works/b6 go package as a dependency without generating the files. Add a pre-commit hook to ensure the generated files are rebuilt when their dependencies are changed.

Commit:f77cdc7
Author:Andrew Eland
Committer:Andrew Eland

Use semver versions for the compact index. Use semver versions for the compact index, to match the approach for the API, and to track changes that don't break backward compatability. Use a protobuf to encode the header data, to allow flexibility where memory isn't at a premium. Invalidates all previous indices by changing the header magic.

Commit:b073d03
Author:Andrew Eland
Committer:Andrew Eland

Show the version in the UI, and verify it in GRPC requests. Stamp the current version number into the b6 backend binary, and show it in the web UI. Also include it in the generated Python client code, and send it along with GRPC requests. Fail requests that come from a Python library with a different major version number. Also use the version number in the PIP project description, and the binary tarball in the docker build.

Commit:6408b6e
Author:Andrew Eland

Add a skeleton b6 binary, which currently runs a GRPC server.

Commit:ad48163
Author:Andrew Eland

Make proto definitons match Go code for queries.

Commit:dfba456
Author:Andrew Eland
Committer:Andrew Eland

Introduce b6.Query, and replace the use of pb.QueryProto and search.Query. Introduce a new query representation, b6.Query, that's at the semantic level of features, and use that across the codebase, rather than a mixture of pb.QueryProto and search.Query.

Commit:7e7d8d0
Author:Andrew Eland
Committer:Andrew Eland

Extract diagonal.works/b6, which we'll open source.

Commit:c9dee5d
Author:Andrew Eland
Committer:Andrew Eland

Use explicitly named arguments to lambdas. Use explicitly named arguments to lambdas. This enables the Python interface to use the full expressive power of b6, as the b6 shell could previously use partial evaluation to support nested parameters, something that isn't supported by the Python API.

Commit:df1a5f1
Author:Andrew Eland
Committer:Andrew Eland

Shell usability improvements. Implement history, and copying tokens when clicking on them, in the shell.

Commit:a4bf6ba
Author:Andrew Eland
Committer:Andrew Eland

Treat tags as first class entities in the shell.

Commit:e15b4f8
Author:Andrew Eland

Render feature titles and tags in the shell.

Commit:5399629
Author:Andrew Eland

Parse string based namespaces as tokens

Commit:5a7ebc7
Author:Andrew Eland
Committer:Andrew Eland

Make namespaces strings instead of integers. Make namespaces strings, instead of a set of hardcoded integers. While less efficient, it allows users to integrate arbitrary datasets under a namespace of their choice, without predefined restrictions. Namespaces are based on URLs related to the relevant data source. This change allows us to remove the "user space" implementation of namespaces in a5. Note that this change breaks index formats, and so we bump the version number.

Commit:4027994
Author:Andrew Eland
Committer:Andrew Eland

Add snap_area_edges, flattern and points. Add snap_area_edges, which returns a new area by snapped the edges of an area to paths matching a given query, intended to be useful for conflating boundary geometries to road networks. Also add the useful remnants of a failed approach snapping at the point level, specifically flattern, which flatterns collections, and points, which extracts points from geometries. Collections are now typed on the wire, allowing the type of empty collections to be determined. Consequentely, the definition of Type is begining to move into protocol buffers.

Commit:2b06ec3
Author:Andrew Eland
Committer:Andrew Eland

Reimplement A5, adding pattern matching and first class functions. Make functions a first class entity in A5, and add lambda functions and Haskell style pattern matching. This allows many real-world analyses to be performed entirely server side, when previously they needed an expensive per-feature round trip. This change breaks the current A5 interface, and therefore historic analyses until they're updated. Setting tags and exporting as GeoJSON now happens via A5 functions and evaluate(), rather than evaluate_as_tags and evaluate_as_geojson. Concurrent reading and writing is also currently broken (with tests skipped) until locking is reintroduced.

Commit:bb45f51
Author:Andrew Eland
Committer:Andrew Eland

Expose point connection via A5. Expose point connection via A5. Introduces a new return type, WorldModification, which describes changes to a MutableWorld instance, and handles ID allocation. When used as the return value from a expression, A5 uses it to modify the world.

Commit:427f018
Author:Andrew Eland

Add JoinPaths and Interpolate to A5.

Commit:ba53954
Author:Andrew Eland

Complete exposure of sightline in A5.

Commit:17bea12
Author:Andrew Eland

Add SamplePointsAlongPaths to A5

Commit:3af7348
Author:Andrew Eland
Committer:Andrew Eland

Make distance a paramter for reachable() In passing, make the use of tag keys in the Python test match the new index format (eg #highway, not highway), and make it possible to return nil values from A5, to match the behaviour outside A5 of looking up non-existant IDs.

Commit:4d265fd
Author:Andrew Eland

Add basic support for searching within polygons defined by WKT. In passing, correct the year used for importing ONS authority boundaries, and add a missing Makefile for ONS data.

Commit:a0eb518
Author:Andrew Eland
Committer:Andrew Eland

Add a progress bar widget in iPython. Add a progress bar widget in iPython, which uses a JSON endpoint to poll for updates. The involves changing the streaming GRPC interface - rather than incrementally streaming progress, it sends a single tracker ID before the result. Also add a new binary - scaffold - that makes it easy to play with HTML fragments, like the widget.

Commit:7fdbe94
Author:Andrew Eland

Use oneof in the respone protos for ...WithProgress.

Commit:5ff975d
Author:Andrew Eland

Adjust the implementation of timeouts in DFE. Long running streaming GRPC requests were cancelled due to the WriteTimeout in DFE. Handle timeouts ourselves to avoid this. Also add scripts to start atlas and dfe locally with common options.

Commit:de93451
Author:Andrew Eland

Allow a5.within() to search Features. Also add world.uk_ons_boundary_id().

Commit:f55ff77
Author:Andrew Eland
Committer:Andrew Eland

Add SetTagFromGraphWithProgress.

Commit:d56e262
Author:Andrew Eland

Add a streaming version of RunGraph which reports progess. In passing, also add a script to start a personal copy of Atlas on a 64 processor VM.

Commit:acbdb40
Author:Andrew Eland

Add countCollection to A5. Currently this only works for FeatureCollection, unfortunately, until we've sorted out the type system.

Commit:eab4048
Author:Andrew Eland

Return GeoJSON results to Python via A5. Also includes adding GeoJSON properties for tags.

Commit:03611df
Author:Andrew Eland
Committer:Andrew Eland

Compute the areas reachable from a given point. Also make it possible to override the colours of boundaries, making it easier to render the results.

Commit:7a8ff64
Author:Andrew Eland

Make it possible to find and colour paths from relations.

Commit:1878a29
Author:Andrew Eland

Implement searching for features within other features in A5. Also add ingestons, a pipeline for ingesting boundary data from the ONS. It exists outside of the standard ingest binary, since it depends on the native GDAL library, complicating cross-compilation.

Commit:ce3dd2f
Author:Andrew Eland

Rework the Python query API, and add a simple area restriction.

Commit:d3e46a3
Author:Andrew Eland
Committer:Andrew Eland

Introduce a simple type system into A5, validating graphs before running.

Commit:f794285
Author:Andrew Eland

Extend the A5 graph interface, rewrite the colour example with it

Commit:26eed89
Author:Andrew Eland

Explorations of an experimental computation API. Also added a missing test for deriving colours from a gradient.

Commit:7e49b47
Author:Andrew Eland

Implement the remaining World methods on MutableTagsOverlayWorld. Implement the remaining World methods on MutableTagsOverlayWorld. Also use this implementation of World by default in the gRPC API, and use it to implement a ModifyTags method, exposing it to Python.

Commit:a99c37e
Author:Andrew Eland

Add FindFeatures to the GRPC API.

Commit:d7cbbb7
Author:Andrew Eland

Add an experimental Python client for the WorldService.

Commit:0bb8f04
Author:Andrew Eland

Rename FeatureProto2 to FeatureProto With the beam ingest pipleine removed, the naming conflict is no longer present.

Commit:60c56e8
Author:Andrew Eland
Committer:Andrew Eland

Add the beginings of a GRPC based API. Currently, the API simply supports looking up a feature by ID via a service wrapper on top of world.World. Implementing the API involved upgrading the version of protocol buffers we depend on, and switching from a forked protocol buffer implementation we were accidentally depending on. This, in turn, triggers a warning about duplicate metrics.proto files being registered (from Beam and Prometheus, presumably), and actually changes the number of elements read from our test PBF files. The warning will be addressed in a future change.

Commit:9464598
Author:Andrew Eland

First end-to-end pass at vector tile rendering.