Skip to content

Commit

Permalink
ci: pypi token
Browse files Browse the repository at this point in the history
update deps

disable par test

fix deps to main

fmt

ci: also run rust workflows
  • Loading branch information
gauteh authored and TheSylex committed Sep 10, 2024
1 parent dd708e6 commit e156961
Show file tree
Hide file tree
Showing 9 changed files with 272 additions and 214 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ jobs:
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_PASSWORD }}
with:
command: upload
args: --non-interactive --skip-existing wheels-*/*
10 changes: 9 additions & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
name: Rust build and test
on: push
on:
push:
branches:
- main
- master
tags:
- '*'
pull_request:
workflow_dispatch:
jobs:
stable:
runs-on: ${{matrix.platform}}
Expand Down
37 changes: 25 additions & 12 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
use path_slash::PathExt;
use std::env;
use std::fs;
use std::io::prelude::*;
use std::path::Path;
use path_slash::PathExt;

pub static GSHHS_F: &str = "gshhs_f_-180.000000E-90.000000N180.000000E90.000000N.wkb.xz";
pub static GSHHS_F_CS: &str = "05bdf3089407b9829a7a5be7ee43f1e4205f2bbc641e4778af77e4814be216da";

pub static MASK: &str = "mask.tbmap.xz";
pub static MASK_CS: &str = "5ea0e772ffc6ca8ad10c5de02be50670cbaedcff20b3541df6b78d3e1fdf48a1";
pub static GSHHG_MASK: &str = "gshhg_mask.tbmap.xz";
pub static GSHHG_MASK_SHA256: &str =
"5ea0e772ffc6ca8ad10c5de02be50670cbaedcff20b3541df6b78d3e1fdf48a1";

pub static OSM: &str = "osm.wkb.xz";
pub static OSM_SHA256: &str = "7cbbbb56dc8f6a339d837e57aac4c50c9f54e7ac1118803274725cf61226b727";

pub static OSM_MASK: &str = "osm_mask.tbmap.xz";
pub static OSM_MASK_SHA256: &str =
"e60dd30737ad8480619d727bb246a1107d30a66563b73628337dc3f92255b684";

fn main() {
println!("hello");
Expand All @@ -30,15 +38,17 @@ use rust_embed::RustEmbed;
#[folder = \"{}\"]
pub struct GsshgData;
",
assets_dir.to_slash().unwrap()
)
.unwrap();
}
#[derive(RustEmbed)]
#[folder = \"{}\"]
pub struct OsmData;
",
assets_dir.to_slash().unwrap(),
assets_dir.to_slash().unwrap()
)
.unwrap();

let gshhs = Path::new(&out_dir).join("gshhs");
if !gshhs.exists() {
fs::create_dir(gshhs).unwrap();
if !assets_dir.exists() {
fs::create_dir(assets_dir).unwrap();
}

// copy or download files
Expand Down Expand Up @@ -83,6 +93,9 @@ fn copy_or_download(from: impl AsRef<Path>, csum: &str) {
if &expected != &actual.as_ref() {
// Delete erronous file
fs::remove_file(&full_to).unwrap();
panic!("Checksum mismatched for {:?}, downloaded file deleted..", &from);
panic!(
"Checksum mismatched for {:?}, downloaded file deleted..",
&from
);
}
}
9 changes: 6 additions & 3 deletions src/devel/make_bitmap.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::io::prelude::*;
use std::fs::File;
use roaring::*;
use std::fs::File;
use std::io::prelude::*;

fn main() -> std::io::Result<()> {
println!("opening mask.bin..");
Expand Down Expand Up @@ -33,7 +33,10 @@ fn main() -> std::io::Result<()> {
}
}

println!("serialized size: {} mb", tmap.serialized_size() / 1024 / 1024);
println!(
"serialized size: {} mb",
tmap.serialized_size() / 1024 / 1024
);

println!("serializing bitmap to file: mask.tbmap..");
{
Expand Down
211 changes: 104 additions & 107 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,12 @@ use pyo3::prelude::*;
use std::io;

pub mod mask;
pub mod providers;
pub mod shapes;

pub use mask::RoaringMask;
pub use shapes::Gshhg;
pub use providers::LandmaskProvider;
pub use shapes::Shapes;

include!(concat!(env!("OUT_DIR"), "/gshhs.rs"));

Expand All @@ -100,8 +102,16 @@ pub struct RoaringLandmask {
impl RoaringLandmask {
#[staticmethod]
pub fn new(py: Python) -> io::Result<RoaringLandmask> {
let mask = RoaringMask::new()?;
let shapes = Gshhg::new(py)?;
Self::new_with_provider(py, LandmaskProvider::Gshhg)
}

#[staticmethod]
pub fn new_with_provider(
py: Python,
landmask_provider: LandmaskProvider,
) -> io::Result<RoaringLandmask> {
let mask = RoaringMask::new(landmask_provider)?;
let shapes = Shapes::new(py, landmask_provider)?;

Ok(RoaringLandmask { mask, shapes })
}
Expand Down Expand Up @@ -213,23 +223,20 @@ mod tests {
fn test_dateline_wrap() {
pyo3::prepare_freethreaded_python();
pyo3::Python::with_gil(|py| {
let mask = RoaringLandmask::new(py).unwrap();

// Close to NP
assert!(!mask.contains(5., 89.));

// Close to SP
assert!(mask.contains(5., -89.));

// Within bounds
let x = (-180..180).map(f64::from).collect::<Vec<_>>();
let m = x.iter().map(|x| mask.contains(*x, 65.)).collect::<Vec<_>>();

// Wrapped bounds
let x = (180..540).map(f64::from).collect::<Vec<_>>();
let mm = x.iter().map(|x| mask.contains(*x, 65.)).collect::<Vec<_>>();

assert_eq!(m, mm);
for provider in [LandmaskProvider::Gshhg, LandmaskProvider::Osm] {
let mask = RoaringLandmask::new(py, provider).unwrap();
// Close to NP
assert!(!mask.contains(5., 89.));
// Close to SP
assert!(mask.contains(5., -89.));
// Within bounds
let x = (-180..180).map(f64::from).collect::<Vec<_>>();
let m = x.iter().map(|x| mask.contains(*x, 65.)).collect::<Vec<_>>();
// Wrapped bounds
let x = (180..540).map(f64::from).collect::<Vec<_>>();
let mm = x.iter().map(|x| mask.contains(*x, 65.)).collect::<Vec<_>>();
assert_eq!(m, mm);
}
})
}

Expand Down Expand Up @@ -262,69 +269,64 @@ mod tests {
fn test_contains_on_land(b: &mut Bencher) {
pyo3::prepare_freethreaded_python();
pyo3::Python::with_gil(|py| {
let mask = RoaringLandmask::new(py).unwrap();

assert!(mask.contains(15., 65.6));
assert!(mask.contains(10., 60.0));

b.iter(|| mask.contains(15., 65.6))
for provider in [LandmaskProvider::Gshhg, LandmaskProvider::Osm] {
let mask = RoaringLandmask::new(py, provider).unwrap();
assert!(mask.contains(15., 65.6));
assert!(mask.contains(10., 60.0));
b.iter(|| mask.contains(15., 65.6));
}
})
}

#[bench]
fn test_contains_in_ocean(b: &mut Bencher) {
pyo3::prepare_freethreaded_python();
pyo3::Python::with_gil(|py| {
let mask = RoaringLandmask::new(py).unwrap();

assert!(!mask.contains(5., 65.6));

b.iter(|| mask.contains(5., 65.6));
for provider in [LandmaskProvider::Gshhg, LandmaskProvider::Osm] {
let mask = RoaringLandmask::new(py, provider).unwrap();
assert!(!mask.contains(5., 65.6));
b.iter(|| mask.contains(5., 65.6));
}
});
}

#[bench]
fn test_contains_many(b: &mut Bencher) {
pyo3::prepare_freethreaded_python();
pyo3::Python::with_gil(|py| {
let mask = RoaringLandmask::new(py).unwrap();

let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();

let mask = RoaringLandmask::new(py).unwrap();

let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();

let x = PyArray::from_vec(py, x);
let y = PyArray::from_vec(py, y);

println!("testing {} points..", x.len());

b.iter(|| {
let len = x.len();

let x = x.to_dyn().readonly();
let y = y.to_dyn().readonly();

let onland = mask.contains_many(py, x, y);
assert!(onland.as_ref(py).len() == len);
})
for provider in [LandmaskProvider::Gshhg, LandmaskProvider::Osm] {
let mask = RoaringLandmask::new(py, provider).unwrap();
let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();
let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();
let x = PyArray::from_vec(py, x);
let y = PyArray::from_vec(py, y);
println!("testing {} points..", x.len());
b.iter(|| {
let len = x.len();

let x = x.to_dyn().readonly();
let y = y.to_dyn().readonly();

let onland = mask.contains_many(py, x, y);
assert!(onland.as_ref(py).len() == len);
});
}
})
}

Expand All @@ -333,44 +335,39 @@ mod tests {
fn test_contains_many_par(b: &mut Bencher) {
pyo3::prepare_freethreaded_python();
pyo3::Python::with_gil(|py| {
let mask = RoaringLandmask::new(py).unwrap();

let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();

let mask = RoaringLandmask::new(py).unwrap();

let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();

let x = PyArray::from_vec(py, x);
let y = PyArray::from_vec(py, y);

println!("testing {} points..", x.len());

b.iter(|| {
let len = x.len();

let x = x.to_dyn().readonly();
let y = y.to_dyn().readonly();

let onland = mask.contains_many_par(py, x, y);
assert!(onland.as_ref(py).len() == len);
})
for provider in [LandmaskProvider::Gshhg, LandmaskProvider::Osm] {
let mask = RoaringLandmask::new(py, provider).unwrap();
let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();
let (x, y): (Vec<f64>, Vec<f64>) = (0..360 * 2)
.map(|v| v as f64 * 0.5 - 180.)
.map(|x| {
(0..180 * 2)
.map(|y| y as f64 * 0.5 - 90.)
.map(move |y| (x, y))
})
.flatten()
.unzip();
let x = PyArray::from_vec(py, x);
let y = PyArray::from_vec(py, y);
println!("testing {} points..", x.len());
b.iter(|| {
let len = x.len();

let x = x.to_dyn().readonly();
let y = y.to_dyn().readonly();

let onland = mask.contains_many_par(py, x, y);
assert!(onland.as_ref(py).len() == len);
});
}
})
}
}
Expand Down
Loading

0 comments on commit e156961

Please sign in to comment.