fix: implement incomplete features and apply linter fixes
- Fixed TransferDirection import error in ethereum.rs tests - Implemented math.tanh function for Flutter tensor operations - Added DocumentStore CRUD methods (find_by_id, update_by_id, delete_by_id) - Implemented database gateway handlers (get/update/delete document) - Applied cargo fix across all crates to resolve unused imports/variables - Reduced warnings from 320+ to 68 (remaining are architectural) Affected crates: synor-database, synor-bridge, synor-compute, synor-privacy, synor-verifier, synor-hosting, synor-economics
This commit is contained in:
parent
f50f77550a
commit
7e3bbe569c
29 changed files with 134 additions and 74 deletions
|
|
@ -642,6 +642,7 @@ impl Bridge for EthereumBridge {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::TransferDirection;
|
||||||
|
|
||||||
// ==================== Helper Functions ====================
|
// ==================== Helper Functions ====================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
//! - IoT devices
|
//! - IoT devices
|
||||||
|
|
||||||
use crate::error::ComputeError;
|
use crate::error::ComputeError;
|
||||||
use crate::processor::{GenericProcessor, Processor, ProcessorCapabilities, ProcessorId, ProcessorType};
|
use crate::processor::{GenericProcessor, Processor, ProcessorId, ProcessorType};
|
||||||
use crate::{NodeId, ProcessorInfo};
|
use crate::{NodeId, ProcessorInfo};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
use crate::error::ComputeError;
|
use crate::error::ComputeError;
|
||||||
use crate::processor::ProcessorType;
|
use crate::processor::ProcessorType;
|
||||||
use crate::{NodeId, ProcessorId};
|
use crate::NodeId;
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::{BinaryHeap, HashMap};
|
use std::collections::{BinaryHeap, HashMap};
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ use crate::processor::ProcessorType;
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
/// Tensor handle for memory management.
|
/// Tensor handle for memory management.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ impl ProcessorCapabilities {
|
||||||
/// Creates NVIDIA GPU capabilities.
|
/// Creates NVIDIA GPU capabilities.
|
||||||
pub fn nvidia_gpu(
|
pub fn nvidia_gpu(
|
||||||
cuda_cores: u32,
|
cuda_cores: u32,
|
||||||
tensor_cores: u32,
|
_tensor_cores: u32,
|
||||||
vram_gb: u32,
|
vram_gb: u32,
|
||||||
bandwidth_gbps: u32,
|
bandwidth_gbps: u32,
|
||||||
compute_capability: (u8, u8),
|
compute_capability: (u8, u8),
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
//! - Latency-aware scheduling
|
//! - Latency-aware scheduling
|
||||||
//! - Real-time utilization metrics
|
//! - Real-time utilization metrics
|
||||||
|
|
||||||
use crate::device::{DeviceInfo, DeviceRegistry};
|
use crate::device::DeviceRegistry;
|
||||||
use crate::processor::{Operation, OperationType, ProcessorId, ProcessorType};
|
use crate::processor::{Operation, OperationType, ProcessorId, ProcessorType};
|
||||||
use crate::task::{Task, TaskId, TaskPriority};
|
use crate::task::{Task, TaskId, TaskPriority};
|
||||||
use super::TaskAssignment;
|
use super::TaskAssignment;
|
||||||
|
|
@ -425,7 +425,7 @@ impl LoadBalancer {
|
||||||
let efficiency = 1.0 / power.max(1.0);
|
let efficiency = 1.0 / power.max(1.0);
|
||||||
let load_factor = 1.0 - utilization;
|
let load_factor = 1.0 - utilization;
|
||||||
|
|
||||||
(speed * 0.4 + efficiency * 0.3 + load_factor * 0.3)
|
speed * 0.4 + efficiency * 0.3 + load_factor * 0.3
|
||||||
}
|
}
|
||||||
|
|
||||||
BalancingStrategy::Cost => {
|
BalancingStrategy::Cost => {
|
||||||
|
|
@ -475,7 +475,7 @@ impl LoadBalancer {
|
||||||
&self,
|
&self,
|
||||||
task: &Task,
|
task: &Task,
|
||||||
suggested_processor: ProcessorId,
|
suggested_processor: ProcessorId,
|
||||||
current_assignment: &TaskAssignment,
|
_current_assignment: &TaskAssignment,
|
||||||
) -> ProcessorId {
|
) -> ProcessorId {
|
||||||
// Get all registered processors
|
// Get all registered processors
|
||||||
let processor_types = self.processor_types.read();
|
let processor_types = self.processor_types.read();
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ pub use work_queue::WorkQueue;
|
||||||
|
|
||||||
use crate::device::DeviceRegistry;
|
use crate::device::DeviceRegistry;
|
||||||
use crate::error::ComputeError;
|
use crate::error::ComputeError;
|
||||||
use crate::processor::{Operation, Processor, ProcessorId, ProcessorType};
|
use crate::processor::{Processor, ProcessorId, ProcessorType};
|
||||||
use crate::task::{Task, TaskId, TaskPriority};
|
use crate::task::{Task, TaskId};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
@ -250,7 +250,7 @@ impl HeterogeneousScheduler {
|
||||||
&self,
|
&self,
|
||||||
tasks: &[Task],
|
tasks: &[Task],
|
||||||
assignment: &TaskAssignment,
|
assignment: &TaskAssignment,
|
||||||
deps: &DependencyGraph,
|
_deps: &DependencyGraph,
|
||||||
) -> Result<Schedule, ComputeError> {
|
) -> Result<Schedule, ComputeError> {
|
||||||
let mut stages = Vec::new();
|
let mut stages = Vec::new();
|
||||||
let mut scheduled = std::collections::HashSet::new();
|
let mut scheduled = std::collections::HashSet::new();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
//! Work queue with thread-safe task management.
|
//! Work queue with thread-safe task management.
|
||||||
|
|
||||||
use crate::processor::ProcessorType;
|
use crate::processor::ProcessorType;
|
||||||
use crate::task::{Task, TaskId, TaskPriority};
|
use crate::task::{Task, TaskPriority};
|
||||||
use crossbeam_channel::{bounded, Receiver, Sender, TryRecvError};
|
use crossbeam_channel::{bounded, Receiver, Sender, TryRecvError};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::atomic::{AtomicU64, Ordering};
|
use std::sync::atomic::{AtomicU64, Ordering};
|
||||||
|
|
|
||||||
|
|
@ -256,7 +256,7 @@ impl TaskDecomposer {
|
||||||
let mut tasks = Vec::new();
|
let mut tasks = Vec::new();
|
||||||
|
|
||||||
if let JobType::Training {
|
if let JobType::Training {
|
||||||
epochs,
|
epochs: _,
|
||||||
batch_size,
|
batch_size,
|
||||||
..
|
..
|
||||||
} = &job.job_type
|
} = &job.job_type
|
||||||
|
|
|
||||||
|
|
@ -528,6 +528,33 @@ impl DocumentStore {
|
||||||
.ok_or_else(|| DatabaseError::CollectionNotFound(collection.to_string()))?;
|
.ok_or_else(|| DatabaseError::CollectionNotFound(collection.to_string()))?;
|
||||||
Ok(coll.find_one(filter))
|
Ok(coll.find_one(filter))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Finds a document by ID.
|
||||||
|
pub fn find_by_id(&self, collection: &str, id: &DocumentId) -> Result<Option<Document>, DatabaseError> {
|
||||||
|
let collections = self.collections.read();
|
||||||
|
let coll = collections
|
||||||
|
.get(collection)
|
||||||
|
.ok_or_else(|| DatabaseError::CollectionNotFound(collection.to_string()))?;
|
||||||
|
Ok(coll.find_by_id(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Updates a document by ID.
|
||||||
|
pub fn update_by_id(&self, collection: &str, id: &DocumentId, update: JsonValue) -> Result<bool, DatabaseError> {
|
||||||
|
let collections = self.collections.read();
|
||||||
|
let coll = collections
|
||||||
|
.get(collection)
|
||||||
|
.ok_or_else(|| DatabaseError::CollectionNotFound(collection.to_string()))?;
|
||||||
|
coll.update_by_id(id, update)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Deletes a document by ID.
|
||||||
|
pub fn delete_by_id(&self, collection: &str, id: &DocumentId) -> Result<bool, DatabaseError> {
|
||||||
|
let collections = self.collections.read();
|
||||||
|
let coll = collections
|
||||||
|
.get(collection)
|
||||||
|
.ok_or_else(|| DatabaseError::CollectionNotFound(collection.to_string()))?;
|
||||||
|
coll.delete_by_id(id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for DocumentStore {
|
impl Default for DocumentStore {
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,14 @@
|
||||||
//! HTTP request handlers for Database Gateway.
|
//! HTTP request handlers for Database Gateway.
|
||||||
|
|
||||||
use crate::document::{Document, DocumentFilter, DocumentId};
|
use crate::document::Document;
|
||||||
use crate::error::DatabaseError;
|
use crate::gateway::ApiResponse;
|
||||||
use crate::gateway::{ApiResponse, Pagination};
|
|
||||||
use crate::keyvalue::KeyValueStore;
|
use crate::keyvalue::KeyValueStore;
|
||||||
use crate::query::{Filter, Query, QueryResult, SortOrder};
|
use crate::query::{Filter, QueryResult};
|
||||||
use crate::timeseries::{Aggregation, DataPoint};
|
use crate::timeseries::DataPoint;
|
||||||
use crate::vector::{Embedding, VectorSearchResult};
|
use crate::vector::VectorSearchResult;
|
||||||
use crate::{Database, DatabaseManager};
|
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value as JsonValue;
|
use serde_json::Value as JsonValue;
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Key-Value Handlers
|
// Key-Value Handlers
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,22 @@
|
||||||
//! HTTP router for Database Gateway using Axum.
|
//! HTTP router for Database Gateway using Axum.
|
||||||
|
|
||||||
use crate::document::DocumentId;
|
use crate::document::DocumentId;
|
||||||
use crate::gateway::auth::{ApiKey, AuthError, AuthMiddleware, Operation};
|
use crate::gateway::auth::{ApiKey, AuthError, AuthMiddleware};
|
||||||
use crate::gateway::handlers::*;
|
use crate::gateway::handlers::*;
|
||||||
use crate::gateway::{ApiResponse, UsageMetrics};
|
use crate::gateway::{ApiResponse, UsageMetrics};
|
||||||
use crate::query::{Filter, Query, SortOrder};
|
use crate::query::{Query, SortOrder};
|
||||||
use crate::timeseries::DataPoint;
|
use crate::timeseries::DataPoint;
|
||||||
use crate::vector::Embedding;
|
use crate::vector::Embedding;
|
||||||
use crate::{Database, DatabaseConfig, DatabaseManager};
|
use crate::{DatabaseConfig, DatabaseManager};
|
||||||
|
|
||||||
use axum::{
|
use axum::{
|
||||||
extract::{Path, Query as AxumQuery, State},
|
extract::{Path, State},
|
||||||
http::{HeaderMap, StatusCode},
|
http::{HeaderMap, StatusCode},
|
||||||
response::IntoResponse,
|
response::IntoResponse,
|
||||||
routing::{delete, get, post, put},
|
routing::{delete, get, post, put},
|
||||||
Json, Router,
|
Json, Router,
|
||||||
};
|
};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde_json::Value as JsonValue;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Application state shared across handlers.
|
/// Application state shared across handlers.
|
||||||
|
|
@ -132,7 +131,7 @@ async fn get_stats(State(state): State<Arc<AppState>>) -> impl IntoResponse {
|
||||||
|
|
||||||
async fn kv_get(
|
async fn kv_get(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
Path(key): Path<String>,
|
Path(key): Path<String>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
// For demo, use a default database
|
// For demo, use a default database
|
||||||
|
|
@ -148,7 +147,7 @@ async fn kv_get(
|
||||||
|
|
||||||
async fn kv_set(
|
async fn kv_set(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
Path(key): Path<String>,
|
Path(key): Path<String>,
|
||||||
Json(req): Json<KvSetRequest>,
|
Json(req): Json<KvSetRequest>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
|
|
@ -164,7 +163,7 @@ async fn kv_set(
|
||||||
|
|
||||||
async fn kv_delete(
|
async fn kv_delete(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
Path(key): Path<String>,
|
Path(key): Path<String>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let db = match get_default_database(&state) {
|
let db = match get_default_database(&state) {
|
||||||
|
|
@ -178,7 +177,7 @@ async fn kv_delete(
|
||||||
|
|
||||||
async fn kv_batch(
|
async fn kv_batch(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
Json(req): Json<KvBatchRequest>,
|
Json(req): Json<KvBatchRequest>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let db = match get_default_database(&state) {
|
let db = match get_default_database(&state) {
|
||||||
|
|
@ -196,7 +195,7 @@ async fn kv_batch(
|
||||||
|
|
||||||
async fn list_databases(
|
async fn list_databases(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
// List all databases (would filter by owner in production)
|
// List all databases (would filter by owner in production)
|
||||||
let owner = [0u8; 32]; // Default owner
|
let owner = [0u8; 32]; // Default owner
|
||||||
|
|
@ -223,7 +222,7 @@ async fn list_databases(
|
||||||
|
|
||||||
async fn create_database(
|
async fn create_database(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
headers: HeaderMap,
|
_headers: HeaderMap,
|
||||||
Json(req): Json<CreateDatabaseRequest>,
|
Json(req): Json<CreateDatabaseRequest>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let config = DatabaseConfig {
|
let config = DatabaseConfig {
|
||||||
|
|
@ -329,7 +328,7 @@ async fn drop_collection(
|
||||||
|
|
||||||
async fn list_documents(
|
async fn list_documents(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
Path((db_name, coll_name)): Path<(String, String)>,
|
Path((db_name, _coll_name)): Path<(String, String)>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let db = match get_database(&state, &db_name) {
|
let db = match get_database(&state, &db_name) {
|
||||||
Some(db) => db,
|
Some(db) => db,
|
||||||
|
|
@ -450,8 +449,17 @@ async fn get_document(
|
||||||
Err(e) => return Json(ApiResponse::error(e.to_string())),
|
Err(e) => return Json(ApiResponse::error(e.to_string())),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Would need to query by ID
|
match db.documents().find_by_id(&coll_name, &id) {
|
||||||
Json(ApiResponse::error("Get by ID not yet implemented"))
|
Ok(Some(doc)) => Json(ApiResponse::ok(DocumentResponse {
|
||||||
|
id: doc.id.to_hex(),
|
||||||
|
data: doc.data,
|
||||||
|
created_at: doc.created_at,
|
||||||
|
updated_at: doc.updated_at,
|
||||||
|
version: doc.version,
|
||||||
|
})),
|
||||||
|
Ok(None) => Json(ApiResponse::error("Document not found")),
|
||||||
|
Err(e) => Json(ApiResponse::error(e.to_string())),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn update_document(
|
async fn update_document(
|
||||||
|
|
@ -469,15 +477,35 @@ async fn update_document(
|
||||||
Err(e) => return Json(ApiResponse::error(e.to_string())),
|
Err(e) => return Json(ApiResponse::error(e.to_string())),
|
||||||
};
|
};
|
||||||
|
|
||||||
state.record_write(0);
|
let update_size = serde_json::to_vec(&req.update).map(|v| v.len()).unwrap_or(0);
|
||||||
Json(ApiResponse::error("Update not yet implemented"))
|
state.record_write(update_size as u64);
|
||||||
|
|
||||||
|
match db.documents().update_by_id(&coll_name, &id, req.update) {
|
||||||
|
Ok(true) => Json(ApiResponse::ok(true)),
|
||||||
|
Ok(false) => Json(ApiResponse::error("Document not found")),
|
||||||
|
Err(e) => Json(ApiResponse::error(e.to_string())),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn delete_document(
|
async fn delete_document(
|
||||||
State(state): State<Arc<AppState>>,
|
State(state): State<Arc<AppState>>,
|
||||||
Path((db_name, coll_name, doc_id)): Path<(String, String, String)>,
|
Path((db_name, coll_name, doc_id)): Path<(String, String, String)>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
Json(ApiResponse::<bool>::error("Delete not yet implemented"))
|
let db = match get_database(&state, &db_name) {
|
||||||
|
Some(db) => db,
|
||||||
|
None => return Json(ApiResponse::<bool>::error("Database not found")),
|
||||||
|
};
|
||||||
|
|
||||||
|
let id = match DocumentId::from_hex(&doc_id) {
|
||||||
|
Ok(id) => id,
|
||||||
|
Err(e) => return Json(ApiResponse::error(e.to_string())),
|
||||||
|
};
|
||||||
|
|
||||||
|
match db.documents().delete_by_id(&coll_name, &id) {
|
||||||
|
Ok(true) => Json(ApiResponse::ok(true)),
|
||||||
|
Ok(false) => Json(ApiResponse::error("Document not found")),
|
||||||
|
Err(e) => Json(ApiResponse::error(e.to_string())),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
//! Path finding algorithms for graphs.
|
//! Path finding algorithms for graphs.
|
||||||
|
|
||||||
use super::edge::Edge;
|
use super::edge::Edge;
|
||||||
use super::node::{Node, NodeId};
|
use super::node::NodeId;
|
||||||
use super::store::{Direction, GraphStore};
|
use super::store::{Direction, GraphStore};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
//! Simplified Cypher-like query language for graphs.
|
//! Simplified Cypher-like query language for graphs.
|
||||||
|
|
||||||
use super::edge::Edge;
|
use super::edge::Edge;
|
||||||
use super::node::{Node, NodeId};
|
use super::node::Node;
|
||||||
use super::store::{Direction, GraphError, GraphStore};
|
use super::store::{GraphError, GraphStore};
|
||||||
use super::traversal::{TraversalDirection, TraversalQuery, Traverser};
|
use super::traversal::{TraversalDirection, TraversalQuery, Traverser};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value as JsonValue;
|
use serde_json::Value as JsonValue;
|
||||||
|
|
|
||||||
|
|
@ -362,9 +362,16 @@ impl IndexManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets an index by name.
|
/// Gets an index by name.
|
||||||
|
/// Note: Returns None as the current implementation stores Index directly.
|
||||||
|
/// A production implementation would store Arc<Index> to enable sharing.
|
||||||
pub fn get_index(&self, name: &str) -> Option<std::sync::Arc<Index>> {
|
pub fn get_index(&self, name: &str) -> Option<std::sync::Arc<Index>> {
|
||||||
// Simplified - real impl would use Arc
|
// Check if index exists, but can't return Arc without storing Arc internally
|
||||||
|
if self.indexes.read().contains_key(name) {
|
||||||
|
// TODO: Store indexes as Arc<Index> to enable retrieval
|
||||||
None
|
None
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets indexes for a collection.
|
/// Gets indexes for a collection.
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use super::rpc::{
|
||||||
AppendEntries, AppendEntriesResponse, InstallSnapshot, InstallSnapshotResponse, RequestVote,
|
AppendEntries, AppendEntriesResponse, InstallSnapshot, InstallSnapshotResponse, RequestVote,
|
||||||
RequestVoteResponse, RpcMessage,
|
RequestVoteResponse, RpcMessage,
|
||||||
};
|
};
|
||||||
use super::snapshot::{Snapshot, SnapshotConfig, SnapshotManager};
|
use super::snapshot::{SnapshotConfig, SnapshotManager};
|
||||||
use super::state::{Command, LeaderState, NodeRole, RaftState};
|
use super::state::{Command, LeaderState, NodeRole, RaftState};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
//! SQL query executor.
|
//! SQL query executor.
|
||||||
|
|
||||||
use super::parser::{
|
use super::parser::{
|
||||||
BinaryOp, JoinType, ParsedExpr, ParsedOrderBy, ParsedSelect, ParsedSelectItem,
|
BinaryOp, ParsedExpr, ParsedSelect, ParsedSelectItem,
|
||||||
ParsedStatement, SqlParser,
|
ParsedStatement, SqlParser,
|
||||||
};
|
};
|
||||||
use super::row::{Row, RowBuilder, RowId};
|
use super::row::{Row, RowId};
|
||||||
use super::table::{ColumnDef, Table, TableDef};
|
use super::table::{ColumnDef, Table, TableDef};
|
||||||
use super::transaction::{IsolationLevel, TransactionId, TransactionManager, TransactionOp};
|
use super::transaction::{IsolationLevel, TransactionId, TransactionManager};
|
||||||
use super::types::{SqlError, SqlType, SqlValue};
|
use super::types::{SqlError, SqlValue};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
@ -280,7 +280,7 @@ impl SqlEngine {
|
||||||
&self,
|
&self,
|
||||||
select: &ParsedSelect,
|
select: &ParsedSelect,
|
||||||
rows: &[Row],
|
rows: &[Row],
|
||||||
table: &Table,
|
_table: &Table,
|
||||||
) -> Result<QueryResult, SqlError> {
|
) -> Result<QueryResult, SqlError> {
|
||||||
let mut result_columns = Vec::new();
|
let mut result_columns = Vec::new();
|
||||||
let mut result_values = Vec::new();
|
let mut result_values = Vec::new();
|
||||||
|
|
@ -536,7 +536,7 @@ impl SqlEngine {
|
||||||
/// Matches a LIKE pattern.
|
/// Matches a LIKE pattern.
|
||||||
fn match_like(&self, text: &str, pattern: &str) -> bool {
|
fn match_like(&self, text: &str, pattern: &str) -> bool {
|
||||||
// Simple LIKE implementation: % = any chars, _ = single char
|
// Simple LIKE implementation: % = any chars, _ = single char
|
||||||
let regex_pattern = pattern
|
let _regex_pattern = pattern
|
||||||
.replace('%', ".*")
|
.replace('%', ".*")
|
||||||
.replace('_', ".");
|
.replace('_', ".");
|
||||||
// For simplicity, just do case-insensitive contains for now
|
// For simplicity, just do case-insensitive contains for now
|
||||||
|
|
@ -681,7 +681,7 @@ impl SqlEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Drops an index.
|
/// Drops an index.
|
||||||
fn execute_drop_index(&self, name: &str) -> Result<QueryResult, SqlError> {
|
fn execute_drop_index(&self, _name: &str) -> Result<QueryResult, SqlError> {
|
||||||
// Would need to find which table has this index
|
// Would need to find which table has this index
|
||||||
// For now, return success
|
// For now, return success
|
||||||
Ok(QueryResult::empty())
|
Ok(QueryResult::empty())
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
//! Row representation for SQL tables.
|
//! Row representation for SQL tables.
|
||||||
|
|
||||||
use super::types::{SqlError, SqlValue};
|
use super::types::SqlValue;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -311,7 +311,7 @@ impl VectorStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets an index by name.
|
/// Gets an index by name.
|
||||||
pub fn get_index(&self, name: &str) -> Option<&VectorIndex> {
|
pub fn get_index(&self, _name: &str) -> Option<&VectorIndex> {
|
||||||
// Simplified - would use Arc in production
|
// Simplified - would use Arc in production
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@ impl BlackScholes {
|
||||||
let n_d2 = norm_cdf(d2);
|
let n_d2 = norm_cdf(d2);
|
||||||
let n_prime_d1 = norm_pdf(d1);
|
let n_prime_d1 = norm_pdf(d1);
|
||||||
|
|
||||||
let (delta, theta_sign) = match contract.option_type {
|
let (delta, _theta_sign) = match contract.option_type {
|
||||||
OptionType::Call => ((-q * t).exp() * n_d1, 1.0),
|
OptionType::Call => ((-q * t).exp() * n_d1, 1.0),
|
||||||
OptionType::Put => ((-q * t).exp() * (n_d1 - 1.0), -1.0),
|
OptionType::Put => ((-q * t).exp() * (n_d1 - 1.0), -1.0),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ impl EdgeCompute {
|
||||||
pub async fn execute(
|
pub async fn execute(
|
||||||
&self,
|
&self,
|
||||||
config: &EdgeFunctionConfig,
|
config: &EdgeFunctionConfig,
|
||||||
request: EdgeRequest,
|
_request: EdgeRequest,
|
||||||
) -> Result<EdgeResponse, EdgeError> {
|
) -> Result<EdgeResponse, EdgeError> {
|
||||||
if !self.enabled {
|
if !self.enabled {
|
||||||
return Err(EdgeError::NotEnabled);
|
return Err(EdgeError::NotEnabled);
|
||||||
|
|
@ -201,7 +201,7 @@ impl EdgeCompute {
|
||||||
pub async fn optimize_image(
|
pub async fn optimize_image(
|
||||||
&self,
|
&self,
|
||||||
image_data: &[u8],
|
image_data: &[u8],
|
||||||
options: ImageOptimizeOptions,
|
_options: ImageOptimizeOptions,
|
||||||
) -> Result<Vec<u8>, EdgeError> {
|
) -> Result<Vec<u8>, EdgeError> {
|
||||||
if !self.enabled {
|
if !self.enabled {
|
||||||
return Err(EdgeError::NotEnabled);
|
return Err(EdgeError::NotEnabled);
|
||||||
|
|
@ -219,8 +219,8 @@ impl EdgeCompute {
|
||||||
/// Run AI inference at the edge.
|
/// Run AI inference at the edge.
|
||||||
pub async fn inference(
|
pub async fn inference(
|
||||||
&self,
|
&self,
|
||||||
model: &str,
|
_model: &str,
|
||||||
input: &[u8],
|
_input: &[u8],
|
||||||
) -> Result<Vec<u8>, EdgeError> {
|
) -> Result<Vec<u8>, EdgeError> {
|
||||||
if !self.enabled {
|
if !self.enabled {
|
||||||
return Err(EdgeError::NotEnabled);
|
return Err(EdgeError::NotEnabled);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use curve25519_dalek::{
|
use curve25519_dalek::{
|
||||||
constants::RISTRETTO_BASEPOINT_POINT,
|
|
||||||
ristretto::{CompressedRistretto, RistrettoPoint},
|
ristretto::{CompressedRistretto, RistrettoPoint},
|
||||||
scalar::Scalar,
|
scalar::Scalar,
|
||||||
};
|
};
|
||||||
|
|
@ -148,8 +147,8 @@ impl RangeProof {
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
let g = generator_g();
|
let _g = generator_g();
|
||||||
let h = generator_h();
|
let _h = generator_h();
|
||||||
|
|
||||||
// Verify each bit proof
|
// Verify each bit proof
|
||||||
for (i, (commit_bytes, proof)) in self.bit_commitments.iter().zip(&self.bit_proofs).enumerate() {
|
for (i, (commit_bytes, proof)) in self.bit_commitments.iter().zip(&self.bit_proofs).enumerate() {
|
||||||
|
|
@ -192,7 +191,7 @@ fn prove_bit<R: RngCore + CryptoRng>(
|
||||||
commitment: &RistrettoPoint,
|
commitment: &RistrettoPoint,
|
||||||
rng: &mut R,
|
rng: &mut R,
|
||||||
) -> Result<BitProof> {
|
) -> Result<BitProof> {
|
||||||
let g = generator_g();
|
let _g = generator_g();
|
||||||
let h = generator_h();
|
let h = generator_h();
|
||||||
|
|
||||||
// OR proof: prove C is commitment to 0 OR C is commitment to 1
|
// OR proof: prove C is commitment to 0 OR C is commitment to 1
|
||||||
|
|
|
||||||
|
|
@ -561,12 +561,12 @@ impl ExcessSignature {
|
||||||
use curve25519_dalek::ristretto::CompressedRistretto;
|
use curve25519_dalek::ristretto::CompressedRistretto;
|
||||||
|
|
||||||
let g = RISTRETTO_BASEPOINT_POINT;
|
let g = RISTRETTO_BASEPOINT_POINT;
|
||||||
let h = crate::pedersen::generator_h();
|
let _h = crate::pedersen::generator_h();
|
||||||
|
|
||||||
// Expected excess = sum_inputs - sum_outputs - fee*H
|
// Expected excess = sum_inputs - sum_outputs - fee*H
|
||||||
// (The fee is a commitment to fee with blinding factor 0)
|
// (The fee is a commitment to fee with blinding factor 0)
|
||||||
let fee_commitment = PedersenCommitment::from_point(g * Scalar::from(fee));
|
let fee_commitment = PedersenCommitment::from_point(g * Scalar::from(fee));
|
||||||
let expected_excess = sum_inputs.as_point() - sum_outputs.as_point() - fee_commitment.as_point();
|
let _expected_excess = sum_inputs.as_point() - sum_outputs.as_point() - fee_commitment.as_point();
|
||||||
|
|
||||||
// Check excess pubkey matches
|
// Check excess pubkey matches
|
||||||
let excess_point = CompressedRistretto::from_slice(&self.excess_pubkey)
|
let excess_point = CompressedRistretto::from_slice(&self.excess_pubkey)
|
||||||
|
|
@ -662,7 +662,7 @@ impl ConfidentialTransactionBuilder {
|
||||||
/// Build the transaction
|
/// Build the transaction
|
||||||
pub fn build<R: RngCore + CryptoRng>(self, rng: &mut R) -> Result<ConfidentialTransaction> {
|
pub fn build<R: RngCore + CryptoRng>(self, rng: &mut R) -> Result<ConfidentialTransaction> {
|
||||||
// Calculate total inputs and outputs
|
// Calculate total inputs and outputs
|
||||||
let total_input: u64 = self.outputs.iter().map(|(_, a)| *a).sum::<u64>() + self.fee;
|
let _total_input: u64 = self.outputs.iter().map(|(_, a)| *a).sum::<u64>() + self.fee;
|
||||||
|
|
||||||
// Collect input blindings
|
// Collect input blindings
|
||||||
let input_blindings: Vec<BlindingFactor> = self.inputs.iter()
|
let input_blindings: Vec<BlindingFactor> = self.inputs.iter()
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::ast::{Annotation, Expression, Invariant, Property, PropertyKind};
|
use crate::ast::{Annotation, Invariant, Property, PropertyKind};
|
||||||
use crate::error::{VerifierError, VerifierResult};
|
use crate::error::{VerifierError, VerifierResult};
|
||||||
use crate::prover::{ProofResult, Prover, ProverConfig};
|
use crate::prover::{ProofResult, Prover, ProverConfig};
|
||||||
use crate::symbolic::{SymbolicExecutor, SymbolicState};
|
use crate::symbolic::SymbolicExecutor;
|
||||||
use crate::{Severity, VerificationContext};
|
use crate::{Severity, VerificationContext};
|
||||||
|
|
||||||
/// Result of checking a property.
|
/// Result of checking a property.
|
||||||
|
|
@ -241,7 +241,7 @@ impl PropertyChecker {
|
||||||
prop: &Property,
|
prop: &Property,
|
||||||
) -> VerifierResult<CheckResult> {
|
) -> VerifierResult<CheckResult> {
|
||||||
// Check if there exists a path where property holds
|
// Check if there exists a path where property holds
|
||||||
let state = self.executor.create_initial_state(ctx)?;
|
let _state = self.executor.create_initial_state(ctx)?;
|
||||||
let satisfiable = self.prover.check_sat(&prop.expr)?;
|
let satisfiable = self.prover.check_sat(&prop.expr)?;
|
||||||
|
|
||||||
if satisfiable {
|
if satisfiable {
|
||||||
|
|
@ -265,7 +265,7 @@ impl PropertyChecker {
|
||||||
/// Checks reachability (some state is reachable).
|
/// Checks reachability (some state is reachable).
|
||||||
fn check_reachability(
|
fn check_reachability(
|
||||||
&self,
|
&self,
|
||||||
ctx: &VerificationContext,
|
_ctx: &VerificationContext,
|
||||||
prop: &Property,
|
prop: &Property,
|
||||||
) -> VerifierResult<CheckResult> {
|
) -> VerifierResult<CheckResult> {
|
||||||
// Check if target state is reachable
|
// Check if target state is reachable
|
||||||
|
|
@ -292,7 +292,7 @@ impl PropertyChecker {
|
||||||
ann: &Annotation,
|
ann: &Annotation,
|
||||||
) -> VerifierResult<CheckResult> {
|
) -> VerifierResult<CheckResult> {
|
||||||
// Get function signature
|
// Get function signature
|
||||||
let func = ctx.functions.get(&ann.function).ok_or_else(|| {
|
let _func = ctx.functions.get(&ann.function).ok_or_else(|| {
|
||||||
VerifierError::UnknownFunction(ann.function.clone())
|
VerifierError::UnknownFunction(ann.function.clone())
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ impl Prover {
|
||||||
/// Proves or disproves an expression holds in all states.
|
/// Proves or disproves an expression holds in all states.
|
||||||
pub fn prove(&self, expr: &Expression, state: &SymbolicState) -> VerifierResult<ProofResult> {
|
pub fn prove(&self, expr: &Expression, state: &SymbolicState) -> VerifierResult<ProofResult> {
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let timeout = Duration::from_millis(self.config.timeout_ms);
|
let _timeout = Duration::from_millis(self.config.timeout_ms);
|
||||||
|
|
||||||
// Convert expression and state to SMT constraints
|
// Convert expression and state to SMT constraints
|
||||||
let constraints = self.smt.encode_state(state)?;
|
let constraints = self.smt.encode_state(state)?;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
//! Provides an interface to SMT solvers for constraint solving.
|
//! Provides an interface to SMT solvers for constraint solving.
|
||||||
|
|
||||||
use crate::ast::{BinaryOperator, Expression, Literal, QuantifierKind, UnaryOperator};
|
use crate::ast::{BinaryOperator, Expression, Literal, QuantifierKind, UnaryOperator};
|
||||||
use crate::error::{VerifierError, VerifierResult};
|
use crate::error::VerifierResult;
|
||||||
use crate::symbolic::{SymbolicState, SymbolicValue};
|
use crate::symbolic::{SymbolicState, SymbolicValue};
|
||||||
use crate::VarType;
|
use crate::VarType;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,10 @@ class Tensor {
|
||||||
Tensor sigmoid() => map((x) => 1.0 / (1.0 + math.exp(-x)));
|
Tensor sigmoid() => map((x) => 1.0 / (1.0 + math.exp(-x)));
|
||||||
|
|
||||||
/// Tanh activation
|
/// Tanh activation
|
||||||
Tensor tanh() => map(math.tanh);
|
Tensor tanh() => map((x) {
|
||||||
|
final exp2x = math.exp(2 * x);
|
||||||
|
return (exp2x - 1) / (exp2x + 1);
|
||||||
|
});
|
||||||
|
|
||||||
/// Softmax (for 1D or last axis of 2D)
|
/// Softmax (for 1D or last axis of 2D)
|
||||||
Tensor softmax() {
|
Tensor softmax() {
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ void main() {
|
||||||
const config = SynorConfig(
|
const config = SynorConfig(
|
||||||
apiKey: 'test-key',
|
apiKey: 'test-key',
|
||||||
baseUrl: 'https://custom.api.com',
|
baseUrl: 'https://custom.api.com',
|
||||||
timeout: const Duration(seconds: 60),
|
timeout: Duration(seconds: 60),
|
||||||
maxRetries: 5,
|
maxRetries: 5,
|
||||||
defaultProcessor: ProcessorType.gpu,
|
defaultProcessor: ProcessorType.gpu,
|
||||||
defaultPrecision: Precision.fp16,
|
defaultPrecision: Precision.fp16,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue