The code contains a bunch of assert!, assert_eq!, unwrap or other methods that could panic when running. Instead, I would like you to make them return Error types. Include additional errors in src/errors.rs if necessary. Make sure all tests pass. Make sure to run cargo fmt and clippy to ensure CI passes. Do no worry about panic inside the tests as it is okay if we do unwrap or assert_eq! inside tests. Make sure to use shorter names like `NovaError` rather `crate::errors::NovaError` to keep code consistent.