From 17c2c2a45d06b33da7ba8dbf15ea4a8d809c9fa4 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 6 Jul 2023 23:17:53 +0200 Subject: [PATCH] Started work on the macro crate --- Cargo.lock | 39 ++- Cargo.toml | 14 +- firls-rs-macros/Cargo.toml | 11 + firls-rs-macros/examples/filter_real_macro.rs | 25 ++ firls-rs-macros/src/lib.rs | 22 ++ firls-rs/Cargo.lock | 230 ++++++++++++++++++ firls-rs/Cargo.toml | 10 + .../examples}/filter_complex.rs | 0 .../examples}/filter_real.rs | 0 {src => firls-rs/src}/lib.rs | 0 test.py => firls-rs/test.py | 0 11 files changed, 332 insertions(+), 19 deletions(-) create mode 100644 firls-rs-macros/Cargo.toml create mode 100644 firls-rs-macros/examples/filter_real_macro.rs create mode 100644 firls-rs-macros/src/lib.rs create mode 100644 firls-rs/Cargo.lock create mode 100644 firls-rs/Cargo.toml rename {examples => firls-rs/examples}/filter_complex.rs (100%) rename {examples => firls-rs/examples}/filter_real.rs (100%) rename {src => firls-rs/src}/lib.rs (100%) rename test.py => firls-rs/test.py (100%) diff --git a/Cargo.lock b/Cargo.lock index 1a5a7fe..645bee2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] -name = "firls-rs" +name = "firls-rs-macros" +version = "0.1.0" +dependencies = [ + "firls_rs", + "syn 2.0.23", +] + +[[package]] +name = "firls_rs" version = "0.1.0" dependencies = [ "nalgebra", @@ -65,7 +73,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -146,24 +154,24 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.28" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ "proc-macro2", ] @@ -207,6 +215,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "typenum" version = "1.16.0" @@ -215,9 +234,9 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" [[package]] name = "wide" diff --git a/Cargo.toml b/Cargo.toml index 0b377f6..1c9cc10 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,6 @@ -[package] -name = "firls-rs" -version = "0.1.0" -edition = "2021" +[workspace] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -nalgebra = "0.32.2" -num = "0.4.0" +members = [ + "firls-rs", + "firls-rs-macros" +] diff --git a/firls-rs-macros/Cargo.toml b/firls-rs-macros/Cargo.toml new file mode 100644 index 0000000..45ef5d0 --- /dev/null +++ b/firls-rs-macros/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "firls-rs-macros" +version = "0.1.0" +edition = "2021" + +[lib] +proc-macro = true + +[dependencies] +firls_rs = { path = "../firls-rs" } +syn = {version="2.0.23", features=["full"]} diff --git a/firls-rs-macros/examples/filter_real_macro.rs b/firls-rs-macros/examples/filter_real_macro.rs new file mode 100644 index 0000000..a125250 --- /dev/null +++ b/firls-rs-macros/examples/filter_real_macro.rs @@ -0,0 +1,25 @@ +use firls_rs::firls; +use firls_rs_macros::firls_real; + +firls_real!( + 13, + 8000.0, + [(0.0, 1.0), (1900.0, 1.0), (3000.0, 0.0), (4000.0, 0.0)] +); + +fn main() { + let coeffs = firls( + 13, + 8000.0, + &vec![(0.0, 1.0), (1900.0, 1.0), (3000.0, 0.0), (4000.0, 0.0)], + ) + .unwrap(); + + println!("["); + for coeff in coeffs.iter() { + println!("{},", coeff) + } + println!("]"); + + println!("Lenght: {}", coeffs.len()); +} diff --git a/firls-rs-macros/src/lib.rs b/firls-rs-macros/src/lib.rs new file mode 100644 index 0000000..8309d72 --- /dev/null +++ b/firls-rs-macros/src/lib.rs @@ -0,0 +1,22 @@ +extern crate proc_macro; +use proc_macro::TokenStream; +use syn::parse::{Parse, ParseStream}; +use syn::parse_macro_input; +use syn::{punctuated::Punctuated, Expr, Token}; + +struct FirlsRealInput {} + +impl Parse for FirlsRealInput { + fn parse(input: ParseStream) -> Result { + let arg_list = Punctuated::::parse_separated_nonempty(input)?; + + Ok(FirlsRealInput {}) + } +} + +#[proc_macro] +pub fn firls_real(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as FirlsRealInput); + + "fn answer() -> u32 { 42 }".parse().unwrap() +} diff --git a/firls-rs/Cargo.lock b/firls-rs/Cargo.lock new file mode 100644 index 0000000..1a5a7fe --- /dev/null +++ b/firls-rs/Cargo.lock @@ -0,0 +1,230 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "firls-rs" +version = "0.1.0" +dependencies = [ + "nalgebra", + "num", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "nalgebra" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + +[[package]] +name = "proc-macro2" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "safe_arch" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a7484307bd40f8f7ccbacccac730108f2cae119a3b11c74485b48aa9ea650f" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "wide" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40018623e2dba2602a9790faba8d33f2ebdebf4b86561b83928db735f8784728" +dependencies = [ + "bytemuck", + "safe_arch", +] diff --git a/firls-rs/Cargo.toml b/firls-rs/Cargo.toml new file mode 100644 index 0000000..7b3df16 --- /dev/null +++ b/firls-rs/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "firls_rs" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nalgebra = "0.32.2" +num = "0.4.0" diff --git a/examples/filter_complex.rs b/firls-rs/examples/filter_complex.rs similarity index 100% rename from examples/filter_complex.rs rename to firls-rs/examples/filter_complex.rs diff --git a/examples/filter_real.rs b/firls-rs/examples/filter_real.rs similarity index 100% rename from examples/filter_real.rs rename to firls-rs/examples/filter_real.rs diff --git a/src/lib.rs b/firls-rs/src/lib.rs similarity index 100% rename from src/lib.rs rename to firls-rs/src/lib.rs diff --git a/test.py b/firls-rs/test.py similarity index 100% rename from test.py rename to firls-rs/test.py