Joel
Joel
MModular
Created by Joel on 2/18/2024 in #questions
Is it possible to import modules from a local package into a custom package?
I am writing a object-oriented neural network library (https://github.com/Mathprogrammer5/Mojo-Neural) and I would like to use my (unfinished) implementation of datastructures in Mojo (https://github.com/Mathprogrammer5/Mojo-Datastruct). But when I try to import something from the package with, for example from datastruct.vector import Vector, the vscode extension generates an error: unable to locate module 'datastruct' . So I would like to ask wether it is possible to import something from a local .📦 or .mojopkg file into a custom module in a custom package.
1 replies
MModular
Created by Joel on 1/16/2024 in #questions
Custom decorator
I am currently working on a custom mojo library, and i tried to implement a custom decorator so I could write less code. But while compilation an error ocurred, so I would like to ask: Is it possible to implement custom decorators in Mojo and if yes, what is the syntax for that ? Example Code (The code in my project is too long to mention here):
# defines a decorator extending a functions applicability from Integers to Vectors

# defines the decorator
fn extend_to_vec(func: fn(Int) capturing -> Int) -> fn(DynamicVector[Int]) capturing -> DynamicVector[Int]:
# defines the returned function
fn vecfunc(vec: DynamicVector[Int])-> DynamicVector[Int]:
# return vector
var val = DynamicVector[Int]()
# iterate over vector
for i in range(len(vec)):
# append result of Int function applied to the ith element of the vector
val.append(func(vec[i]))
return val

return vecfunc

# decorator applied to a function incrementing a value by one
@extend_to_vec
fn increment(i: Int) -> Int:
return i + 1

fn main():
# should produce an error, but doesn't
var i = 5
print(i)
i = increment(i)
print(i)

# shouldn't produce an error, but does
var vec = DynamicVector[Int]()
vec.append(1)
vec.append(2)
vec.append(3)
print(vec[0])
vec = increment(vec)
print(vec[0])
# defines a decorator extending a functions applicability from Integers to Vectors

# defines the decorator
fn extend_to_vec(func: fn(Int) capturing -> Int) -> fn(DynamicVector[Int]) capturing -> DynamicVector[Int]:
# defines the returned function
fn vecfunc(vec: DynamicVector[Int])-> DynamicVector[Int]:
# return vector
var val = DynamicVector[Int]()
# iterate over vector
for i in range(len(vec)):
# append result of Int function applied to the ith element of the vector
val.append(func(vec[i]))
return val

return vecfunc

# decorator applied to a function incrementing a value by one
@extend_to_vec
fn increment(i: Int) -> Int:
return i + 1

fn main():
# should produce an error, but doesn't
var i = 5
print(i)
i = increment(i)
print(i)

# shouldn't produce an error, but does
var vec = DynamicVector[Int]()
vec.append(1)
vec.append(2)
vec.append(3)
print(vec[0])
vec = increment(vec)
print(vec[0])
7 replies