Comments (12)
i think this is a great start, github has wiki pages that we could start building the content with, and then wrap it in a nice formatting latter? we could make a github group for modern, open-source, active GA projects, and build the site as a repo in that group. this way it would be isolated from the pygae group. any ideas on names?
hugo, maybe you can float this idea at AGACSE with the other project authors that have not commented?
first draft example set list:
- reflect a vector in 3D
- rotate a vector in 3D
- projection/rejection of vector from plane in 3D.
- convert rotation matrix to rotor,
- determine rotation from reference/rotated frame
- do a CGA transformation. (like this?)
from clifford.
@hugohadfield, perhaps these differences are a good motivation to have an overview of actively developed projects and how they differ when it comes to design choices re inner products, conformal split, naming, inverses, duals ? AFAIK, there is no good such overview, and I recall many of these details to be hard to find in respective sources.
@arsenovic, I do feel it would be helpful to users to have a birds-eye unbiased overview that clarifies the differences, similarities, scope and motivation behind each of these projects. Perhaps a little questionnaire to get a starting point for a meaningful classification ? Just a thought ..
I'm happy to contribute either way.
from clifford.
@enkimute, great to hear, i think your ganja.js readme is very good and the versor one is as well.
a questionnaire looks to me like it could be represented in a comparison table, especially for technical details( like the second half of hugos question list) .
so far the project list has support for c++, js, and python. the versor ports provide this language coverage in and of itself, but there are [good] reasons clifford and ganja were made, so these should be communicated to users.
additionally, solving a set of simple problems in the various projects would also be interesting to compare. so, to review we have
- technical comparison (table)
- overview/purpose/scope (words)
- comparative example set (code)
tangent: the wiki pages on cga and ga need a big cleanup as well. when i am starting a project, i use wiki a lot and i think this would make a big difference, although out of my scope (perhaps an accedemic wing could improve this)
from clifford.
I'm a fan of the idea of a set of comparable (even identical) examples being solved in the various frameworks - will certainly chip in to provide the ganja.js versions.
To make a start on a list of properties that would help get a good overview on differences and similarities, here's an initial attempt (from the top of my head) - perhaps this needs to go in a wiki where it would be easier to extend and collaborate on.
name | description | type/enum |
---|---|---|
maxDimensions | maximum # of dimensions | integer range or unlimitted |
dynamic | is the algebra dynamically generated | boolean |
typed | are multivectors typed or generic | typed / generic |
typeNames | is any convention followed for naming conformal/projective types | Colapinto/custom/.. |
sourceLang | language the project is written in | string |
destLang | language(s) the framework can be used in | string |
metrics | supported metrics | all / non-degenerate / "only 3,1" / ... |
innerProduct | what types of inner product are supported | Hestenes / modified Hestenes / left contraction / .. |
extraProducts | what extra products are provided | regressive / commutator / .. |
generatorNaming | what generator naming convention is used | cyclic / ordered / customizable / .. |
conformal | can you work directly in the null-vector basis | boolean |
conformalBasis | what is the internal choice for e_inf and e_orig | e.g. e_inf = e_min-e_plus, eo = 0.5(e_min + e_plus) |
dual | duality operator (for degenerate metrics) | pss / Poincare |
inverses | how are inverses calculated | matrix / direct |
operatorOverloading | does the framework support operator overloading. (and is there support for GA friendly (ref Hestenes) operator precedence) | withPrecedence / withoutPrecedence / none |
representation | how are multivectors stored | flatFull / flatPartial / dictionary / symbolic |
visualization | are there visualization features | 2D PGA / 3D PGA / 2D CGA / 3D CGA |
This is by heart so I'm sure I've missed things or picked silly or wrong names, feel free to add in or correct as needed.
from clifford.
So I think keeping projects separate under different github repos etc is likely a good idea unless they have considerable interoperability etc. People have different opinions about syntax and definitions of things and almost speak different languages for GA (IPNS/OPNS vs duals, use of directed contractions vs dot products, different constants in front of the null vectors, different names for conformal objects etc)... I think without consensus and a specific goal then organisations/groups tend not to work very well. In the future it would be fantastic to bring various of the projects together but I think that will likely arise organically by shared goals and user base.
from clifford.
good points.
maybe making a page with links to all the projects is the best way to start ,
from clifford.
@enkimute I absolutely agree that an overview would be a good thing to do and it would be great to get a little questionnaire going!
From my perspective the questions I am interested in knowing of a project are:
What are the goals of the project?
Where can I find a tutorial/documentation for getting started with the project?
Are there any tests/example programs written with the project to compare with other systems?
What language is the project written in/can it be used with?
What is the underlying representation of a multivector? (eg. fixed array or dictionary of coefficients)
Are algebras dynamically generated or fixed?
What product operators does the project define? (geometric product, dot product, outer product, left and right contractions...)
How does the project define the join and meet operators?
Are multivectors/blades of different grades typed?
How does the project define the null vectors in the conformal model?
from clifford.
@enkimute I really like your table of info!
@arsenovic I also really like the idea of us having a group and repo for our page comparing libraries and we can host our set of identical code examples there too!
We could call it ActiveGA or something also those lines. I also like the idea of tracking projects that we come accross that are built with the various GA projects such as @ereide 's camera calibration stuff
from clifford.
Nice ideas here! I will definitely help in the effort to document. I am particularly interested in learning more about the implementations out there. Getting ready for AGACSE, will any of you be there?
from clifford.
unfortunately, i will not. i hope you all record the talks so we can watch afterward.
from clifford.
I'll be there @wolftype! Packing my things for Brazil today 🌴 🍹
from clifford.
@wolftype: I will be there. Happy to discuss these things in person.
from clifford.
Related Issues (20)
- repr of subalgebras
- Documentation typos HOT 1
- Add an ipython magic command for quick algebra construction
- leftLaInv fails for complex valued multivectors
- Pickling fails with NUMBA_DISABLE_JIT=1
- Doc builds on master are broken HOT 1
- Improve import time
- Installation issue... Jupyter Notebook HOT 8
- Unexpected numerical result, large difference between matrix and clifford method HOT 3
- Brew version HOT 4
- frame2Mat should return somthing...
- Problem with .inv() function
- Is there a function for line-line intersection?
- Possibly wrong up projection in clifford.gac
- Deviation between MultiVector and MVArray calculation
- Express CGA multivectors in terms of point the origin+infinity
- Support for basis blades that are non-canonical HOT 1
- Meet fails when line intersects sphere at only one point
- AttributeError: module 'numba' has no attribute 'generated_jit' HOT 2
- Deprecated Numba function "generated_jit" HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clifford.