-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #40 from founderswap/develop
v0.1
- Loading branch information
Showing
10 changed files
with
168 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# airtable | ||
|
||
::: swapanything.backend.airtable |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# simple | ||
|
||
::: swapanything.backend.simple |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# swapanything | ||
|
||
::: swapanything |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# airtable | ||
|
||
::: swapanything.select |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# Getting Started | ||
|
||
|
||
### Your first matching round | ||
|
||
This library allow you to match subjects (people, things, whatever) depending | ||
on their availability slots (calendar slots, timeframe, location, | ||
any combination of the abovementioned). Truly, you can use this library as | ||
backend for any sort of matching need. | ||
|
||
The simplest way to test this library is to use the `swapanything` python | ||
package to make a simple swapping exercise. | ||
|
||
```python | ||
from swapanything.backend import simple as backend | ||
from swapanything.select import select_matches | ||
import pandas as pd | ||
|
||
availabilities = [ | ||
["KungFury", "9:00"], | ||
["KungFury", "10:00"], | ||
["KungFury", "13:00"], | ||
["KungFury", "14:00"], | ||
["Triceracop", "9:00"], | ||
["Triceracop", "11:00"], | ||
["Hackerman", "10:00"], | ||
["Hackerman", "11:00"], | ||
["Katana", "12:00"], | ||
["Barbarianna", "12:00"], | ||
["Thor", "13:00"], | ||
["Thor", "14:00"], | ||
["Thor", "15:00"], | ||
["T-Rex", "15:00"], | ||
["T-Rex", "16:00"], | ||
["Hoff 9000", "16:00"], | ||
] | ||
|
||
availabilities_df = pd.DataFrame( | ||
availabilities, columns=["subject", "availability"] | ||
) | ||
|
||
be = backend.SimpleBackend( | ||
availabilities=availabilities_df, | ||
availabilities_column="availability", | ||
availability_subject_column="subject", | ||
) | ||
|
||
all_possible_matches = be.get_all_matches() | ||
# subject availability | ||
# 0 (Barbarianna, Katana) (12:00,) | ||
# 1 (Hackerman, KungFury) (10:00,) | ||
# 2 (Hackerman, Triceracop) (11:00,) | ||
# 3 (Hoff 9000, T-Rex) (16:00,) | ||
# 4 (KungFury, Thor) (13:00, 14:00) | ||
# 5 (KungFury, Triceracop) (9:00,) | ||
# 6 (T-Rex, Thor) (15:00,) | ||
|
||
select_matches(all_possible_matches, backend=be) | ||
# subject availability | ||
# 0 (Barbarianna, Katana) (12:00,) | ||
# 1 (Hackerman, Triceracop) (11:00,) | ||
# 2 (Hoff 9000, T-Rex) (16:00,) | ||
# 3 (KungFury, Thor) (13:00, 14:00) | ||
|
||
``` | ||
|
||
Imagine now that we want to provide a super high importance | ||
to the match `(KungFury, Triceracop)`. | ||
With `select_matches` you can use match scores, and the | ||
algorithm will try to maximize number of matches and total | ||
score! | ||
|
||
This way we ensure that high quality matches are selected. | ||
|
||
```python | ||
scores = [1, 1, 1, 1, 1, 9001, 1] | ||
# (KungFury, Triceracop)... it's over 9000! | ||
select_matches(all_possible_matches, backend=be, match_scores=scores) | ||
# subject availability | ||
# 0 (Barbarianna, Katana) (12:00,) | ||
# 1 (KungFury, Triceracop) (9:00,) | ||
# 2 (T-Rex, Thor) (15:00,) | ||
|
||
``` | ||
|
||
### Advanced Backends | ||
|
||
With python, it is possible to integrate `swapanything` in your application | ||
or custom tool. `swapanything` comes with some pre-configured data backends | ||
(e.g. Airtable, Excel Spreadsheets, SQL) that you can easily use to | ||
kickstart your swaping-based app! | ||
|
||
#### Airtable | ||
|
||
Install airtable dependencies: | ||
|
||
```shell | ||
pip install swap-anything[airtable] | ||
``` | ||
|
||
```python | ||
from swapanything.backend import airtable | ||
from swapanything.select import select_matches | ||
import os | ||
|
||
|
||
airtable_backend = airtable.AirTableBackend( | ||
# subject_id is the record id of the subjects table | ||
subject_features=["Interests", "Tags", "Score1", "Score2"], | ||
availability_subject_column="AvailabilitiesSubjectId", | ||
availabilities_column="Availabilities", | ||
exclusions_subject_columns=["Subject1", "Subject2"] | ||
# Tables | ||
subjects_table_name="Subjects", | ||
availabilities_table_name="Availabilities", | ||
exclusions_table_name="Matches", | ||
# Airtable credentials | ||
client_id=os.environ["AIRTABLE_BASE_ID"], | ||
client_secret=os.environ["AIRTABLE_API_KEY"], | ||
) | ||
|
||
subjects = airtable_backend.get_subjects() | ||
availabilities = airtable_backend.get_availabilities() | ||
|
||
all_matches = be.get_all_matches(exclusions=True) | ||
selected = select_matches(matches, backend=airtable_backend) | ||
``` |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters