Skip to content

Commit

Permalink
The big Cython move (#99)
Browse files Browse the repository at this point in the history
* Use Hunter

* Use position independent code to link shared object correctly

* Fix issues in module naming

* Temporary fix

* Use src directory and fix CMake build for subdirectory

* Fix build, remove dependency on Hunter

* aj first stab at cython

* Added class to manage H3Index array memory.
Added a bunch of wrapping functions.

* hacky version of polyfill working

* remove some naming redundancy

* Adding compact and uncompact functions

* notes

* clean up HexMem class

* reworked geofence and geopolygon. now memorysafe (i think)

* reorder definitions

* formatting

* Use scikit-build for setup

* Changes for getting build partially working on macOS

* Add scikit-build to requirements-dev.txt

* Build the core library as static and update notes.md

* update cython notes

* Cleaning up the Cython instructions and tests a bit

* cleaning out extra files for now

* readme

* Cleaning out more files to focus on Cython dev in this branch

* makefile

* simplify install process with makefile

* adding back in a bunch of files

* Add appveyor.yml for Cython

* Disable Python 2.7 test

* reorganize cython build; working on os x

* get new changes running on my OSX machine

* add hexmem.pyx

* just throwing it all in h3core...

* newlines

* separate HexMem into separate module

* change import to `h3py.h3core` for tests

* update readme for new folder structure

* starting to layout separate APIs

* `set_int` and `set_str` working

* notes

* cleaning up a bit

* moving the HexMem helper functions

* moving lat/lng functions to separate module

* move output formatting functions

* use `size_t` in HexMem

* trying input/output formatters

* rename to make api modules obvious

* adding some functions providing hexagon stats

* adding some TODOs to use C functions instead of python

* fix api typos

* adds unidirectional edge functions

* cleaning up geo functions a bit

* add todo

* create `api` directory and move modules

* try using `_api_template.py` to generate different APIs

* remove HexMem class and use memoryviews of cython.view.array objects instead

* make single mercator function

* remove redundant exception handling

* automatic input validation

* add validation for unidirectional edges

* simplify API generation

* a little cleaning

* defaults for parent and child functions

* add back in H3str as input type to hex2int

* simplify validation and conversion code

* adding tests for geo functions

* rename hexmem -> util

* move exceptions to util.pyx

* move geo functions to a separate module

* move hex2int and int2hex to each api

* rename validation functions

* rename h3api -> libh3 to reserve "api" for the different python APIs we expose

* cleaning up memory allocation

* fix clean up code

* clean up comments

* add some resolution checking

* adding a diagram of the code to remove zeros

* adding some docstrings

* update H3 C library

* add line function

* docstring

* some function name changes

* rename k_ring -> disk

* rename hex_ring -> ring

* cleaning up modules

* ... cleaning up all the modules

* add in backward-compatible `old` API

* add some thoughts on slower fallback for `ring`

* some naming changes

* fix up mean_hex_area and mean_edge_length

* rename base_cell -> get_base_cell

* remove special case for n=0 memory allocation

* rename edge_hexes -> edge_cells

* rename edges_from_hex -> edges_from_cell

* rename functions to match current python implementation

* remove h3py.api.old in favor of defaulting to set_str

* update resolution docstring

* use macro in CMake (I have no idea what I'm doing tho...)

* try this one weird trick for Python 2 compatibility!

* add note on .rstrip('L') for handling python 2

* Use `__version__.py` (#57)

* use __version__.py to define python version

* add Python/C version check test

* newline

* some questions on the CMake file

* actually, use _version.py for less confusing naming

* note

* Change directory structure, make tests work (#61)

* travis with multiple python versions (#62)

* Add appveyor.yml for Cython

* Disable Python 2.7 test

* Use `__version__.py` (#57)

* use __version__.py to define python version

* add Python/C version check test

* newline

* some questions on the CMake file

* actually, use _version.py for less confusing naming

* note

* Change directory structure, make tests work (#61)

* linting

* linting

* fix purge command

* clean up requirements a bit

* messing with travis

* more travis

* try travis again

* clean up requirements a bit more

* test more python versions, including 2.7

* cmake version thing

* py3.5 doesn't seem to work with cmake

* run all tests in test directory

* remove fabfile

* make sure fails on lint

* get lint to pass

* fix purge command

* bare bones requirements-dev.txt

* use `pytest tests/*` in CI configs

* no need for a `MANIFEST.in` anymore

* fix windows wildcard?

* whatever you want, Windows.

* Basic code coverage (#63)

* basic code coverage

* rename error types and drop prefix on h3ilb.H3int

* Rework some internal names (#65)

* rename `h3utils` to `util`

* typo in cmakelists

* rename `h3_core` to `memview_int` to match format of other interfaces

* linting passes on tests

* make sure travis lints the tests

* getting better coverage on the interfaces

* newline

* add `array_int` (numpy) tests

* install numpy

* make sure appveyor is running all the tests

* dev readme changes

* setup.py changes

* more setup.py changes

* Polyfill working on polygons with holes (#71)

* jupyter lab makefile target for testing

* got polyfill with holes working

* linting

* docstring for h3_to_geo

* improve coverage

* ignoring more flake rules, whilst listening to one

* make polyfill resolution a required positional argument

* use boolean lnglat_order instead of string

* move polyfill tests to own file

* test polyfill polygon input permutations (clockwise vs counterclockwise elements and closed or open loops)

* update description of polyfill inputs

* comment on test

* lint things up

* add some test comments

* don't need to check for null before free

* Add `h3_set_to_multi_polygon` (#74)

* got to_multipolygon workin

* clean up code and add a simple test

* don't need this import

* moved the to_multipoly stuff to own file

* got the geo_json bit working

* add some tests

* linting

* file rename

* update renaming thoughts

* clean up usage of H3int

* no globs!

* don't need this "mercator" business

* rename `check_addr` to `check_cell`

* `destroyLinkedPolygon` note

* rename geo2coord to deg2coord and coord2geo to coord2deg

* Get original test suite working (#79)

* got to_multipolygon workin

* clean up code and add a simple test

* don't need this import

* moved the to_multipoly stuff to own file

* got the geo_json bit working

* add some tests

* linting

* file rename

* update renaming thoughts

* clean up usage of H3int

* getting some more of the original tests to work

* get a bunch of tests working!

* got some more tests working

* got all but one test passing; modified some tests that no longer need to fail

* update test, based on what I think the right result is

* update test for uni edge

* all linty fresh now

* split `out_collection` into `out_ordered` and `out_unordered`

* upgrade to h3core 3.6.1

* bump version

* add notes on empty array inputs

* 100% code coverage (#82)

* add int/str conversion test

* 100% codecov!

* linting

* remove notes

* to `not` or not to `not`

* gotta have a badge!

* Get tox working (#83)

* use relative imports

* clean up some messages

* simplify dynamic api modules a bit

* making some adjustments for tox

* update appveyor script

* remove linux wheel-building code, as i think it is out of date

* fix edge_is_valid test

* linting

* add some badges

* mess with travisci a little bit

* more messing with travis

* flake8 issue

* continue trying to fix flake issue

* we'll get it eventually

* messing with cmake

* revert the travis.yml file; add flake8 to tox

* and revert cmake pin

* messing with appveyor

* revert appveyor change. not sure how to wildcard in appveyor

* separate flake8 in tox envs

* move `cell` and `edge` functions to separate files

* have api import almost everything from core.py

* get outta here, flake8!

* clean up `_api_template.py`

* clean up int -> hex conversion function

* notes on `move_nonzeros()`

* more notes

* refactor so that all cython code is used via `h3.core`

* move noqa

* Convert original test suite to use pytest syntax (#84)

* convert original test suite to use pytest syntax

* making some key hexes obvious

* have travis print the full stack trace on error

* make a few more hex keys obvious

* rework test_compact_malformed_input a bit

* lint!

* formatting

* adding back in a few comments

* move uses of `map` to list comprehensions

* Slightly improve invalid index error reporting (#86)

* slight improvement to invalid index error reporting

* linting

* install notes

* parallel tox doesn't seem that much faster

* use relative imports

* hide h3.core from user api namespace

* noqa on __init__.py

* hides internal modules, but seems to break tox

* remove the testing notebook

* revert files back

* rename `core` to `internal_api`

* add the H3 error types to the public API (for testing)

* add a few function docstrings

* rework errors in tests

* address some comments

* have `create_ptr` do an `except? NULL`, which should be faster than `*`

* version docstring

* Get _cy folder layout working (#87)

* try to get _cy folder layout working

* Fix CMake build

* specify the LIBRARY DESTINATION to be the _cy folder

* move `_internal_api` to `_cy/__init__.py`

* remove version checks in CMakeLists.txt (#88)

* Better API names (#89)

* rename APIs

* rename test files

* remove obsolete comments

* update test files in appveyor

* Use `basic_` prefix instead of `py_`

* makefile

* appveyor!

* API docs

* linting

* tweak docstrings

* missed one!

* Immutability questions for the future

* linting

* module docstrings have to go first

* clarifying API collection input expectations

* input collection tests

* Add more docstrings to the APIs (#91)

* new docstrings

* use pandas docstring guide formatting for the first few functions

* Adding a few more docstrings

* addressing comments

* taking care of comments

* use `H3Cell` instead of `H3Index` to be more precise

* Update h3_get_base_cell

* `h3_is_res_class_III` docstring

* spacing

* move todos to comments

* notes on collections

* module docstring

* polyfill and to_multi_polygon docs

* clean up some docstrings

* address comments

* Segfaults (#92)

* making some segfault notes on `polyfill`

* Allow Cython to handle the error

* notes on tests

* rename test to `test_test_invalid_polygon` and group into single test

* typo

* Add `get_pentagons` function (#95)

* add `get_pentagons`

* linting

* rename to `get_pentagon_indexes`

* Prep cython branch readme before merging cython into master (#98)

* needs more badges!

* prep the readme before merge to master

* add logo

* remove docs folder

* use hex notation in the integer interface test

* conforming to the tyranny of `E222 multiple spaces after operator`

* adding long description to setup.py

* lint

* python 2.7 compatibility

* cell/edge boundary: clean up geo_json branch

* describe why we use `hex` in the error messages instead of `int2hex`

* geofence free notes

* update changelog

* typo

* alg -> algorithm

* remove irrelevant todo

* add distance >= 0 error checking

* add a missing file to appveyor tests

* trying out appveyor

* why won't you listen to reason, appveyor!?

Co-authored-by: Isaac Hier <[email protected]>
Co-authored-by: Isaac Hier <[email protected]>
Co-authored-by: Isaac Brodsky <[email protected]>
Co-authored-by: Isaac Brodsky <[email protected]>
Co-authored-by: Kurt Smith <[email protected]>
Co-authored-by: ankitmehta21 <[email protected]>
  • Loading branch information
7 people authored May 10, 2020
1 parent ff13deb commit 78c0934
Show file tree
Hide file tree
Showing 54 changed files with 4,253 additions and 2,093 deletions.
14 changes: 14 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# https://lintlyci.github.io/Flake8Rules/
[flake8]
max-line-length = 88
include =
#W292 No newline at end of file
W292,
ignore =
# E251 unexpected spaces around keyword / parameter equals
E251,
# sometimes I just want to line up decimal points...
# E201 whitespace after '['
E201,
# E241 multiple spaces after ','
E241,
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,8 @@ bower_components/
.idea/
.unison.*

docs/.ipynb_checkpoints/
.ipynb_checkpoints/
_skbuild/

# might want to remove this later when distributing
MANIFEST
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "src/h3lib"]
path = src/h3lib
url = https://github.com/uber/h3
50 changes: 0 additions & 50 deletions .install.sh

This file was deleted.

14 changes: 0 additions & 14 deletions .test_parity.sh

This file was deleted.

4 changes: 0 additions & 4 deletions .test_parity_cleanup.sh

This file was deleted.

12 changes: 8 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ cache: pip
os:
- linux
python:
- "2.7"
- "3.6"
- 2.7
- 3.6
- 3.7
install:
- pip install -r requirements-dev.txt
- fab bootstrap
- CFLAGS='-fPIC' python setup.py install
script:
- fab test
- flake8 src/h3 setup.py tests
- pytest tests/* --cov=h3 --full-trace
after_success:
- codecov
15 changes: 10 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,31 @@ numbers of H3-Py are the major and minor version of the bound core library,
respectively. The patch version is incremented independently of the core
library.

We use [this changelog structure](http://keepachangelog.com/).

Because H3-Py is versioned in lockstep with the H3 core library, please
avoid adding features or APIs which do not map onto the
[H3 core API](https://uber.github.io/h3/#/documentation/api-reference/).

# Change Log

All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/) and uses [this changelog structure](http://keepachangelog.com/).
## [3.6.1] - **Unreleased**

- Switch to Cython wrapper implementation


## [3.4.3] - 2019-04-18

- Removed null values in k_ring_distances.
- Support on Windows Platform
- Fixed some install problems


## [3.4.2] - 2019-03-13

- Added h3_line support.


## [3.1.0] - 2018-09-06
--------------------

### Added
- Added h3_distance function.
Expand All @@ -33,7 +39,6 @@ This project adheres to [Semantic Versioning](http://semver.org/) and uses [this
- Updated the core library to v3.1.0.

## [3.0.0] - 2018-07-24
--------------------

### Added
- First public release.
Expand Down
11 changes: 11 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.7.2)

project(h3)

# Build the core library as static
set(BUILD_SHARED_LIBS OFF)
add_subdirectory(src/h3lib)

# Build the rest (other than the core library dependency) as shared
set(BUILD_SHARED_LIBS ON)
add_subdirectory(src/h3)
2 changes: 0 additions & 2 deletions MANIFEST.in

This file was deleted.

78 changes: 0 additions & 78 deletions README.rst

This file was deleted.

34 changes: 20 additions & 14 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
build: off
environment:
CMAKE_GENERATOR_TOOLSET: "v140"
matrix:
- PYTHON: "C:\\Python27"
PYTHON_VERSION: "2.7.x"
PYTHON_ARCH: "32"
# Python 2.7 is disabled due to not working
#- PYTHON: "C:\\Python27"
- PYTHON: "C:\\Python36"
PYTHON_VERSION: "3.6.x"
PYTHON_ARCH: "32"
- PYTHON: "C:\\Python27-x64"
PYTHON_VERSION: "2.7.x"
PYTHON_ARCH: "64"
CMAKE_GENERATOR: "Visual Studio 14"
CMAKE_GENERATOR_PLATFORM: "Win32"
#- PYTHON: "C:\\Python27-x64"
- PYTHON: "C:\\Python36-x64"
PYTHON_VERSION: "3.6.x"
PYTHON_ARCH: "64"
CMAKE_GENERATOR: "Visual Studio 14 Win64"
CMAKE_GENERATOR_PLATFORM: "x64"

configuration: Release
platform:
Expand All @@ -21,10 +19,18 @@ platform:
install:
- set PATH=%PYTHON%;%PYTHON%\Scripts;%PATH%
- echo %PATH%
- python --version
- git submodule update --init
- pip install -r requirements-dev.txt
- fab bootstrap
- python setup.py install

test_script:
- python --version
- fab --version
- fab test
- pytest tests/test_basic_int.py
- pytest tests/test_basic_str.py
- pytest tests/test_cells_and_edges.py
- pytest tests/test_collection_inputs.py
- pytest tests/test_h3.py
- pytest tests/test_memview_int.py
- pytest tests/test_numpy_int.py
- pytest tests/test_polyfill.py
- pytest tests/test_to_multipoly.py
1 change: 0 additions & 1 deletion binding_version.py

This file was deleted.

29 changes: 29 additions & 0 deletions dev_notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Development notes for `h3-py`

## Install for development

- `git clone [email protected]:uber/h3-py.git`
- `cd h3-py`
- `make init`
- `make test`
- `make lint`


## Install from GitHub

- `pip install scikit-build`
- `pip install git+https://github.com/uber/h3-py.git`


## Docstrings

- Follow something like the [`numpydoc` docstring guide](https://numpydoc.readthedocs.io/en/latest/format.html)
or the [`pandas` docstring guide](https://python-sprints.github.io/pandas/guide/pandas_docstring.html)


# Workflow

- [GitHub Standard Fork & Pull Request Workflow](https://gist.github.com/Chaser324/ce0505fbed06b947d962)
- [pyenv for multiple versions (to help with tox)](https://weknowinc.com/blog/running-multiple-python-versions-mac-osx)
- [tox stuff](https://blog.frank-mich.com/recipe-testing-multiple-python-versions-with-pyenv-and-tox/)
- [more tox stuff](https://blog.ionelmc.ro/2015/04/14/tox-tricks-and-patterns/)
Loading

0 comments on commit 78c0934

Please sign in to comment.