Skip to content

Fixes to Chapter Six compilation issues #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion chapter_six/constructing_our_own_python_objects/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ edition = "2018"
[dependencies]

[dependencies.pyo3]
version = "0.13.2"
version = "0.16.6"
features = ["extension-module"]

[lib]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use pyo3::prelude::{pyclass, pymethods, staticmethod};
use pyo3::prelude::{pyclass, pymethods};

use crate::fib_calcs::fib_number::fibonacci_number;
use crate::fib_calcs::fib_numbers::fibonacci_numbers;


#[pyclass]
pub struct FibProcessor {
#[pyo3(get, set)]
Expand All @@ -13,37 +12,33 @@ pub struct FibProcessor {
#[pyo3(get)]
pub number_results: Vec<u64>,
#[pyo3(get)]
pub numbers_results: Vec<Vec<u64>>
pub numbers_results: Vec<Vec<u64>>,
}

#[pymethods]
impl FibProcessor {

#[new]
fn new(number: Vec<i32>, numbers: Vec<Vec<i32>>) -> Self {
let input_numbers: Vec<Vec<i32>> = numbers.clone();
let input_number: Vec<i32> = number.clone();

let number_results: Vec<u64> = input_number.iter(
).map(
|x| fibonacci_number(*x)
).collect();
let number_results: Vec<u64> = input_number.iter().map(|x| fibonacci_number(*x)).collect();

let numbers_results: Vec<Vec<u64>> = Self::
process_numbers(input_numbers);
return FibProcessor {number, numbers,
number_results, numbers_results}
let numbers_results: Vec<Vec<u64>> = Self::process_numbers(input_numbers);
return FibProcessor {
number,
numbers,
number_results,
numbers_results,
};
}


#[staticmethod]
fn process_numbers(input_numbers: Vec<Vec<i32>>)
-> Vec<Vec<u64>> {
fn process_numbers(input_numbers: Vec<Vec<i32>>) -> Vec<Vec<u64>> {
let mut buffer: Vec<Vec<u64>> = Vec::new();
for i in input_numbers {
buffer.push(fibonacci_numbers(i));
}
return buffer
return buffer;
}
}

Original file line number Diff line number Diff line change
@@ -1,65 +1,53 @@
use pyo3::exceptions::PyTypeError;
use pyo3::prelude::{pyfunction, PyResult};
use pyo3::types::{PyDict, PyList};
use pyo3::exceptions::PyTypeError;

use crate::fib_calcs::fib_number::fibonacci_number;
use crate::fib_calcs::fib_numbers::fibonacci_numbers;


fn process_numbers(input_numbers: Vec<Vec<i32>>)
-> Vec<Vec<u64>> {
fn process_numbers(input_numbers: Vec<Vec<i32>>) -> Vec<Vec<u64>> {
let mut buffer: Vec<Vec<u64>> = Vec::new();
for i in input_numbers {
buffer.push(fibonacci_numbers(i));
}
return buffer
return buffer;
}


#[pyfunction]
pub fn run_config<'a>(config: &'a PyDict) -> PyResult<&'a PyDict> {

match config.get_item("number") {
Some(data) => {
match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results: Vec<i32> =
raw_data.extract::<Vec<i32>>().unwrap();
let fib_numbers: Vec<u64> =
processed_results.iter().map(
|x| fibonacci_number(*x)
).collect();
config.set_item(
"NUMBER RESULT", fib_numbers);
},
Err(_) => Err(PyTypeError::new_err(
"parameter number is not a list
of integers")).unwrap()
Some(data) => match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results: Vec<i32> = raw_data.extract::<Vec<i32>>().unwrap();
let fib_numbers: Vec<u64> = processed_results
.iter()
.map(|x| fibonacci_number(*x))
.collect();
config.set_item("NUMBER RESULT", fib_numbers)?;
}
Err(_) => Err(PyTypeError::new_err(
"parameter number is not a list
of integers",
))
.unwrap(),
},
None => println!(
"parameter number is not in the config"
)
None => println!("parameter number is not in the config"),
}

match config.get_item("numbers") {
Some(data) => {
match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results_two: Vec<Vec<i32>> =
raw_data.extract::<Vec<Vec<i32>>>(
).unwrap();
config.set_item("NUMBERS RESULT",
process_numbers(processed_results_two));
},
Err(_) => Err(PyTypeError::new_err(
"parameter numbers is not a list of lists of
integers")).unwrap()
Some(data) => match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results_two: Vec<Vec<i32>> =
raw_data.extract::<Vec<Vec<i32>>>().unwrap();
config.set_item("NUMBERS RESULT", process_numbers(processed_results_two))?;
}

Err(_) => Err(PyTypeError::new_err(
"parameter numbers is not a list of lists of
integers",
))
.unwrap(),
},
None => println!(
"parameter numbers is not in the config")
None => println!("parameter numbers is not in the config"),
}
return Ok(config)
}
return Ok(config);
}
21 changes: 9 additions & 12 deletions chapter_six/constructing_our_own_python_objects/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
use pyo3::prelude::*;
use pyo3::wrap_pyfunction;

mod interface;
mod fib_calcs;
mod class_module;
mod fib_calcs;
mod interface;

use fib_calcs::fib_number::__pyo3_get_function_fibonacci_number;
use fib_calcs::fib_numbers::__pyo3_get_function_fibonacci_numbers;
use interface::config::__pyo3_get_function_run_config;
use class_module::fib_processor::FibProcessor;


use fib_calcs::fib_number::fibonacci_number;
use fib_calcs::fib_numbers::fibonacci_numbers;
use interface::config::run_config;

#[pyfunction]
fn say_hello() {
println!("saying hello from Rust!");
}


#[pymodule]
fn flitton_fib_rs(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_wrapped(wrap_pyfunction!(say_hello));
m.add_wrapped(wrap_pyfunction!(fibonacci_number));
m.add_wrapped(wrap_pyfunction!(fibonacci_numbers));
m.add_wrapped(wrap_pyfunction!(run_config));
m.add_wrapped(wrap_pyfunction!(say_hello))?;
m.add_wrapped(wrap_pyfunction!(fibonacci_number))?;
m.add_wrapped(wrap_pyfunction!(fibonacci_numbers))?;
m.add_wrapped(wrap_pyfunction!(run_config))?;
m.add_class::<FibProcessor>()?;
Ok(())
}
2 changes: 1 addition & 1 deletion chapter_six/inspecting_python_objects/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ edition = "2018"
[dependencies]

[dependencies.pyo3]
version = "0.13.2"
version = "0.16.6"
features = ["extension-module"]

[lib]
Expand Down
72 changes: 30 additions & 42 deletions chapter_six/inspecting_python_objects/src/interface/config.rs
Original file line number Diff line number Diff line change
@@ -1,65 +1,53 @@
use pyo3::exceptions::PyTypeError;
use pyo3::prelude::{pyfunction, PyResult};
use pyo3::types::{PyDict, PyList};
use pyo3::exceptions::PyTypeError;

use crate::fib_calcs::fib_number::fibonacci_number;
use crate::fib_calcs::fib_numbers::fibonacci_numbers;


fn process_numbers(input_numbers: Vec<Vec<i32>>)
-> Vec<Vec<u64>> {
fn process_numbers(input_numbers: Vec<Vec<i32>>) -> Vec<Vec<u64>> {
let mut buffer: Vec<Vec<u64>> = Vec::new();
for i in input_numbers {
buffer.push(fibonacci_numbers(i));
}
return buffer
return buffer;
}


#[pyfunction]
pub fn run_config<'a>(config: &'a PyDict) -> PyResult<&'a PyDict> {

match config.get_item("number") {
Some(data) => {
match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results: Vec<i32> =
raw_data.extract::<Vec<i32>>().unwrap();
let fib_numbers: Vec<u64> =
processed_results.iter().map(
|x| fibonacci_number(*x)
).collect();
config.set_item(
"NUMBER RESULT", fib_numbers);
},
Err(_) => Err(PyTypeError::new_err(
"parameter number is not a list
of integers")).unwrap()
Some(data) => match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results: Vec<i32> = raw_data.extract::<Vec<i32>>().unwrap();
let fib_numbers: Vec<u64> = processed_results
.iter()
.map(|x| fibonacci_number(*x))
.collect();
config.set_item("NUMBER RESULT", fib_numbers)?;
}
Err(_) => Err(PyTypeError::new_err(
"parameter number is not a list
of integers",
))
.unwrap(),
},
None => println!(
"parameter number is not in the config"
)
None => println!("parameter number is not in the config"),
}

match config.get_item("numbers") {
Some(data) => {
match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results_two: Vec<Vec<i32>> =
raw_data.extract::<Vec<Vec<i32>>>(
).unwrap();
config.set_item("NUMBERS RESULT",
process_numbers(processed_results_two));
},
Err(_) => Err(PyTypeError::new_err(
"parameter numbers is not a list of lists of
integers")).unwrap()
Some(data) => match data.downcast::<PyList>() {
Ok(raw_data) => {
let processed_results_two: Vec<Vec<i32>> =
raw_data.extract::<Vec<Vec<i32>>>().unwrap();
config.set_item("NUMBERS RESULT", process_numbers(processed_results_two))?;
}

Err(_) => Err(PyTypeError::new_err(
"parameter numbers is not a list of lists of
integers",
))
.unwrap(),
},
None => println!(
"parameter numbers is not in the config")
None => println!("parameter numbers is not in the config"),
}
return Ok(config)
}
return Ok(config);
}
2 changes: 1 addition & 1 deletion chapter_six/inspecting_python_objects/src/interface/mod.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
pub mod config;
pub mod config;
pub mod object;
12 changes: 5 additions & 7 deletions chapter_six/inspecting_python_objects/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
use pyo3::prelude::*;
use pyo3::wrap_pyfunction;

mod interface;
mod fib_calcs;
mod interface;

use fib_calcs::fib_number::__pyo3_get_function_fibonacci_number;
use fib_calcs::fib_numbers::__pyo3_get_function_fibonacci_numbers;
use interface::config::__pyo3_get_function_run_config;
use interface::object::__pyo3_get_function_object_interface;

use fib_calcs::fib_number::fibonacci_number;
use fib_calcs::fib_numbers::fibonacci_numbers;
use interface::config::run_config;
use interface::object::object_interface;

#[pyfunction]
fn say_hello() {
println!("saying hello from Rust!");
}


#[pymodule]
fn flitton_fib_rs(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_wrapped(wrap_pyfunction!(say_hello));
Expand Down